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 |