| 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
|
|
|