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

Unified Diff: chrome/browser/ui/cocoa/chooser_content_view.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
Index: chrome/browser/ui/cocoa/chooser_content_view.mm
diff --git a/chrome/browser/ui/cocoa/chooser_content_view.mm b/chrome/browser/ui/cocoa/chooser_content_view.mm
new file mode 100644
index 0000000000000000000000000000000000000000..ddfd8bdfce22fc7cb53c9e580cdde273d40fe7d8
--- /dev/null
+++ b/chrome/browser/ui/cocoa/chooser_content_view.mm
@@ -0,0 +1,252 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "chrome/browser/ui/cocoa/chooser_content_view.h"
+
+#import "chrome/browser/ui/cocoa/constrained_window/constrained_window_button.h"
+#include "chrome/grit/generated_resources.h"
+#import "third_party/google_toolbox_for_mac/src/AppKit/GTMUILocalizerAndLayoutTweaker.h"
+#import "ui/base/cocoa/controls/hyperlink_button_cell.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/l10n/l10n_util_mac.h"
+
+namespace {
+
+// Chooser width.
+const CGFloat kChooserWidth = 320.0f;
+
+// Chooser height.
+const CGFloat kChooserHeight = 280.0f;
+
+// Distance between the chooser 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 chooser.
+const CGFloat kHorizontalPadding = 10.0f;
+const CGFloat kVerticalPadding = 10.0f;
+
+// Separator alpha value.
+const CGFloat kSeparatorAlphaValue = 0.6f;
+
+// Separator height.
+const CGFloat kSeparatorHeight = 1.0f;
+
+} // namespace
+
+@implementation ChooserContentView
+
+- (instancetype)initWithChooserTitle:(NSString*)chooserTitle {
+ // ------------------------------------
+ // | Chooser title |
+ // | -------------------------------- |
+ // | | option 0 | |
+ // | | option 1 | |
+ // | | option 2 | |
+ // | | | |
+ // | | | |
+ // | | | |
+ // | -------------------------------- |
+ // | [ Connect ] [ Cancel ] |
+ // |----------------------------------|
+ // | Not seeing your device? Get help |
+ // ------------------------------------
+
+ // Determine the dimensions of the chooser.
+ // Once the height and width are set, the buttons and permission menus can
+ // be laid out correctly.
+ NSRect chooserFrame = NSMakeRect(0, 0, kChooserWidth, kChooserHeight);
+
+ if ((self = [super initWithFrame:chooserFrame])) {
+ // Create the views.
+ // Title.
+ titleView_ = [self createChooserTitle:chooserTitle];
+ CGFloat titleHeight = NSHeight([titleView_ frame]);
+
+ // Connect button.
+ connectButton_ = [self createConnectButton];
+ CGFloat connectButtonWidth = NSWidth([connectButton_ frame]);
+ CGFloat connectButtonHeight = NSHeight([connectButton_ frame]);
+
+ // Cancel button.
+ cancelButton_ = [self createCancelButton];
+ CGFloat cancelButtonWidth = NSWidth([cancelButton_ frame]);
+
+ // Separator.
+ separator_ = [self createSeparator];
+
+ // Message.
+ message_ = [self createMessage];
+ CGFloat messageWidth = NSWidth([message_ frame]);
+ CGFloat messageHeight = NSHeight([message_ frame]);
+
+ // Help button.
+ helpButton_ = [self createHelpButton];
+
+ // ScollView embedding with TableView.
+ CGFloat scrollViewWidth = kChooserWidth - 2 * kMarginX;
+ CGFloat scrollViewHeight = kChooserHeight - 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_];
+ // Make the column title invisible.
+ [tableView_ setHeaderView:nil];
+ [tableView_ setFocusRingType:NSFocusRingTypeNone];
+
+ // Lay out the views.
+ // Title.
+ CGFloat titleOriginX = kMarginX;
+ CGFloat titleOriginY = kChooserHeight - kMarginY - titleHeight;
+ [titleView_ setFrameOrigin:NSMakePoint(titleOriginX, titleOriginY)];
+ [self addSubview:titleView_];
+
+ // ScollView.
+ [scrollView_ setDocumentView:tableView_];
+ [self addSubview:scrollView_];
+
+ // Connect button.
+ CGFloat connectButtonOriginX = kChooserWidth - kMarginX -
+ kHorizontalPadding - connectButtonWidth -
+ cancelButtonWidth;
+ CGFloat connectButtonOriginY =
+ kMarginY + messageHeight + 2 * kVerticalPadding;
+ [connectButton_
+ setFrameOrigin:NSMakePoint(connectButtonOriginX, connectButtonOriginY)];
+ [connectButton_ setEnabled:NO];
+ [self addSubview:connectButton_];
+
+ // Cancel button.
+ CGFloat cancelButtonOriginX = kChooserWidth - kMarginX - cancelButtonWidth;
+ CGFloat cancelButtonOriginY = connectButtonOriginY;
+ [cancelButton_
+ setFrameOrigin:NSMakePoint(cancelButtonOriginX, cancelButtonOriginY)];
+ [self addSubview:cancelButton_];
+
+ // Separator.
+ CGFloat separatorOriginX = 0.0f;
+ CGFloat separatorOriginY = kMarginY + messageHeight + kVerticalPadding;
+ [separator_ setFrameOrigin:NSMakePoint(separatorOriginX, separatorOriginY)];
+ [self addSubview:separator_];
+
+ // Message.
+ CGFloat messageOriginX = kMarginX;
+ CGFloat messageOriginY = kMarginY;
+ [message_ setFrameOrigin:NSMakePoint(messageOriginX, messageOriginY)];
+ [self addSubview:message_];
+
+ // Help button.
+ CGFloat helpButtonOriginX =
+ kMarginX + messageWidth - kHorizontalPadding / 2;
+ CGFloat helpButtonOriginY = kMarginY;
+ [helpButton_
+ setFrameOrigin:NSMakePoint(helpButtonOriginX, helpButtonOriginY)];
+ [self addSubview:helpButton_];
+ }
+
+ return self;
+}
+
+- (base::scoped_nsobject<NSTextField>)createChooserTitle:(NSString*)title {
+ base::scoped_nsobject<NSTextField> titleView(
+ [[NSTextField alloc] initWithFrame:NSZeroRect]);
+ [titleView setDrawsBackground:NO];
+ [titleView setBezeled:NO];
+ [titleView setEditable:NO];
+ [titleView setSelectable:NO];
+ [titleView setStringValue:title];
+ [titleView setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]];
+ // The height is arbitrary as it will be adjusted later.
+ [titleView setFrameSize:NSMakeSize(kChooserWidth - 2 * kMarginX, 0.0f)];
+ [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:titleView];
+ return titleView;
+}
+
+- (base::scoped_nsobject<NSButton>)createButtonWithTitle:(NSString*)title {
+ base::scoped_nsobject<NSButton> button(
+ [[ConstrainedWindowButton alloc] initWithFrame:NSZeroRect]);
+ [button setButtonType:NSMomentaryPushInButton];
+ [button setTitle:title];
+ [button sizeToFit];
+ return button;
+}
+
+- (base::scoped_nsobject<NSButton>)createConnectButton {
+ NSString* connectTitle =
+ l10n_util::GetNSString(IDS_CHOOSER_BUBBLE_CONNECT_BUTTON_TEXT);
+ return [self createButtonWithTitle:connectTitle];
+}
+
+- (base::scoped_nsobject<NSButton>)createCancelButton {
+ NSString* cancelTitle =
+ l10n_util::GetNSString(IDS_CHOOSER_BUBBLE_CANCEL_BUTTON_TEXT);
+ return [self createButtonWithTitle:cancelTitle];
+}
+
+- (base::scoped_nsobject<NSBox>)createSeparator {
+ base::scoped_nsobject<NSBox> spacer([[NSBox alloc] initWithFrame:NSZeroRect]);
+ [spacer setBoxType:NSBoxSeparator];
+ [spacer setBorderType:NSLineBorder];
+ [spacer setAlphaValue:kSeparatorAlphaValue];
+ [spacer setFrameSize:NSMakeSize(kChooserWidth, kSeparatorHeight)];
+ return spacer;
+}
+
+- (base::scoped_nsobject<NSTextField>)createMessage {
+ 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>)createHelpButton {
+ 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];
+ return button;
+}
+
+- (NSTableView*)tableView {
+ return tableView_.get();
+}
+
+- (NSButton*)connectButton {
+ return connectButton_.get();
+}
+
+- (NSButton*)cancelButton {
+ return cancelButton_.get();
+}
+
+- (NSButton*)helpButton {
+ return helpButton_.get();
+}
+
+@end
« no previous file with comments | « chrome/browser/ui/cocoa/chooser_content_view.h ('k') | chrome/browser/ui/cocoa/website_settings/chooser_bubble_ui_cocoa.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698