| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "chrome/browser/ui/cocoa/chooser_content_view_cocoa.h" | 5 #import "chrome/browser/ui/cocoa/chooser_content_view_cocoa.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/strings/sys_string_conversions.h" | 10 #include "base/strings/sys_string_conversions.h" |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 return pairedStatus_.get(); | 230 return pairedStatus_.get(); |
| 231 } | 231 } |
| 232 | 232 |
| 233 @end | 233 @end |
| 234 | 234 |
| 235 class ChooserContentViewController : public ChooserController::View { | 235 class ChooserContentViewController : public ChooserController::View { |
| 236 public: | 236 public: |
| 237 ChooserContentViewController(ChooserContentViewCocoa* chooser_content_view, | 237 ChooserContentViewController(ChooserContentViewCocoa* chooser_content_view, |
| 238 ChooserController* chooser_controller, | 238 ChooserController* chooser_controller, |
| 239 NSButton* adapter_off_help_button, | 239 NSButton* adapter_off_help_button, |
| 240 NSTextField* adapter_off_message, |
| 240 NSTableView* table_view, | 241 NSTableView* table_view, |
| 241 SpinnerView* spinner, | 242 SpinnerView* spinner, |
| 242 NSTextField* status, | 243 NSTextField* status, |
| 243 NSButton* rescan_button); | 244 NSButton* rescan_button); |
| 244 ~ChooserContentViewController() override; | 245 ~ChooserContentViewController() override; |
| 245 | 246 |
| 246 // ChooserController::View: | 247 // ChooserController::View: |
| 247 void OnOptionsInitialized() override; | 248 void OnOptionsInitialized() override; |
| 248 void OnOptionAdded(size_t index) override; | 249 void OnOptionAdded(size_t index) override; |
| 249 void OnOptionRemoved(size_t index) override; | 250 void OnOptionRemoved(size_t index) override; |
| 250 void OnOptionUpdated(size_t index) override; | 251 void OnOptionUpdated(size_t index) override; |
| 251 void OnAdapterEnabledChanged(bool enabled) override; | 252 void OnAdapterEnabledChanged(bool enabled) override; |
| 252 void OnRefreshStateChanged(bool refreshing) override; | 253 void OnRefreshStateChanged(bool refreshing) override; |
| 253 | 254 |
| 254 void UpdateTableView(); | 255 void UpdateTableView(); |
| 255 | 256 |
| 256 private: | 257 private: |
| 257 ChooserContentViewCocoa* chooser_content_view_; | 258 ChooserContentViewCocoa* chooser_content_view_; |
| 258 ChooserController* chooser_controller_; | 259 ChooserController* chooser_controller_; |
| 259 NSButton* adapter_off_help_button_; | 260 NSButton* adapter_off_help_button_; |
| 261 NSTextField* adapter_off_message_; |
| 260 NSTableView* table_view_; | 262 NSTableView* table_view_; |
| 261 SpinnerView* spinner_; | 263 SpinnerView* spinner_; |
| 262 NSTextField* status_; | 264 NSTextField* status_; |
| 263 NSButton* rescan_button_; | 265 NSButton* rescan_button_; |
| 264 | 266 |
| 265 DISALLOW_COPY_AND_ASSIGN(ChooserContentViewController); | 267 DISALLOW_COPY_AND_ASSIGN(ChooserContentViewController); |
| 266 }; | 268 }; |
| 267 | 269 |
| 268 ChooserContentViewController::ChooserContentViewController( | 270 ChooserContentViewController::ChooserContentViewController( |
| 269 ChooserContentViewCocoa* chooser_content_view, | 271 ChooserContentViewCocoa* chooser_content_view, |
| 270 ChooserController* chooser_controller, | 272 ChooserController* chooser_controller, |
| 271 NSButton* adapter_off_help_button, | 273 NSButton* adapter_off_help_button, |
| 274 NSTextField* adapter_off_message, |
| 272 NSTableView* table_view, | 275 NSTableView* table_view, |
| 273 SpinnerView* spinner, | 276 SpinnerView* spinner, |
| 274 NSTextField* status, | 277 NSTextField* status, |
| 275 NSButton* rescan_button) | 278 NSButton* rescan_button) |
| 276 : chooser_content_view_(chooser_content_view), | 279 : chooser_content_view_(chooser_content_view), |
| 277 chooser_controller_(chooser_controller), | 280 chooser_controller_(chooser_controller), |
| 278 adapter_off_help_button_(adapter_off_help_button), | 281 adapter_off_help_button_(adapter_off_help_button), |
| 282 adapter_off_message_(adapter_off_message), |
| 279 table_view_(table_view), | 283 table_view_(table_view), |
| 280 spinner_(spinner), | 284 spinner_(spinner), |
| 281 status_(status), | 285 status_(status), |
| 282 rescan_button_(rescan_button) { | 286 rescan_button_(rescan_button) { |
| 283 DCHECK(chooser_controller_); | 287 DCHECK(chooser_controller_); |
| 284 DCHECK(adapter_off_help_button_); | 288 DCHECK(adapter_off_help_button_); |
| 289 DCHECK(adapter_off_message_); |
| 285 DCHECK(table_view_); | 290 DCHECK(table_view_); |
| 286 DCHECK(spinner_); | 291 DCHECK(spinner_); |
| 287 DCHECK(status_); | 292 DCHECK(status_); |
| 288 DCHECK(rescan_button_); | 293 DCHECK(rescan_button_); |
| 289 chooser_controller_->set_view(this); | 294 chooser_controller_->set_view(this); |
| 290 } | 295 } |
| 291 | 296 |
| 292 ChooserContentViewController::~ChooserContentViewController() { | 297 ChooserContentViewController::~ChooserContentViewController() { |
| 293 chooser_controller_->set_view(nullptr); | 298 chooser_controller_->set_view(nullptr); |
| 294 } | 299 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 } | 332 } |
| 328 | 333 |
| 329 void ChooserContentViewController::OnAdapterEnabledChanged(bool enabled) { | 334 void ChooserContentViewController::OnAdapterEnabledChanged(bool enabled) { |
| 330 // No row is selected since the adapter status has changed. | 335 // No row is selected since the adapter status has changed. |
| 331 // This will also disable the OK button if it was enabled because | 336 // This will also disable the OK button if it was enabled because |
| 332 // of a previously selected row. | 337 // of a previously selected row. |
| 333 [table_view_ deselectAll:nil]; | 338 [table_view_ deselectAll:nil]; |
| 334 UpdateTableView(); | 339 UpdateTableView(); |
| 335 [table_view_ setHidden:enabled ? NO : YES]; | 340 [table_view_ setHidden:enabled ? NO : YES]; |
| 336 [adapter_off_help_button_ setHidden:enabled ? YES : NO]; | 341 [adapter_off_help_button_ setHidden:enabled ? YES : NO]; |
| 342 [adapter_off_message_ setHidden:enabled ? YES : NO]; |
| 337 | 343 |
| 338 [spinner_ setHidden:YES]; | 344 [spinner_ setHidden:YES]; |
| 339 | 345 |
| 340 [status_ setHidden:YES]; | 346 [status_ setHidden:YES]; |
| 341 // When adapter is enabled, show |rescan_button_|; otherwise hide it. | 347 // When adapter is enabled, show |rescan_button_|; otherwise hide it. |
| 342 [rescan_button_ setHidden:enabled ? NO : YES]; | 348 [rescan_button_ setHidden:enabled ? NO : YES]; |
| 343 | 349 |
| 344 [chooser_content_view_ updateView]; | 350 [chooser_content_view_ updateView]; |
| 345 } | 351 } |
| 346 | 352 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 412 | 418 |
| 413 if ((self = [super initWithFrame:chooserFrame])) { | 419 if ((self = [super initWithFrame:chooserFrame])) { |
| 414 chooserController_ = std::move(chooserController); | 420 chooserController_ = std::move(chooserController); |
| 415 | 421 |
| 416 // Create the views. | 422 // Create the views. |
| 417 // Title. | 423 // Title. |
| 418 titleView_ = [self createChooserTitle:chooserTitle]; | 424 titleView_ = [self createChooserTitle:chooserTitle]; |
| 419 titleHeight_ = NSHeight([titleView_ frame]); | 425 titleHeight_ = NSHeight([titleView_ frame]); |
| 420 | 426 |
| 421 // Adapter turned off help button. | 427 // Adapter turned off help button. |
| 422 adapterOffHelpButton_ = | 428 adapterOffHelpButton_ = [self |
| 423 [self createHyperlinkButtonWithText: | 429 createHyperlinkButtonWithText: |
| 424 l10n_util::GetNSString( | 430 l10n_util::GetNSString( |
| 425 IDS_BLUETOOTH_DEVICE_CHOOSER_TURN_ADAPTER_OFF)]; | 431 IDS_BLUETOOTH_DEVICE_CHOOSER_TURN_ON_BLUETOOTH_LINK_TEXT)]; |
| 432 CGFloat adapterOffHelpButtonWidth = NSWidth([adapterOffHelpButton_ frame]); |
| 426 CGFloat adapterOffHelpButtonHeight = | 433 CGFloat adapterOffHelpButtonHeight = |
| 427 NSHeight([adapterOffHelpButton_ frame]); | 434 NSHeight([adapterOffHelpButton_ frame]); |
| 428 | 435 |
| 436 // Adapter turned off message. |
| 437 adapterOffMessage_ = CreateLabel(l10n_util::GetNSStringF( |
| 438 IDS_BLUETOOTH_DEVICE_CHOOSER_TURN_ADAPTER_OFF, base::string16())); |
| 439 |
| 429 // Status. | 440 // Status. |
| 430 status_ = CreateLabel( | 441 status_ = CreateLabel( |
| 431 l10n_util::GetNSString(IDS_BLUETOOTH_DEVICE_CHOOSER_SCANNING)); | 442 l10n_util::GetNSString(IDS_BLUETOOTH_DEVICE_CHOOSER_SCANNING)); |
| 432 CGFloat statusWidth = kChooserWidth / 2 - kMarginX; | 443 CGFloat statusWidth = kChooserWidth / 2 - kMarginX; |
| 433 // The height is arbitrary as it will be adjusted later. | 444 // The height is arbitrary as it will be adjusted later. |
| 434 [status_ setFrameSize:NSMakeSize(statusWidth, 0.0f)]; | 445 [status_ setFrameSize:NSMakeSize(statusWidth, 0.0f)]; |
| 435 [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:status_]; | 446 [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:status_]; |
| 436 statusHeight_ = NSHeight([status_ frame]); | 447 statusHeight_ = NSHeight([status_ frame]); |
| 437 | 448 |
| 438 // Re-scan button. | 449 // Re-scan button. |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 521 adapterOffHelpButtonHeight - | 532 adapterOffHelpButtonHeight - |
| 522 kAdapterOffHelpLinkPadding; | 533 kAdapterOffHelpLinkPadding; |
| 523 [adapterOffHelpButton_ | 534 [adapterOffHelpButton_ |
| 524 setFrameOrigin:NSMakePoint(adapterOffHelpButtonOriginX, | 535 setFrameOrigin:NSMakePoint(adapterOffHelpButtonOriginX, |
| 525 adapterOffHelpButtonOriginY)]; | 536 adapterOffHelpButtonOriginY)]; |
| 526 [adapterOffHelpButton_ setTarget:self]; | 537 [adapterOffHelpButton_ setTarget:self]; |
| 527 [adapterOffHelpButton_ setAction:@selector(onAdapterOffHelp:)]; | 538 [adapterOffHelpButton_ setAction:@selector(onAdapterOffHelp:)]; |
| 528 [adapterOffHelpButton_ setHidden:YES]; | 539 [adapterOffHelpButton_ setHidden:YES]; |
| 529 [self addSubview:adapterOffHelpButton_]; | 540 [self addSubview:adapterOffHelpButton_]; |
| 530 | 541 |
| 542 // Adapter turned off message. |
| 543 CGFloat adapterOffMessageOriginX = adapterOffHelpButtonOriginX + |
| 544 adapterOffHelpButtonWidth - |
| 545 kHorizontalPadding / 2; |
| 546 CGFloat adapterOffMessageOriginY = adapterOffHelpButtonOriginY; |
| 547 [adapterOffMessage_ setFrameOrigin:NSMakePoint(adapterOffMessageOriginX, |
| 548 adapterOffMessageOriginY)]; |
| 549 [adapterOffMessage_ setHidden:YES]; |
| 550 [self addSubview:adapterOffMessage_]; |
| 551 |
| 531 // ScollView and Spinner. Only one of them is shown. | 552 // ScollView and Spinner. Only one of them is shown. |
| 532 [scrollView_ setDocumentView:tableView_]; | 553 [scrollView_ setDocumentView:tableView_]; |
| 533 [self addSubview:scrollView_]; | 554 [self addSubview:scrollView_]; |
| 534 [spinner_ setHidden:YES]; | 555 [spinner_ setHidden:YES]; |
| 535 [self addSubview:spinner_]; | 556 [self addSubview:spinner_]; |
| 536 | 557 |
| 537 // Status text field and Re-scan button. At most one of them is shown. | 558 // Status text field and Re-scan button. At most one of them is shown. |
| 538 [self addSubview:status_]; | 559 [self addSubview:status_]; |
| 539 [status_ setHidden:YES]; | 560 [status_ setHidden:YES]; |
| 540 | 561 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 591 buttonRowHeight = | 612 buttonRowHeight = |
| 592 std::max(rescanButtonHeight_, | 613 std::max(rescanButtonHeight_, |
| 593 std::max(connectButtonHeight_, cancelButtonHeight_)); | 614 std::max(connectButtonHeight_, cancelButtonHeight_)); |
| 594 rescanButtonShown_ = {[self calculateScrollViewFrame:buttonRowHeight], | 615 rescanButtonShown_ = {[self calculateScrollViewFrame:buttonRowHeight], |
| 595 [self calculateConnectButtonOrigin:buttonRowHeight], | 616 [self calculateConnectButtonOrigin:buttonRowHeight], |
| 596 [self calculateCancelButtonOrigin:buttonRowHeight]}; | 617 [self calculateCancelButtonOrigin:buttonRowHeight]}; |
| 597 rescanButtonOrigin_ = [self calculateRescanButtonOrigin:buttonRowHeight]; | 618 rescanButtonOrigin_ = [self calculateRescanButtonOrigin:buttonRowHeight]; |
| 598 | 619 |
| 599 chooserContentViewController_.reset(new ChooserContentViewController( | 620 chooserContentViewController_.reset(new ChooserContentViewController( |
| 600 self, chooserController_.get(), adapterOffHelpButton_.get(), | 621 self, chooserController_.get(), adapterOffHelpButton_.get(), |
| 601 tableView_.get(), spinner_.get(), status_.get(), rescanButton_.get())); | 622 adapterOffMessage_.get(), tableView_.get(), spinner_.get(), |
| 623 status_.get(), rescanButton_.get())); |
| 602 } | 624 } |
| 603 | 625 |
| 604 return self; | 626 return self; |
| 605 } | 627 } |
| 606 | 628 |
| 607 - (base::scoped_nsobject<NSTextField>)createChooserTitle:(NSString*)title { | 629 - (base::scoped_nsobject<NSTextField>)createChooserTitle:(NSString*)title { |
| 608 base::scoped_nsobject<NSTextField> titleView( | 630 base::scoped_nsobject<NSTextField> titleView( |
| 609 [[NSTextField alloc] initWithFrame:NSZeroRect]); | 631 [[NSTextField alloc] initWithFrame:NSZeroRect]); |
| 610 [titleView setDrawsBackground:NO]; | 632 [titleView setDrawsBackground:NO]; |
| 611 [titleView setBezeled:NO]; | 633 [titleView setBezeled:NO]; |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 906 return [tableRowView text]; | 928 return [tableRowView text]; |
| 907 } | 929 } |
| 908 | 930 |
| 909 - (NSTextField*)tableRowViewPairedStatus:(NSInteger)row { | 931 - (NSTextField*)tableRowViewPairedStatus:(NSInteger)row { |
| 910 ChooserContentTableRowView* tableRowView = | 932 ChooserContentTableRowView* tableRowView = |
| 911 [tableView_ viewAtColumn:0 row:row makeIfNecessary:YES]; | 933 [tableView_ viewAtColumn:0 row:row makeIfNecessary:YES]; |
| 912 return [tableRowView pairedStatus]; | 934 return [tableRowView pairedStatus]; |
| 913 } | 935 } |
| 914 | 936 |
| 915 @end | 937 @end |
| OLD | NEW |