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

Unified Diff: chrome/browser/ui/cocoa/chooser_content_view_cocoa.mm

Issue 2595083002: Change ChooserContentView[Cocoa] class name to be DeviceChooserContentView[Cocoa] (Closed)
Patch Set: merge master Created 3 years, 12 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_cocoa.mm
diff --git a/chrome/browser/ui/cocoa/chooser_content_view_cocoa.mm b/chrome/browser/ui/cocoa/chooser_content_view_cocoa.mm
deleted file mode 100644
index 0c3db026114da7ae62d49effe144019d99f5c776..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/cocoa/chooser_content_view_cocoa.mm
+++ /dev/null
@@ -1,913 +0,0 @@
-// 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_cocoa.h"
-
-#include <algorithm>
-
-#include "base/macros.h"
-#include "base/strings/sys_string_conversions.h"
-#include "chrome/browser/chooser_controller/chooser_controller.h"
-#import "chrome/browser/ui/cocoa/constrained_window/constrained_window_button.h"
-#include "chrome/browser/ui/cocoa/spinner_view.h"
-#include "chrome/grit/generated_resources.h"
-#include "skia/ext/skia_utils_mac.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_mac.h"
-#include "ui/base/resource/resource_bundle.h"
-#include "ui/gfx/color_palette.h"
-#include "ui/gfx/image/image_skia_util_mac.h"
-#include "ui/gfx/paint_vector_icon.h"
-#include "ui/gfx/vector_icons_public.h"
-#include "ui/resources/grit/ui_resources.h"
-
-namespace {
-
-// Chooser width.
-const CGFloat kChooserWidth = 390.0f;
-
-// Chooser height.
-const CGFloat kChooserHeight = 330.0f;
-
-// Row view image size.
-const CGFloat kRowViewImageSize = 20.0f;
-
-// Table row view height.
-const CGFloat kTableRowViewOneLineHeight = 23.0f;
-const CGFloat kTableRowViewTwoLinesHeight = 39.0f;
-
-// Spinner size.
-const CGFloat kSpinnerSize = 24.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;
-
-// Distance between two views inside the table row view.
-const CGFloat kTableRowViewHorizontalPadding = 5.0f;
-const CGFloat kTableRowViewVerticalPadding = 1.0f;
-
-// Distance between the adapter off help link and the scroll view boundaries.
-const CGFloat kAdapterOffHelpLinkPadding = 5.0f;
-
-// The lookup table for signal strength level image.
-const int kSignalStrengthLevelImageIds[5] = {IDR_SIGNAL_0_BAR, IDR_SIGNAL_1_BAR,
- IDR_SIGNAL_2_BAR, IDR_SIGNAL_3_BAR,
- IDR_SIGNAL_4_BAR};
-const int kSignalStrengthLevelImageSelectedIds[5] = {
- IDR_SIGNAL_0_BAR_SELECTED, IDR_SIGNAL_1_BAR_SELECTED,
- IDR_SIGNAL_2_BAR_SELECTED, IDR_SIGNAL_3_BAR_SELECTED,
- IDR_SIGNAL_4_BAR_SELECTED};
-
-// Creates a label with |text|.
-base::scoped_nsobject<NSTextField> CreateLabel(NSString* text) {
- base::scoped_nsobject<NSTextField> label(
- [[NSTextField alloc] initWithFrame:NSZeroRect]);
- [label setDrawsBackground:NO];
- [label setBezeled:NO];
- [label setEditable:NO];
- [label setSelectable:NO];
- [label setStringValue:text];
- [label setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]];
- [label setTextColor:[NSColor blackColor]];
- [label sizeToFit];
- return label;
-}
-
-} // namespace
-
-// A table row view that contains one line of text, and optionally contains an
-// image in front of the text.
-@interface ChooserContentTableRowView : NSView {
- @private
- base::scoped_nsobject<NSImageView> image_;
- base::scoped_nsobject<NSTextField> text_;
- base::scoped_nsobject<NSTextField> pairedStatus_;
-}
-
-// Designated initializer.
-// This initializer is used when the chooser needs to show the no-devices-found
-// message.
-- (instancetype)initWithText:(NSString*)text;
-
-// Designated initializer.
-- (instancetype)initWithText:(NSString*)text
- signalStrengthLevel:(NSInteger)level
- isConnected:(bool)isConnected
- isPaired:(bool)isPaired
- rowHeight:(CGFloat)rowHeight
- textNeedIndentation:(bool)textNeedIndentation;
-
-// Gets the image in front of the text.
-- (NSImageView*)image;
-
-// Gets the text.
-- (NSTextField*)text;
-
-// Gets the paired status.
-- (NSTextField*)pairedStatus;
-
-@end
-
-@implementation ChooserContentTableRowView
-
-- (instancetype)initWithText:(NSString*)text {
- if ((self = [super initWithFrame:NSZeroRect])) {
- text_ = CreateLabel(text);
- CGFloat textHeight = NSHeight([text_ frame]);
- CGFloat textOriginX = kTableRowViewHorizontalPadding;
- CGFloat textOriginY = (kTableRowViewOneLineHeight - textHeight) / 2;
- [text_ setFrameOrigin:NSMakePoint(textOriginX, textOriginY)];
- [self addSubview:text_];
- }
-
- return self;
-}
-
-- (instancetype)initWithText:(NSString*)text
- signalStrengthLevel:(NSInteger)level
- isConnected:(bool)isConnected
- isPaired:(bool)isPaired
- rowHeight:(CGFloat)rowHeight
- textNeedIndentation:(bool)textNeedIndentation {
- if ((self = [super initWithFrame:NSZeroRect])) {
- // Create the views.
- // Image.
- ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
- NSImage* image = nullptr;
- if (isConnected) {
- image = gfx::NSImageFromImageSkia(gfx::CreateVectorIcon(
- gfx::VectorIconId::BLUETOOTH_CONNECTED, gfx::kChromeIconGrey));
- } else if (level != -1) {
- DCHECK_GE(level, 0);
- DCHECK_LT(level, base::checked_cast<NSInteger>(
- arraysize(kSignalStrengthLevelImageIds)));
- image = rb.GetNativeImageNamed(kSignalStrengthLevelImageIds[level])
- .ToNSImage();
- }
-
- CGFloat imageOriginX = kTableRowViewHorizontalPadding;
- CGFloat imageOriginY = (rowHeight - kRowViewImageSize) / 2;
- if (image) {
- image_.reset([[NSImageView alloc]
- initWithFrame:NSMakeRect(imageOriginX, imageOriginY,
- kRowViewImageSize, kRowViewImageSize)]);
- [image_ setImage:image];
- [self addSubview:image_];
- }
-
- // Text.
- text_ = CreateLabel(text);
- CGFloat textHeight = NSHeight([text_ frame]);
-
- // Paired status.
- CGFloat pairedStatusHeight = 0.0f;
- if (isPaired) {
- pairedStatus_ = CreateLabel(
- l10n_util::GetNSString(IDS_DEVICE_CHOOSER_PAIRED_STATUS_TEXT));
- [pairedStatus_
- setTextColor:skia::SkColorToCalibratedNSColor(gfx::kGoogleGreen700)];
- pairedStatusHeight = NSHeight([pairedStatus_ frame]);
- }
-
- // Lay out the views.
- // Text.
- CGFloat textOriginX = kTableRowViewHorizontalPadding;
- if (textNeedIndentation)
- textOriginX += imageOriginX + kRowViewImageSize;
- CGFloat textOriginY;
- if (isPaired) {
- textOriginY = pairedStatusHeight +
- (rowHeight - textHeight - pairedStatusHeight -
- kTableRowViewVerticalPadding) /
- 2 +
- kTableRowViewVerticalPadding;
- } else {
- textOriginY = (rowHeight - textHeight) / 2;
- }
-
- [text_ setFrameOrigin:NSMakePoint(textOriginX, textOriginY)];
- [self addSubview:text_];
-
- // Paired status.
- if (isPaired) {
- CGFloat pairedStatusOriginX = textOriginX;
- CGFloat pairedStatusOriginY =
- (rowHeight - textHeight - pairedStatusHeight -
- kTableRowViewVerticalPadding) /
- 2;
- [pairedStatus_
- setFrameOrigin:NSMakePoint(pairedStatusOriginX, pairedStatusOriginY)];
- [self addSubview:pairedStatus_];
- }
- }
-
- return self;
-}
-
-- (NSImageView*)image {
- return image_.get();
-}
-
-- (NSTextField*)text {
- return text_.get();
-}
-
-- (NSTextField*)pairedStatus {
- return pairedStatus_.get();
-}
-
-@end
-
-class ChooserContentViewController : public ChooserController::View {
- public:
- ChooserContentViewController(ChooserController* chooser_controller,
- NSButton* adapter_off_help_button,
- NSTextField* adapter_off_message,
- NSTableView* table_view,
- SpinnerView* spinner,
- NSTextField* scanning_message,
- NSTextField* word_connector,
- NSButton* rescan_button);
- ~ChooserContentViewController() override;
-
- // ChooserController::View:
- void OnOptionsInitialized() override;
- void OnOptionAdded(size_t index) override;
- void OnOptionRemoved(size_t index) override;
- void OnOptionUpdated(size_t index) override;
- void OnAdapterEnabledChanged(bool enabled) override;
- void OnRefreshStateChanged(bool refreshing) override;
-
- void UpdateTableView();
-
- private:
- ChooserController* chooser_controller_;
- NSButton* adapter_off_help_button_;
- NSTextField* adapter_off_message_;
- NSTableView* table_view_;
- SpinnerView* spinner_;
- NSTextField* scanning_message_;
- NSTextField* word_connector_;
- NSButton* rescan_button_;
-
- DISALLOW_COPY_AND_ASSIGN(ChooserContentViewController);
-};
-
-ChooserContentViewController::ChooserContentViewController(
- ChooserController* chooser_controller,
- NSButton* adapter_off_help_button,
- NSTextField* adapter_off_message,
- NSTableView* table_view,
- SpinnerView* spinner,
- NSTextField* scanning_message,
- NSTextField* word_connector,
- NSButton* rescan_button)
- : chooser_controller_(chooser_controller),
- adapter_off_help_button_(adapter_off_help_button),
- adapter_off_message_(adapter_off_message),
- table_view_(table_view),
- spinner_(spinner),
- scanning_message_(scanning_message),
- word_connector_(word_connector),
- rescan_button_(rescan_button) {
- DCHECK(chooser_controller_);
- DCHECK(adapter_off_help_button_);
- DCHECK(adapter_off_message_);
- DCHECK(table_view_);
- DCHECK(spinner_);
- DCHECK(scanning_message_);
- DCHECK(word_connector_);
- DCHECK(rescan_button_);
- chooser_controller_->set_view(this);
-}
-
-ChooserContentViewController::~ChooserContentViewController() {
- chooser_controller_->set_view(nullptr);
-}
-
-void ChooserContentViewController::OnOptionsInitialized() {
- UpdateTableView();
-}
-
-void ChooserContentViewController::OnOptionAdded(size_t index) {
- UpdateTableView();
- [table_view_ setHidden:NO];
- [spinner_ setHidden:YES];
-}
-
-void ChooserContentViewController::OnOptionRemoved(size_t index) {
- // |table_view_| will automatically select the removed item's next item.
- // So here it tracks if the removed item is the item that was currently
- // selected, if so, deselect it. Also if the removed item is before the
- // currently selected item, the currently selected item's index needs to
- // be adjusted by one.
- NSIndexSet* selected_rows = [table_view_ selectedRowIndexes];
- NSMutableIndexSet* updated_selected_rows = [NSMutableIndexSet indexSet];
- NSUInteger row = [selected_rows firstIndex];
- while (row != NSNotFound) {
- if (row < index)
- [updated_selected_rows addIndex:row];
- else if (row > index)
- [updated_selected_rows addIndex:row - 1];
- row = [selected_rows indexGreaterThanIndex:row];
- }
-
- [table_view_ selectRowIndexes:updated_selected_rows byExtendingSelection:NO];
-
- UpdateTableView();
-}
-
-void ChooserContentViewController::OnOptionUpdated(size_t index) {
- UpdateTableView();
-}
-
-void ChooserContentViewController::OnAdapterEnabledChanged(bool enabled) {
- // No row is selected since the adapter status has changed.
- // This will also disable the OK button if it was enabled because
- // of a previously selected row.
- [table_view_ deselectAll:nil];
- UpdateTableView();
- [table_view_ setHidden:enabled ? NO : YES];
- [adapter_off_help_button_ setHidden:enabled ? YES : NO];
- [adapter_off_message_ setHidden:enabled ? YES : NO];
-
- [spinner_ setHidden:YES];
-
- [scanning_message_ setHidden:YES];
- // When adapter is enabled, show |word_connector_| and |rescan_button_|;
- // otherwise hide them.
- [word_connector_ setHidden:enabled ? NO : YES];
- [rescan_button_ setHidden:enabled ? NO : YES];
-}
-
-void ChooserContentViewController::OnRefreshStateChanged(bool refreshing) {
- if (refreshing) {
- // No row is selected since the chooser is refreshing.
- // This will also disable the OK button if it was enabled because
- // of a previously selected row.
- [table_view_ deselectAll:nil];
- UpdateTableView();
- }
-
- // When refreshing and no option available yet, hide |table_view_| and show
- // |spinner_|. Otherwise show |table_view_| and hide |spinner_|.
- bool table_view_hidden =
- refreshing && (chooser_controller_->NumOptions() == 0);
- [table_view_ setHidden:table_view_hidden ? YES : NO];
- [spinner_ setHidden:table_view_hidden ? NO : YES];
-
- // When refreshing, show |scanning_message_| and hide |word_connector_| and
- // |rescan_button_|.
- // When complete, show |word_connector_| and |rescan_button_| and hide
- // |scanning_message_|.
- [scanning_message_ setHidden:refreshing ? NO : YES];
- [word_connector_ setHidden:refreshing ? YES : NO];
- [rescan_button_ setHidden:refreshing ? YES : NO];
-}
-
-void ChooserContentViewController::UpdateTableView() {
- [table_view_ setEnabled:chooser_controller_->NumOptions() > 0];
- // For NSView-based table views, calling reloadData will deselect the
- // currently selected row, so |selected_rows| stores the currently selected
- // rows in order to select them again.
- NSIndexSet* selected_rows = [table_view_ selectedRowIndexes];
- [table_view_ reloadData];
- [table_view_ selectRowIndexes:selected_rows byExtendingSelection:NO];
-}
-
-@implementation ChooserContentViewCocoa
-
-// TODO(juncai): restructure this function to be some smaller methods to
-// create the pieces for the view. By doing so, the methods that calculate
-// the frame and origins can be moved into those methods, rather than as
-// helper functions.
-- (instancetype)initWithChooserTitle:(NSString*)chooserTitle
- chooserController:
- (std::unique_ptr<ChooserController>)chooserController {
- // ------------------------------------
- // | Chooser title |
- // | -------------------------------- |
- // | | option 0 | |
- // | | option 1 | |
- // | | option 2 | |
- // | | | |
- // | | | |
- // | | | |
- // | -------------------------------- |
- // | [ Connect ] [ Cancel ] |
- // |----------------------------------|
- // | 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])) {
- chooserController_ = std::move(chooserController);
-
- // Create the views.
- // Title.
- titleView_ = [self createChooserTitle:chooserTitle];
- CGFloat titleHeight = NSHeight([titleView_ frame]);
-
- // Adapter turned off help button.
- adapterOffHelpButton_ = [self
- createHyperlinkButtonWithText:
- l10n_util::GetNSString(
- IDS_BLUETOOTH_DEVICE_CHOOSER_TURN_ON_BLUETOOTH_LINK_TEXT)];
- CGFloat adapterOffHelpButtonWidth = NSWidth([adapterOffHelpButton_ frame]);
- CGFloat adapterOffHelpButtonHeight =
- NSHeight([adapterOffHelpButton_ frame]);
-
- // Adapter turned off message.
- adapterOffMessage_ = CreateLabel(l10n_util::GetNSStringF(
- IDS_BLUETOOTH_DEVICE_CHOOSER_TURN_ADAPTER_OFF, base::string16()));
-
- // 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];
-
- // Help button.
- CGFloat helpButtonWidth = 0.0f;
- CGFloat helpButtonHeight = 0.0f;
- if (chooserController_->ShouldShowFootnoteView()) {
- helpButton_ =
- [self createHyperlinkButtonWithText:
- l10n_util::GetNSStringF(
- IDS_DEVICE_CHOOSER_GET_HELP_LINK_WITH_SCANNING_STATUS,
- base::string16())];
- helpButtonWidth = NSWidth([helpButton_ frame]);
- helpButtonHeight = NSHeight([helpButton_ frame]);
- }
-
- // Scanning message.
- scanningMessage_ = CreateLabel(
- l10n_util::GetNSString(IDS_BLUETOOTH_DEVICE_CHOOSER_SCANNING));
-
- // Word connector.
- wordConnector_ = CreateLabel(l10n_util::GetNSStringF(
- IDS_DEVICE_CHOOSER_GET_HELP_LINK_WITH_RE_SCAN_LINK, base::string16(),
- base::string16()));
- CGFloat wordConnectorWidth = NSWidth([wordConnector_ frame]);
-
- // Re-scan button.
- rescanButton_ =
- [self createHyperlinkButtonWithText:
- l10n_util::GetNSString(IDS_BLUETOOTH_DEVICE_CHOOSER_RE_SCAN)];
-
- // ScollView embedding with TableView.
- CGFloat scrollViewWidth = kChooserWidth - 2 * kMarginX;
- CGFloat scrollViewHeight =
- kChooserHeight - 2 * kMarginY -
- (chooserController_->ShouldShowFootnoteView() ? 4 * kVerticalPadding
- : 2 * kVerticalPadding) -
- titleHeight - connectButtonHeight - helpButtonHeight;
- CGFloat scrollViewOriginX = kMarginX;
- CGFloat scrollViewOriginY =
- kMarginY + helpButtonHeight +
- (chooserController_->ShouldShowFootnoteView() ? 3 * kVerticalPadding
- : kVerticalPadding) +
- connectButtonHeight;
- NSRect scrollFrame = NSMakeRect(scrollViewOriginX, scrollViewOriginY,
- scrollViewWidth, scrollViewHeight);
- scrollView_.reset([[NSScrollView alloc] initWithFrame:scrollFrame]);
- [scrollView_ setBorderType:NSBezelBorder];
- [scrollView_ setHasVerticalScroller:YES];
- [scrollView_ setHasHorizontalScroller:YES];
- [scrollView_ setAutohidesScrollers:YES];
- [scrollView_ setDrawsBackground:NO];
-
- // 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];
- [tableView_
- setAllowsMultipleSelection:chooserController_->AllowMultipleSelection()
- ? YES
- : NO];
-
- // Spinner.
- // Set the spinner in the center of the scroll view.
- CGFloat spinnerOriginX =
- scrollViewOriginX + (scrollViewWidth - kSpinnerSize) / 2;
- CGFloat spinnerOriginY =
- scrollViewOriginY + (scrollViewHeight - kSpinnerSize) / 2;
- spinner_.reset([[SpinnerView alloc]
- initWithFrame:NSMakeRect(spinnerOriginX, spinnerOriginY, kSpinnerSize,
- kSpinnerSize)]);
-
- // Lay out the views.
- // Title.
- CGFloat titleOriginX = kMarginX;
- CGFloat titleOriginY = kChooserHeight - kMarginY - titleHeight;
- [titleView_ setFrameOrigin:NSMakePoint(titleOriginX, titleOriginY)];
- [self addSubview:titleView_];
-
- // Adapter turned off help button.
- CGFloat adapterOffHelpButtonOriginX = kMarginX + kAdapterOffHelpLinkPadding;
- CGFloat adapterOffHelpButtonOriginY = titleOriginY - kVerticalPadding -
- adapterOffHelpButtonHeight -
- kAdapterOffHelpLinkPadding;
- [adapterOffHelpButton_
- setFrameOrigin:NSMakePoint(adapterOffHelpButtonOriginX,
- adapterOffHelpButtonOriginY)];
- [adapterOffHelpButton_ setTarget:self];
- [adapterOffHelpButton_ setAction:@selector(onAdapterOffHelp:)];
- [adapterOffHelpButton_ setHidden:YES];
- [self addSubview:adapterOffHelpButton_];
-
- // Adapter turned off message.
- CGFloat adapterOffMessageOriginX = adapterOffHelpButtonOriginX +
- adapterOffHelpButtonWidth -
- kHorizontalPadding / 2;
- CGFloat adapterOffMessageOriginY = adapterOffHelpButtonOriginY;
- [adapterOffMessage_ setFrameOrigin:NSMakePoint(adapterOffMessageOriginX,
- adapterOffMessageOriginY)];
- [adapterOffMessage_ setHidden:YES];
- [self addSubview:adapterOffMessage_];
-
- // ScollView and Spinner. Only one of them is shown.
- [scrollView_ setDocumentView:tableView_];
- [self addSubview:scrollView_];
- [spinner_ setHidden:YES];
- [self addSubview:spinner_];
-
- // Connect button.
- CGFloat connectButtonOriginX = kChooserWidth - kMarginX -
- kHorizontalPadding - connectButtonWidth -
- cancelButtonWidth;
- CGFloat connectButtonOriginY =
- kMarginY + helpButtonHeight +
- (chooserController_->ShouldShowFootnoteView() ? 2 * kVerticalPadding
- : 0.0f);
- [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_];
-
- if (chooserController_->ShouldShowFootnoteView()) {
- // Separator.
- CGFloat separatorOriginX = 0.0f;
- separatorOriginY_ = kMarginY + helpButtonHeight + kVerticalPadding;
- [separator_
- setFrameOrigin:NSMakePoint(separatorOriginX, separatorOriginY_)];
- [self addSubview:separator_];
-
- // Help button.
- CGFloat helpButtonOriginX = kMarginX;
- CGFloat helpButtonOriginY = (kVerticalPadding + kMarginY) / 2;
- [helpButton_
- setFrameOrigin:NSMakePoint(helpButtonOriginX, helpButtonOriginY)];
- [helpButton_ setTarget:self];
- [helpButton_ setAction:@selector(onHelpPressed:)];
- [self addSubview:helpButton_];
-
- // Scanning message.
- CGFloat scanningMessageOriginX =
- kMarginX + helpButtonWidth - kHorizontalPadding / 2;
- CGFloat scanningMessageOriginY = helpButtonOriginY;
- [scanningMessage_ setFrameOrigin:NSMakePoint(scanningMessageOriginX,
- scanningMessageOriginY)];
- [self addSubview:scanningMessage_];
- [scanningMessage_ setHidden:YES];
-
- // Word connector.
- CGFloat wordConnectorOriginX =
- kMarginX + helpButtonWidth - kHorizontalPadding / 2;
- CGFloat wordConnectorOriginY = helpButtonOriginY;
- [wordConnector_ setFrameOrigin:NSMakePoint(wordConnectorOriginX,
- wordConnectorOriginY)];
- [self addSubview:wordConnector_];
- [wordConnector_ setHidden:YES];
-
- // Re-scan button.
- CGFloat reScanButtonOriginX =
- kMarginX + helpButtonWidth + wordConnectorWidth - kHorizontalPadding;
- CGFloat reScanButtonOriginY = helpButtonOriginY;
- [rescanButton_
- setFrameOrigin:NSMakePoint(reScanButtonOriginX, reScanButtonOriginY)];
- [rescanButton_ setTarget:self];
- [rescanButton_ setAction:@selector(onRescan:)];
- [self addSubview:rescanButton_];
- [rescanButton_ setHidden:YES];
- }
-
- chooserContentViewController_.reset(new ChooserContentViewController(
- chooserController_.get(), adapterOffHelpButton_.get(),
- adapterOffMessage_.get(), tableView_.get(), spinner_.get(),
- scanningMessage_.get(), wordConnector_.get(), rescanButton_.get()));
- }
-
- 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<NSView>)createTableRowView:(NSInteger)row {
- NSInteger level = -1;
- bool isConnected = false;
- bool isPaired = false;
- size_t numOptions = chooserController_->NumOptions();
- base::scoped_nsobject<NSView> tableRowView;
- if (numOptions == 0) {
- DCHECK_EQ(0, row);
- tableRowView.reset([[ChooserContentTableRowView alloc]
- initWithText:[self optionAtIndex:row]]);
- } else {
- DCHECK_GE(row, 0);
- DCHECK_LT(row, base::checked_cast<NSInteger>(numOptions));
- size_t rowIndex = base::checked_cast<size_t>(row);
- if (chooserController_->ShouldShowIconBeforeText()) {
- level = base::checked_cast<NSInteger>(
- chooserController_->GetSignalStrengthLevel(rowIndex));
- }
- isConnected = chooserController_->IsConnected(rowIndex);
- isPaired = chooserController_->IsPaired(rowIndex);
- bool textNeedIndentation = false;
- for (size_t i = 0; i < numOptions; ++i) {
- if (chooserController_->GetSignalStrengthLevel(i) != -1 ||
- chooserController_->IsConnected(i)) {
- textNeedIndentation = true;
- break;
- }
- }
- tableRowView.reset([[ChooserContentTableRowView alloc]
- initWithText:[self optionAtIndex:row]
- signalStrengthLevel:level
- isConnected:isConnected
- isPaired:isPaired
- rowHeight:[self tableRowViewHeight:row]
- textNeedIndentation:textNeedIndentation]);
- }
-
- return tableRowView;
-}
-
-- (CGFloat)tableRowViewHeight:(NSInteger)row {
- size_t numOptions = chooserController_->NumOptions();
- if (numOptions == 0) {
- DCHECK_EQ(0, row);
- return kTableRowViewOneLineHeight;
- }
-
- DCHECK_GE(row, 0);
- DCHECK_LT(row, base::checked_cast<NSInteger>(numOptions));
- size_t rowIndex = base::checked_cast<size_t>(row);
- return chooserController_->IsPaired(rowIndex) ? kTableRowViewTwoLinesHeight
- : kTableRowViewOneLineHeight;
-}
-
-- (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 =
- base::SysUTF16ToNSString(chooserController_->GetOkButtonLabel());
- return [self createButtonWithTitle:connectTitle];
-}
-
-- (base::scoped_nsobject<NSButton>)createCancelButton {
- NSString* cancelTitle =
- l10n_util::GetNSString(IDS_DEVICE_CHOOSER_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<NSButton>)createHyperlinkButtonWithText:
- (NSString*)text {
- base::scoped_nsobject<NSButton> button(
- [[NSButton alloc] initWithFrame:NSZeroRect]);
- base::scoped_nsobject<HyperlinkButtonCell> cell(
- [[HyperlinkButtonCell alloc] initTextCell:text]);
- [button setCell:cell.get()];
- [button sizeToFit];
- return button;
-}
-
-- (NSButton*)adapterOffHelpButton {
- return adapterOffHelpButton_.get();
-}
-
-- (NSTableView*)tableView {
- return tableView_.get();
-}
-
-- (SpinnerView*)spinner {
- return spinner_.get();
-}
-
-- (NSButton*)connectButton {
- return connectButton_.get();
-}
-
-- (NSButton*)cancelButton {
- return cancelButton_.get();
-}
-
-- (NSButton*)helpButton {
- return helpButton_.get();
-}
-
-- (NSTextField*)scanningMessage {
- return scanningMessage_.get();
-}
-
-- (NSTextField*)wordConnector {
- return wordConnector_.get();
-}
-
-- (NSButton*)rescanButton {
- return rescanButton_.get();
-}
-
-- (NSInteger)numberOfOptions {
- // When there are no devices, the table contains a message saying there are
- // no devices, so the number of rows is always at least 1.
- return std::max(static_cast<NSInteger>(chooserController_->NumOptions()),
- static_cast<NSInteger>(1));
-}
-
-// When this function is called with numOptions == 0, it is to show the
-// message saying there are no devices.
-- (NSString*)optionAtIndex:(NSInteger)index {
- NSInteger numOptions =
- static_cast<NSInteger>(chooserController_->NumOptions());
- if (numOptions == 0) {
- DCHECK_EQ(0, index);
- return base::SysUTF16ToNSString(chooserController_->GetNoOptionsText());
- }
-
- DCHECK_GE(index, 0);
- DCHECK_LT(index, numOptions);
-
- return base::SysUTF16ToNSString(
- chooserController_->GetOption(static_cast<size_t>(index)));
-}
-
-- (void)updateTableView {
- chooserContentViewController_->UpdateTableView();
-}
-
-- (void)accept {
- NSIndexSet* selectedRows = [tableView_ selectedRowIndexes];
- NSUInteger index = [selectedRows firstIndex];
- std::vector<size_t> indices;
- while (index != NSNotFound) {
- indices.push_back(index);
- index = [selectedRows indexGreaterThanIndex:index];
- }
- chooserController_->Select(indices);
-}
-
-- (void)cancel {
- chooserController_->Cancel();
-}
-
-- (void)close {
- chooserController_->Close();
-}
-
-- (void)onAdapterOffHelp:(id)sender {
- chooserController_->OpenAdapterOffHelpUrl();
-}
-
-- (void)onRescan:(id)sender {
- chooserController_->RefreshOptions();
-}
-
-- (void)onHelpPressed:(id)sender {
- chooserController_->OpenHelpCenterUrl();
-}
-
-- (void)updateContentRowColor {
- NSIndexSet* selectedRows = [tableView_ selectedRowIndexes];
- NSInteger numOptions =
- base::checked_cast<NSInteger>(chooserController_->NumOptions());
- ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
- for (NSInteger rowIndex = 0; rowIndex < numOptions; ++rowIndex) {
- BOOL isSelected = [selectedRows containsIndex:rowIndex];
- // Update the color of the text.
- [[self tableRowViewText:rowIndex]
- setTextColor:(isSelected ? [NSColor whiteColor]
- : [NSColor blackColor])];
-
- // Update the color of the image.
- if (chooserController_->ShouldShowIconBeforeText()) {
- if (chooserController_->IsConnected(rowIndex)) {
- [[self tableRowViewImage:rowIndex]
- setImage:gfx::NSImageFromImageSkia(gfx::CreateVectorIcon(
- gfx::VectorIconId::BLUETOOTH_CONNECTED,
- isSelected ? SK_ColorWHITE : gfx::kChromeIconGrey))];
- } else {
- int signalStrengthLevel =
- chooserController_->GetSignalStrengthLevel(rowIndex);
- if (signalStrengthLevel != -1) {
- int imageId =
- isSelected
- ? kSignalStrengthLevelImageSelectedIds[signalStrengthLevel]
- : kSignalStrengthLevelImageIds[signalStrengthLevel];
- [[self tableRowViewImage:rowIndex]
- setImage:rb.GetNativeImageNamed(imageId).ToNSImage()];
- }
- }
- }
-
- // Update the color of paired status.
- NSTextField* pairedStatusText = [self tableRowViewPairedStatus:rowIndex];
- if (pairedStatusText) {
- [pairedStatusText setTextColor:(skia::SkColorToCalibratedNSColor(
- isSelected ? gfx::kGoogleGreen300
- : gfx::kGoogleGreen700))];
- }
- }
-}
-
-- (NSImageView*)tableRowViewImage:(NSInteger)row {
- ChooserContentTableRowView* tableRowView =
- [tableView_ viewAtColumn:0 row:row makeIfNecessary:YES];
- return [tableRowView image];
-}
-
-- (NSTextField*)tableRowViewText:(NSInteger)row {
- ChooserContentTableRowView* tableRowView =
- [tableView_ viewAtColumn:0 row:row makeIfNecessary:YES];
- return [tableRowView text];
-}
-
-- (NSTextField*)tableRowViewPairedStatus:(NSInteger)row {
- ChooserContentTableRowView* tableRowView =
- [tableView_ viewAtColumn:0 row:row makeIfNecessary:YES];
- return [tableRowView pairedStatus];
-}
-
-- (void)drawRect:(NSRect)rect {
- [[NSColor colorWithCalibratedWhite:245.0f / 255.0f alpha:1.0f] setFill];
- NSRect footnoteFrame =
- NSMakeRect(0.0f, 0.0f, kChooserWidth, separatorOriginY_);
- NSRectFill(footnoteFrame);
- [super drawRect:footnoteFrame];
-}
-
-@end
« no previous file with comments | « chrome/browser/ui/cocoa/chooser_content_view_cocoa.h ('k') | chrome/browser/ui/cocoa/device_chooser_content_view_cocoa.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698