OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <Cocoa/Cocoa.h> | 5 #import <Cocoa/Cocoa.h> |
6 | 6 |
7 #import "chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h" | 7 #import "chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h" |
8 | 8 |
9 #include "base/mac/bundle_locations.h" | 9 #include "base/mac/bundle_locations.h" |
10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
479 [self addTrackingArea:trackingArea_.get()]; | 479 [self addTrackingArea:trackingArea_.get()]; |
480 | 480 |
481 NSRect bounds = NSMakeRect(0, 0, kLargeImageSide, kLargeImageSide); | 481 NSRect bounds = NSMakeRect(0, 0, kLargeImageSide, kLargeImageSide); |
482 if (editingAllowed) { | 482 if (editingAllowed) { |
483 changePhotoButton_.reset([self changePhotoButtonWithRect:bounds]); | 483 changePhotoButton_.reset([self changePhotoButtonWithRect:bounds]); |
484 [self addSubview:changePhotoButton_]; | 484 [self addSubview:changePhotoButton_]; |
485 | 485 |
486 // Hide the button until the image is hovered over. | 486 // Hide the button until the image is hovered over. |
487 [changePhotoButton_ setHidden:YES]; | 487 [changePhotoButton_ setHidden:YES]; |
488 } | 488 } |
| 489 |
| 490 // Set the image cell's accessibility strings to be the same as the |
| 491 // button's strings. |
| 492 [[self cell] accessibilitySetOverrideValue:l10n_util::GetNSString( |
| 493 editingAllowed ? |
| 494 IDS_PROFILES_NEW_AVATAR_MENU_CHANGE_PHOTO_ACCESSIBLE_NAME : |
| 495 IDS_PROFILES_NEW_AVATAR_MENU_PHOTO_ACCESSIBLE_NAME) |
| 496 forAttribute:NSAccessibilityTitleAttribute]; |
| 497 [[self cell] accessibilitySetOverrideValue: |
| 498 editingAllowed ? NSAccessibilityButtonRole : NSAccessibilityImageRole |
| 499 forAttribute:NSAccessibilityRoleAttribute]; |
| 500 [[self cell] accessibilitySetOverrideValue: |
| 501 NSAccessibilityRoleDescription(NSAccessibilityButtonRole, nil) |
| 502 forAttribute:NSAccessibilityRoleDescriptionAttribute]; |
| 503 |
| 504 // The button and the cell should read the same thing. |
| 505 [self accessibilitySetOverrideValue:l10n_util::GetNSString( |
| 506 editingAllowed ? |
| 507 IDS_PROFILES_NEW_AVATAR_MENU_CHANGE_PHOTO_ACCESSIBLE_NAME : |
| 508 IDS_PROFILES_NEW_AVATAR_MENU_PHOTO_ACCESSIBLE_NAME) |
| 509 forAttribute:NSAccessibilityTitleAttribute]; |
| 510 [self accessibilitySetOverrideValue:NSAccessibilityButtonRole |
| 511 forAttribute:NSAccessibilityRoleAttribute]; |
| 512 [self accessibilitySetOverrideValue: |
| 513 NSAccessibilityRoleDescription(NSAccessibilityButtonRole, nil) |
| 514 forAttribute:NSAccessibilityRoleDescriptionAttribute]; |
489 } | 515 } |
490 return self; | 516 return self; |
491 } | 517 } |
492 | 518 |
493 - (void)drawRect:(NSRect)dirtyRect { | 519 - (void)drawRect:(NSRect)dirtyRect { |
494 NSRect bounds = [self bounds]; | 520 NSRect bounds = [self bounds]; |
495 | 521 |
496 // Display the profile picture as a circle. | 522 // Display the profile picture as a circle. |
497 NSBezierPath* path = [NSBezierPath bezierPathWithOvalInRect:bounds]; | 523 NSBezierPath* path = [NSBezierPath bezierPathWithOvalInRect:bounds]; |
498 [path addClip]; | 524 [path addClip]; |
(...skipping 11 matching lines...) Expand all Loading... |
510 } | 536 } |
511 | 537 |
512 - (void)mouseEntered:(NSEvent*)event { | 538 - (void)mouseEntered:(NSEvent*)event { |
513 [changePhotoButton_ setHidden:NO]; | 539 [changePhotoButton_ setHidden:NO]; |
514 } | 540 } |
515 | 541 |
516 - (void)mouseExited:(NSEvent*)event { | 542 - (void)mouseExited:(NSEvent*)event { |
517 [changePhotoButton_ setHidden:YES]; | 543 [changePhotoButton_ setHidden:YES]; |
518 } | 544 } |
519 | 545 |
| 546 // Make sure the element is focusable for accessibility. |
| 547 - (BOOL)canBecomeKeyView { |
| 548 return YES; |
| 549 } |
| 550 |
| 551 - (BOOL)accessibilityIsIgnored { |
| 552 return NO; |
| 553 } |
| 554 |
| 555 - (NSArray*)accessibilityActionNames { |
| 556 NSArray* parentActions = [super accessibilityActionNames]; |
| 557 return [parentActions arrayByAddingObject:NSAccessibilityPressAction]; |
| 558 } |
| 559 |
| 560 - (void)accessibilityPerformAction:(NSString*)action { |
| 561 if ([action isEqualToString:NSAccessibilityPressAction]) { |
| 562 avatarMenu_->EditProfile(avatarMenu_->GetActiveProfileIndex()); |
| 563 } |
| 564 |
| 565 [super accessibilityPerformAction:action]; |
| 566 } |
| 567 |
520 - (TransparentBackgroundButton*)changePhotoButtonWithRect:(NSRect)rect { | 568 - (TransparentBackgroundButton*)changePhotoButtonWithRect:(NSRect)rect { |
521 TransparentBackgroundButton* button = | 569 TransparentBackgroundButton* button = |
522 [[TransparentBackgroundButton alloc] initWithFrame:rect]; | 570 [[TransparentBackgroundButton alloc] initWithFrame:rect]; |
523 [button setImage:ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed( | 571 [button setImage:ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed( |
524 IDR_ICON_PROFILES_EDIT_CAMERA).AsNSImage()]; | 572 IDR_ICON_PROFILES_EDIT_CAMERA).AsNSImage()]; |
525 [button setImagePosition:NSImageOnly]; | 573 [button setImagePosition:NSImageOnly]; |
526 [button setTarget:self]; | 574 [button setTarget:self]; |
527 [button setAction:@selector(editPhoto:)]; | 575 [button setAction:@selector(editPhoto:)]; |
528 return button; | 576 return button; |
529 } | 577 } |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
602 [[profileNameTextField_ cell] setLineBreakMode: | 650 [[profileNameTextField_ cell] setLineBreakMode: |
603 NSLineBreakByTruncatingTail]; | 651 NSLineBreakByTruncatingTail]; |
604 [self addSubview:profileNameTextField_]; | 652 [self addSubview:profileNameTextField_]; |
605 [profileNameTextField_ setTarget:self]; | 653 [profileNameTextField_ setTarget:self]; |
606 [profileNameTextField_ setAction:@selector(saveProfileName:)]; | 654 [profileNameTextField_ setAction:@selector(saveProfileName:)]; |
607 | 655 |
608 // Hide the textfield until the user clicks on the button. | 656 // Hide the textfield until the user clicks on the button. |
609 [profileNameTextField_ setHidden:YES]; | 657 [profileNameTextField_ setHidden:YES]; |
610 } | 658 } |
611 | 659 |
| 660 [[self cell] accessibilitySetOverrideValue:NSAccessibilityButtonRole |
| 661 forAttribute:NSAccessibilityRoleAttribute]; |
| 662 [[self cell] accessibilitySetOverrideValue: |
| 663 NSAccessibilityRoleDescription(NSAccessibilityButtonRole, nil) |
| 664 forAttribute:NSAccessibilityRoleDescriptionAttribute]; |
| 665 |
612 [self setBordered:NO]; | 666 [self setBordered:NO]; |
613 [self setFont:[NSFont labelFontOfSize:kTitleFontSize]]; | 667 [self setFont:[NSFont labelFontOfSize:kTitleFontSize]]; |
614 [self setAlignment:NSCenterTextAlignment]; | 668 [self setAlignment:NSCenterTextAlignment]; |
615 [[self cell] setLineBreakMode:NSLineBreakByTruncatingTail]; | 669 [[self cell] setLineBreakMode:NSLineBreakByTruncatingTail]; |
616 [self setTitle:profileName]; | 670 [self setTitle:profileName]; |
617 } | 671 } |
618 return self; | 672 return self; |
619 } | 673 } |
620 | 674 |
621 - (void)saveProfileName:(id)sender { | 675 - (void)saveProfileName:(id)sender { |
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
987 // If view mode is PROFILE_CHOOSER but there is an auth error, force | 1041 // If view mode is PROFILE_CHOOSER but there is an auth error, force |
988 // ACCOUNT_MANAGEMENT mode. | 1042 // ACCOUNT_MANAGEMENT mode. |
989 if (viewMode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER && | 1043 if (viewMode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER && |
990 HasAuthError(browser_->profile()) && | 1044 HasAuthError(browser_->profile()) && |
991 switches::IsEnableAccountConsistency() && | 1045 switches::IsEnableAccountConsistency() && |
992 avatarMenu_->GetItemAt(avatarMenu_->GetActiveProfileIndex()). | 1046 avatarMenu_->GetItemAt(avatarMenu_->GetActiveProfileIndex()). |
993 signed_in) { | 1047 signed_in) { |
994 viewMode_ = profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT; | 1048 viewMode_ = profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT; |
995 } | 1049 } |
996 | 1050 |
| 1051 [window accessibilitySetOverrideValue: |
| 1052 l10n_util::GetNSString(IDS_PROFILES_NEW_AVATAR_MENU_ACCESSIBLE_NAME) |
| 1053 forAttribute:NSAccessibilityTitleAttribute]; |
| 1054 [window accessibilitySetOverrideValue: |
| 1055 l10n_util::GetNSString(IDS_PROFILES_NEW_AVATAR_MENU_ACCESSIBLE_NAME) |
| 1056 forAttribute:NSAccessibilityHelpAttribute]; |
| 1057 |
997 [[self bubble] setAlignment:info_bubble::kAlignRightEdgeToAnchorEdge]; | 1058 [[self bubble] setAlignment:info_bubble::kAlignRightEdgeToAnchorEdge]; |
998 [[self bubble] setArrowLocation:info_bubble::kNoArrow]; | 1059 [[self bubble] setArrowLocation:info_bubble::kNoArrow]; |
999 [[self bubble] setBackgroundColor:GetDialogBackgroundColor()]; | 1060 [[self bubble] setBackgroundColor:GetDialogBackgroundColor()]; |
1000 [self initMenuContentsWithView:viewMode_]; | 1061 [self initMenuContentsWithView:viewMode_]; |
1001 } | 1062 } |
1002 | 1063 |
1003 return self; | 1064 return self; |
1004 } | 1065 } |
1005 | 1066 |
1006 - (void)initMenuContentsWithView:(profiles::BubbleViewMode)viewToDisplay { | 1067 - (void)initMenuContentsWithView:(profiles::BubbleViewMode)viewToDisplay { |
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1402 frameOrigin:rect.origin | 1463 frameOrigin:rect.origin |
1403 action:nil]; | 1464 action:nil]; |
1404 if (HasAuthError(browser_->profile())) { | 1465 if (HasAuthError(browser_->profile())) { |
1405 [link setImage:ui::ResourceBundle::GetSharedInstance(). | 1466 [link setImage:ui::ResourceBundle::GetSharedInstance(). |
1406 GetNativeImageNamed(IDR_ICON_PROFILES_ACCOUNT_BUTTON_ERROR). | 1467 GetNativeImageNamed(IDR_ICON_PROFILES_ACCOUNT_BUTTON_ERROR). |
1407 ToNSImage()]; | 1468 ToNSImage()]; |
1408 [link setImagePosition:NSImageRight]; | 1469 [link setImagePosition:NSImageRight]; |
1409 [link setTarget:self]; | 1470 [link setTarget:self]; |
1410 [link setAction:@selector(showAccountReauthenticationView:)]; | 1471 [link setAction:@selector(showAccountReauthenticationView:)]; |
1411 [link setTag:kPrimaryProfileTag]; | 1472 [link setTag:kPrimaryProfileTag]; |
| 1473 [[link cell] |
| 1474 accessibilitySetOverrideValue:l10n_util::GetNSStringF( |
| 1475 IDS_PROFILES_ACCOUNT_BUTTON_AUTH_ERROR_ACCESSIBLE_NAME, |
| 1476 item.sync_state) |
| 1477 forAttribute:NSAccessibilityTitleAttribute]; |
1412 } else { | 1478 } else { |
1413 [link setEnabled:NO]; | 1479 [link setEnabled:NO]; |
1414 } | 1480 } |
1415 } | 1481 } |
1416 // -linkButtonWithTitle sizeToFit's the link, so re-stretch it so that it | 1482 // -linkButtonWithTitle sizeToFit's the link, so re-stretch it so that it |
1417 // can be centered correctly in the view. | 1483 // can be centered correctly in the view. |
1418 [link setAlignment:NSCenterTextAlignment]; | 1484 [link setAlignment:NSCenterTextAlignment]; |
1419 [link setFrame:rect]; | 1485 [link setFrame:rect]; |
1420 [container addSubview:link]; | 1486 [container addSubview:link]; |
1421 [container setFrameSize:rect.size]; | 1487 [container setFrameSize:rect.size]; |
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1972 } | 2038 } |
1973 | 2039 |
1974 - (bool)shouldShowGoIncognito { | 2040 - (bool)shouldShowGoIncognito { |
1975 bool incognitoAvailable = | 2041 bool incognitoAvailable = |
1976 IncognitoModePrefs::GetAvailability(browser_->profile()->GetPrefs()) != | 2042 IncognitoModePrefs::GetAvailability(browser_->profile()->GetPrefs()) != |
1977 IncognitoModePrefs::DISABLED; | 2043 IncognitoModePrefs::DISABLED; |
1978 return incognitoAvailable && !browser_->profile()->IsGuestSession(); | 2044 return incognitoAvailable && !browser_->profile()->IsGuestSession(); |
1979 } | 2045 } |
1980 | 2046 |
1981 @end | 2047 @end |
OLD | NEW |