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

Side by Side Diff: chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm

Issue 465313003: Update the new avatar menu (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased again Created 6 years, 4 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/ui/views/profiles/profile_chooser_view.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 const CGFloat kHorizontalSpacing = 16.0; 80 const CGFloat kHorizontalSpacing = 16.0;
81 const CGFloat kTitleFontSize = 15.0; 81 const CGFloat kTitleFontSize = 15.0;
82 const CGFloat kTextFontSize = 12.0; 82 const CGFloat kTextFontSize = 12.0;
83 const CGFloat kProfileButtonHeight = 30; 83 const CGFloat kProfileButtonHeight = 30;
84 const int kBezelThickness = 3; // Width of the bezel on an NSButton. 84 const int kBezelThickness = 3; // Width of the bezel on an NSButton.
85 const int kImageTitleSpacing = 10; 85 const int kImageTitleSpacing = 10;
86 const int kBlueButtonHeight = 30; 86 const int kBlueButtonHeight = 30;
87 87
88 // Fixed size for embedded sign in pages as defined in Gaia. 88 // Fixed size for embedded sign in pages as defined in Gaia.
89 const CGFloat kFixedGaiaViewWidth = 360; 89 const CGFloat kFixedGaiaViewWidth = 360;
90 const CGFloat kFixedGaiaViewHeight = 400; 90 const CGFloat kFixedGaiaViewHeight = 440;
91 91
92 // Fixed size for the account removal view. 92 // Fixed size for the account removal view.
93 const CGFloat kFixedAccountRemovalViewWidth = 280; 93 const CGFloat kFixedAccountRemovalViewWidth = 280;
94 94
95 // Fixed size for the switch user view. 95 // Fixed size for the switch user view.
96 const int kFixedSwitchUserViewWidth = 280; 96 const int kFixedSwitchUserViewWidth = 280;
97 97
98 // The tag number for the primary account. 98 // The tag number for the primary account.
99 const int kPrimaryProfileTag = -1; 99 const int kPrimaryProfileTag = -1;
100 100
(...skipping 10 matching lines...) Expand all
111 frame.size = size; 111 frame.size = size;
112 [window setFrame:frame display:YES]; 112 [window setFrame:frame display:YES];
113 } 113 }
114 114
115 NSString* ElideEmail(const std::string& email, CGFloat width) { 115 NSString* ElideEmail(const std::string& email, CGFloat width) {
116 const base::string16 elidedEmail = gfx::ElideText( 116 const base::string16 elidedEmail = gfx::ElideText(
117 base::UTF8ToUTF16(email), gfx::FontList(), width, gfx::ELIDE_EMAIL); 117 base::UTF8ToUTF16(email), gfx::FontList(), width, gfx::ELIDE_EMAIL);
118 return base::SysUTF16ToNSString(elidedEmail); 118 return base::SysUTF16ToNSString(elidedEmail);
119 } 119 }
120 120
121 NSString* ElideMessage(const base::string16& message, CGFloat width) {
122 return base::SysUTF16ToNSString(
123 gfx::ElideText(message, gfx::FontList(), width, gfx::ELIDE_TAIL));
124 }
125
121 // Builds a label with the given |title| anchored at |frame_origin|. Sets the 126 // Builds a label with the given |title| anchored at |frame_origin|. Sets the
122 // text color to |text_color| if not null. 127 // text color to |text_color| if not null.
123 NSTextField* BuildLabel(NSString* title, 128 NSTextField* BuildLabel(NSString* title,
124 NSPoint frame_origin, 129 NSPoint frame_origin,
125 NSColor* text_color) { 130 NSColor* text_color) {
126 base::scoped_nsobject<NSTextField> label( 131 base::scoped_nsobject<NSTextField> label(
127 [[NSTextField alloc] initWithFrame:NSZeroRect]); 132 [[NSTextField alloc] initWithFrame:NSZeroRect]);
128 [label setStringValue:title]; 133 [label setStringValue:title];
129 [label setEditable:NO]; 134 [label setEditable:NO];
130 [label setAlignment:NSLeftTextAlignment]; 135 [label setAlignment:NSLeftTextAlignment];
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 // Returns the native dialog background color. 188 // Returns the native dialog background color.
184 NSColor* GetDialogBackgroundColor() { 189 NSColor* GetDialogBackgroundColor() {
185 return gfx::SkColorToCalibratedNSColor( 190 return gfx::SkColorToCalibratedNSColor(
186 ui::NativeTheme::instance()->GetSystemColor( 191 ui::NativeTheme::instance()->GetSystemColor(
187 ui::NativeTheme::kColorId_DialogBackground)); 192 ui::NativeTheme::kColorId_DialogBackground));
188 } 193 }
189 194
190 // Builds a title card with one back button right aligned and one label center 195 // Builds a title card with one back button right aligned and one label center
191 // aligned. 196 // aligned.
192 NSView* BuildTitleCard(NSRect frame_rect, 197 NSView* BuildTitleCard(NSRect frame_rect,
193 NSString* message, 198 const base::string16& message,
194 id back_button_target, 199 id back_button_target,
195 SEL back_button_action) { 200 SEL back_button_action) {
196 base::scoped_nsobject<NSView> container( 201 base::scoped_nsobject<NSView> container(
197 [[NSView alloc] initWithFrame:frame_rect]); 202 [[NSView alloc] initWithFrame:frame_rect]);
198 203
199 base::scoped_nsobject<HoverImageButton> button( 204 base::scoped_nsobject<HoverImageButton> button(
200 [[HoverImageButton alloc] initWithFrame:frame_rect]); 205 [[HoverImageButton alloc] initWithFrame:frame_rect]);
201 [button setBordered:NO]; 206 [button setBordered:NO];
202 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); 207 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
203 [button setDefaultImage:rb->GetNativeImageNamed(IDR_BACK).ToNSImage()]; 208 [button setDefaultImage:rb->GetNativeImageNamed(IDR_BACK).ToNSImage()];
204 [button setHoverImage:rb->GetNativeImageNamed(IDR_BACK_H).ToNSImage()]; 209 [button setHoverImage:rb->GetNativeImageNamed(IDR_BACK_H).ToNSImage()];
205 [button setPressedImage:rb->GetNativeImageNamed(IDR_BACK_P).ToNSImage()]; 210 [button setPressedImage:rb->GetNativeImageNamed(IDR_BACK_P).ToNSImage()];
206 [button setTarget:back_button_target]; 211 [button setTarget:back_button_target];
207 [button setAction:back_button_action]; 212 [button setAction:back_button_action];
208 [button setFrameSize:NSMakeSize(kProfileButtonHeight, kProfileButtonHeight)]; 213 [button setFrameSize:NSMakeSize(kProfileButtonHeight, kProfileButtonHeight)];
209 [button setFrameOrigin:NSMakePoint(kHorizontalSpacing, 0)]; 214 [button setFrameOrigin:NSMakePoint(kHorizontalSpacing, 0)];
210 215
211 NSTextField* title_label = BuildLabel(message, NSZeroPoint, nil); 216 CGFloat max_label_width = frame_rect.size.width -
217 (kHorizontalSpacing * 2 + kProfileButtonHeight) * 2;
218 NSTextField* title_label = BuildLabel(
219 ElideMessage(message, max_label_width),
220 NSZeroPoint, nil);
212 [title_label setAlignment:NSCenterTextAlignment]; 221 [title_label setAlignment:NSCenterTextAlignment];
213 [title_label setFont:[NSFont labelFontOfSize:kTitleFontSize]]; 222 [title_label setFont:[NSFont labelFontOfSize:kTitleFontSize]];
214 [title_label sizeToFit]; 223 [title_label sizeToFit];
215 CGFloat x_offset = (frame_rect.size.width - NSWidth([title_label frame])) / 2; 224 CGFloat x_offset = (frame_rect.size.width - NSWidth([title_label frame])) / 2;
216 CGFloat y_offset = 225 CGFloat y_offset =
217 (NSHeight([button frame]) - NSHeight([title_label frame])) / 2; 226 (NSHeight([button frame]) - NSHeight([title_label frame])) / 2;
218 [title_label setFrameOrigin:NSMakePoint(x_offset, y_offset)]; 227 [title_label setFrameOrigin:NSMakePoint(x_offset, y_offset)];
219 228
220 [container addSubview:button]; 229 [container addSubview:button];
221 [container addSubview:title_label]; 230 [container addSubview:title_label];
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 NSRectFill(dirtyRect); 767 NSRectFill(dirtyRect);
759 [super drawRect:dirtyRect]; 768 [super drawRect:dirtyRect];
760 } 769 }
761 @end 770 @end
762 771
763 @interface ProfileChooserController () 772 @interface ProfileChooserController ()
764 // Builds the profile chooser view. 773 // Builds the profile chooser view.
765 - (NSView*)buildProfileChooserView; 774 - (NSView*)buildProfileChooserView;
766 775
767 // Builds a tutorial card with a title label using |titleMessage|, a content 776 // Builds a tutorial card with a title label using |titleMessage|, a content
768 // label using |contentMessage|, and a bottom row with a right-aligned link 777 // label using |contentMessage|, a link using |linkMessage|, and a button using
769 // using |linkMessage|, and a left aligned button using |buttonMessage|. 778 // |buttonMessage|. If |stackButton| is YES, places the button above the link.
770 // On click, the link would execute |linkAction|, and the button would execute 779 // Otherwise places both on the same row with the link left aligned and button
771 // |buttonAction|. It sets |tutorialMode_| to the given |mode|. 780 // right aligned. On click, the link would execute |linkAction|, and the button
781 // would execute |buttonAction|. It sets |tutorialMode_| to the given |mode|.
772 - (NSView*)tutorialViewWithMode:(profiles::TutorialMode)mode 782 - (NSView*)tutorialViewWithMode:(profiles::TutorialMode)mode
773 titleMessage:(NSString*)titleMessage 783 titleMessage:(NSString*)titleMessage
774 contentMessage:(NSString*)contentMessage 784 contentMessage:(NSString*)contentMessage
775 linkMessage:(NSString*)linkMessage 785 linkMessage:(NSString*)linkMessage
776 buttonMessage:(NSString*)buttonMessage 786 buttonMessage:(NSString*)buttonMessage
787 stackButton:(BOOL)stackButton
788 hasCloseButton:(BOOL)hasCloseButton
777 linkAction:(SEL)linkAction 789 linkAction:(SEL)linkAction
778 buttonAction:(SEL)buttonAction; 790 buttonAction:(SEL)buttonAction;
779 791
780 // Builds a tutorial card to introduce an upgrade user to the new avatar menu if 792 // Builds a tutorial card to introduce an upgrade user to the new avatar menu if
781 // needed. |tutorial_shown| indicates if the tutorial has already been shown in 793 // needed. |tutorial_shown| indicates if the tutorial has already been shown in
782 // the previous active view. |avatar_item| refers to the current profile. 794 // the previous active view. |avatar_item| refers to the current profile.
783 - (NSView*)buildWelcomeUpgradeTutorialViewIfNeeded; 795 - (NSView*)buildWelcomeUpgradeTutorialViewIfNeeded;
784 796
785 // Builds a tutorial card to have the user confirm the last Chrome signin, 797 // Builds a tutorial card to have the user confirm the last Chrome signin,
786 // Chrome sync will be delayed until the user either dismisses the tutorial, or 798 // Chrome sync will be delayed until the user either dismisses the tutorial, or
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
983 ProfileMetrics::LogProfileNewAvatarMenuNotYou( 995 ProfileMetrics::LogProfileNewAvatarMenuNotYou(
984 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_DISCONNECT); 996 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_DISCONNECT);
985 } 997 }
986 998
987 - (IBAction)navigateBackFromSwitchUserView:(id)sender { 999 - (IBAction)navigateBackFromSwitchUserView:(id)sender {
988 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER]; 1000 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER];
989 ProfileMetrics::LogProfileNewAvatarMenuNotYou( 1001 ProfileMetrics::LogProfileNewAvatarMenuNotYou(
990 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_BACK); 1002 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_BACK);
991 } 1003 }
992 1004
1005 - (IBAction)dismissTutorial:(id)sender {
1006 // Never shows the upgrade tutorial again if manually closed.
1007 if (tutorialMode_ == profiles::TUTORIAL_MODE_WELCOME_UPGRADE) {
1008 browser_->profile()->GetPrefs()->SetInteger(
1009 prefs::kProfileAvatarTutorialShown,
1010 signin_ui_util::kUpgradeWelcomeTutorialShowMax + 1);
1011 }
1012
1013 tutorialMode_ = profiles::TUTORIAL_MODE_NONE;
1014 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER];
1015 }
1016
993 - (void)windowWillClose:(NSNotification*)notification { 1017 - (void)windowWillClose:(NSNotification*)notification {
994 if (tutorialMode_ == profiles::TUTORIAL_MODE_CONFIRM_SIGNIN) { 1018 if (tutorialMode_ == profiles::TUTORIAL_MODE_CONFIRM_SIGNIN) {
995 LoginUIServiceFactory::GetForProfile(browser_->profile())-> 1019 LoginUIServiceFactory::GetForProfile(browser_->profile())->
996 SyncConfirmationUIClosed(false); 1020 SyncConfirmationUIClosed(false);
997 } 1021 }
998 1022
999 [super windowWillClose:notification]; 1023 [super windowWillClose:notification];
1000 } 1024 }
1001 1025
1002 - (void)cleanUpEmbeddedViewContents { 1026 - (void)cleanUpEmbeddedViewContents {
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1081 break; 1105 break;
1082 case profiles::BUBBLE_VIEW_MODE_SWITCH_USER: 1106 case profiles::BUBBLE_VIEW_MODE_SWITCH_USER:
1083 subView = [self buildSwitchUserView]; 1107 subView = [self buildSwitchUserView];
1084 break; 1108 break;
1085 case profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER: 1109 case profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER:
1086 case profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT: 1110 case profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT:
1087 subView = [self buildProfileChooserView]; 1111 subView = [self buildProfileChooserView];
1088 break; 1112 break;
1089 } 1113 }
1090 1114
1115 // Clears tutorial mode for all non-profile-chooser views.
1116 if (viewMode_ != profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER)
1117 tutorialMode_ = profiles::TUTORIAL_MODE_NONE;
1118
1091 [contentView addSubview:subView]; 1119 [contentView addSubview:subView];
1092 SetWindowSize([self window], 1120 SetWindowSize([self window],
1093 NSMakeSize(NSWidth([subView frame]), NSHeight([subView frame]))); 1121 NSMakeSize(NSWidth([subView frame]), NSHeight([subView frame])));
1094 } 1122 }
1095 1123
1096 - (NSView*)buildProfileChooserView { 1124 - (NSView*)buildProfileChooserView {
1097 base::scoped_nsobject<NSView> container( 1125 base::scoped_nsobject<NSView> container(
1098 [[NSView alloc] initWithFrame:NSZeroRect]); 1126 [[NSView alloc] initWithFrame:NSZeroRect]);
1099 1127
1100 NSView* tutorialView = nil; 1128 NSView* tutorialView = nil;
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1223 IDS_PROFILES_CONFIRM_SIGNIN_TUTORIAL_CONTENT_TEXT); 1251 IDS_PROFILES_CONFIRM_SIGNIN_TUTORIAL_CONTENT_TEXT);
1224 NSString* linkMessage = l10n_util::GetNSString( 1252 NSString* linkMessage = l10n_util::GetNSString(
1225 IDS_PROFILES_SYNC_SETTINGS_LINK); 1253 IDS_PROFILES_SYNC_SETTINGS_LINK);
1226 NSString* buttonMessage = l10n_util::GetNSString( 1254 NSString* buttonMessage = l10n_util::GetNSString(
1227 IDS_PROFILES_TUTORIAL_OK_BUTTON); 1255 IDS_PROFILES_TUTORIAL_OK_BUTTON);
1228 return [self tutorialViewWithMode:profiles::TUTORIAL_MODE_CONFIRM_SIGNIN 1256 return [self tutorialViewWithMode:profiles::TUTORIAL_MODE_CONFIRM_SIGNIN
1229 titleMessage:titleMessage 1257 titleMessage:titleMessage
1230 contentMessage:contentMessage 1258 contentMessage:contentMessage
1231 linkMessage:linkMessage 1259 linkMessage:linkMessage
1232 buttonMessage:buttonMessage 1260 buttonMessage:buttonMessage
1261 stackButton:NO
1262 hasCloseButton:NO
1233 linkAction:@selector(configureSyncSettings:) 1263 linkAction:@selector(configureSyncSettings:)
1234 buttonAction:@selector(syncSettingsConfirmed:)]; 1264 buttonAction:@selector(syncSettingsConfirmed:)];
1235 } 1265 }
1236 1266
1237 - (NSView*)buildWelcomeUpgradeTutorialViewIfNeeded { 1267 - (NSView*)buildWelcomeUpgradeTutorialViewIfNeeded {
1238 Profile* profile = browser_->profile(); 1268 Profile* profile = browser_->profile();
1239 const AvatarMenu::Item& avatarItem = 1269 const AvatarMenu::Item& avatarItem =
1240 avatarMenu_->GetItemAt(avatarMenu_->GetActiveProfileIndex()); 1270 avatarMenu_->GetItemAt(avatarMenu_->GetActiveProfileIndex());
1241 1271
1242 const int showCount = profile->GetPrefs()->GetInteger( 1272 const int showCount = profile->GetPrefs()->GetInteger(
(...skipping 11 matching lines...) Expand all
1254 1284
1255 ProfileMetrics::LogProfileNewAvatarMenuUpgrade( 1285 ProfileMetrics::LogProfileNewAvatarMenuUpgrade(
1256 ProfileMetrics::PROFILE_AVATAR_MENU_UPGRADE_VIEW); 1286 ProfileMetrics::PROFILE_AVATAR_MENU_UPGRADE_VIEW);
1257 1287
1258 NSString* titleMessage = l10n_util::GetNSString( 1288 NSString* titleMessage = l10n_util::GetNSString(
1259 IDS_PROFILES_WELCOME_UPGRADE_TUTORIAL_TITLE); 1289 IDS_PROFILES_WELCOME_UPGRADE_TUTORIAL_TITLE);
1260 NSString* contentMessage = l10n_util::GetNSString( 1290 NSString* contentMessage = l10n_util::GetNSString(
1261 IDS_PROFILES_WELCOME_UPGRADE_TUTORIAL_CONTENT_TEXT); 1291 IDS_PROFILES_WELCOME_UPGRADE_TUTORIAL_CONTENT_TEXT);
1262 // For local profiles, the "Not you" link doesn't make sense. 1292 // For local profiles, the "Not you" link doesn't make sense.
1263 NSString* linkMessage = avatarItem.signed_in ? 1293 NSString* linkMessage = avatarItem.signed_in ?
1264 l10n_util::GetNSStringF(IDS_PROFILES_NOT_YOU, avatarItem.name) : nil; 1294 ElideMessage(
1295 l10n_util::GetStringFUTF16(IDS_PROFILES_NOT_YOU, avatarItem.name),
1296 kFixedMenuWidth - 2 * kHorizontalSpacing) :
1297 nil;
1265 NSString* buttonMessage = l10n_util::GetNSString( 1298 NSString* buttonMessage = l10n_util::GetNSString(
1266 IDS_PROFILES_TUTORIAL_WHATS_NEW_BUTTON); 1299 IDS_PROFILES_TUTORIAL_WHATS_NEW_BUTTON);
1267 return [self tutorialViewWithMode:profiles::TUTORIAL_MODE_WELCOME_UPGRADE 1300 return [self tutorialViewWithMode:profiles::TUTORIAL_MODE_WELCOME_UPGRADE
1268 titleMessage:titleMessage 1301 titleMessage:titleMessage
1269 contentMessage:contentMessage 1302 contentMessage:contentMessage
1270 linkMessage:linkMessage 1303 linkMessage:linkMessage
1271 buttonMessage:buttonMessage 1304 buttonMessage:buttonMessage
1305 stackButton:YES
1306 hasCloseButton:YES
1272 linkAction:@selector(showSwitchUserView:) 1307 linkAction:@selector(showSwitchUserView:)
1273 buttonAction:@selector(seeWhatsNew:)]; 1308 buttonAction:@selector(seeWhatsNew:)];
1274 } 1309 }
1275 1310
1276 - (NSView*)tutorialViewWithMode:(profiles::TutorialMode)mode 1311 - (NSView*)tutorialViewWithMode:(profiles::TutorialMode)mode
1277 titleMessage:(NSString*)titleMessage 1312 titleMessage:(NSString*)titleMessage
1278 contentMessage:(NSString*)contentMessage 1313 contentMessage:(NSString*)contentMessage
1279 linkMessage:(NSString*)linkMessage 1314 linkMessage:(NSString*)linkMessage
1280 buttonMessage:(NSString*)buttonMessage 1315 buttonMessage:(NSString*)buttonMessage
1316 stackButton:(BOOL)stackButton
1317 hasCloseButton:(BOOL)hasCloseButton
1281 linkAction:(SEL)linkAction 1318 linkAction:(SEL)linkAction
1282 buttonAction:(SEL)buttonAction { 1319 buttonAction:(SEL)buttonAction {
1283 tutorialMode_ = mode; 1320 tutorialMode_ = mode;
1284 1321
1285 NSColor* tutorialBackgroundColor = 1322 NSColor* tutorialBackgroundColor =
1286 gfx::SkColorToSRGBNSColor(profiles::kAvatarTutorialBackgroundColor); 1323 gfx::SkColorToSRGBNSColor(profiles::kAvatarTutorialBackgroundColor);
1287 base::scoped_nsobject<NSView> container([[BackgroundColorView alloc] 1324 base::scoped_nsobject<NSView> container([[BackgroundColorView alloc]
1288 initWithFrame:NSMakeRect(0, 0, kFixedMenuWidth, 0) 1325 initWithFrame:NSMakeRect(0, 0, kFixedMenuWidth, 0)
1289 withColor:tutorialBackgroundColor]); 1326 withColor:tutorialBackgroundColor]);
1290 CGFloat availableWidth = kFixedMenuWidth - 2 * kHorizontalSpacing; 1327 CGFloat availableWidth = kFixedMenuWidth - 2 * kHorizontalSpacing;
1291 CGFloat yOffset = kSmallVerticalSpacing; 1328 CGFloat yOffset = kVerticalSpacing;
1292 1329
1293 // Adds links and buttons at the bottom. 1330 // Adds links and buttons at the bottom.
1294 base::scoped_nsobject<NSButton> tutorialOkButton([[HoverButton alloc] 1331 base::scoped_nsobject<NSButton> tutorialOkButton([[HoverButton alloc]
1295 initWithFrame:NSZeroRect]); 1332 initWithFrame:NSZeroRect]);
1296 [tutorialOkButton setTitle:buttonMessage]; 1333 [tutorialOkButton setTitle:buttonMessage];
1297 [tutorialOkButton setBezelStyle:NSRoundedBezelStyle]; 1334 [tutorialOkButton setBezelStyle:NSRoundedBezelStyle];
1298 [tutorialOkButton setTarget:self]; 1335 [tutorialOkButton setTarget:self];
1299 [tutorialOkButton setAction:buttonAction]; 1336 [tutorialOkButton setAction:buttonAction];
1337 [tutorialOkButton setAlignment:NSCenterTextAlignment];
1300 [tutorialOkButton sizeToFit]; 1338 [tutorialOkButton sizeToFit];
1301 NSSize buttonSize = [tutorialOkButton frame].size;
1302 const CGFloat kTopBottomTextPadding = 6;
1303 const CGFloat kLeftRightTextPadding = 15;
1304 buttonSize.width += 2 * kLeftRightTextPadding;
1305 buttonSize.height += 2 * kTopBottomTextPadding;
1306 [tutorialOkButton setFrameSize:buttonSize];
1307 [tutorialOkButton setAlignment:NSCenterTextAlignment];
1308 1339
1309 [tutorialOkButton setFrameOrigin:NSMakePoint( 1340 NSButton* learnMoreLink = nil;
1310 kFixedMenuWidth - NSWidth([tutorialOkButton frame]) - kHorizontalSpacing, 1341 if (linkMessage) {
1311 yOffset)]; 1342 learnMoreLink = [self linkButtonWithTitle:linkMessage
1343 frameOrigin:NSZeroPoint
1344 action:linkAction];
1345 [[learnMoreLink cell] setTextColor:[NSColor whiteColor]];
1346 }
1347
1348 if (stackButton) {
1349 if (learnMoreLink) {
1350 [learnMoreLink setFrameOrigin:NSMakePoint(
1351 (kFixedMenuWidth - NSWidth([learnMoreLink frame])) / 2, yOffset)];
1352 }
1353 [tutorialOkButton setFrameSize:NSMakeSize(
1354 availableWidth, NSHeight([tutorialOkButton frame]))];
1355 [tutorialOkButton setFrameOrigin:NSMakePoint(
1356 kHorizontalSpacing,
1357 yOffset + (learnMoreLink ? NSHeight([learnMoreLink frame]) : 0))];
1358 } else {
1359 NSSize buttonSize = [tutorialOkButton frame].size;
1360 const CGFloat kTopBottomTextPadding = 6;
1361 const CGFloat kLeftRightTextPadding = 15;
1362 buttonSize.width += 2 * kLeftRightTextPadding;
1363 buttonSize.height += 2 * kTopBottomTextPadding;
1364 [tutorialOkButton setFrameSize:buttonSize];
1365 CGFloat buttonXOffset = kFixedMenuWidth -
1366 NSWidth([tutorialOkButton frame]) - kHorizontalSpacing;
1367 [tutorialOkButton setFrameOrigin:NSMakePoint(buttonXOffset, yOffset)];
1368
1369 if (learnMoreLink) {
1370 CGFloat linkYOffset = yOffset + (NSHeight([tutorialOkButton frame]) -
1371 NSHeight([learnMoreLink frame])) / 2;
1372 [learnMoreLink setFrameOrigin:NSMakePoint(
1373 kHorizontalSpacing, linkYOffset)];
1374 }
1375 }
1376
1312 [container addSubview:tutorialOkButton]; 1377 [container addSubview:tutorialOkButton];
1313 1378 if (learnMoreLink) {
1314 if (linkMessage) {
1315 NSButton* learnMoreLink =
1316 [self linkButtonWithTitle:linkMessage
1317 frameOrigin:NSZeroPoint
1318 action:linkAction];
1319 [[learnMoreLink cell] setTextColor:[NSColor whiteColor]];
1320 CGFloat linkYOffset = yOffset + (NSHeight([tutorialOkButton frame]) -
1321 NSHeight([learnMoreLink frame])) / 2;
1322 [learnMoreLink setFrameOrigin:NSMakePoint(kHorizontalSpacing, linkYOffset)];
1323 [container addSubview:learnMoreLink]; 1379 [container addSubview:learnMoreLink];
1324 yOffset = std::max(NSMaxY([learnMoreLink frame]), 1380 yOffset = std::max(NSMaxY([learnMoreLink frame]),
1325 NSMaxY([tutorialOkButton frame])) + kVerticalSpacing; 1381 NSMaxY([tutorialOkButton frame])) + kVerticalSpacing;
1326 } else { 1382 } else {
1327 yOffset = NSMaxY([tutorialOkButton frame]) + kVerticalSpacing; 1383 yOffset = NSMaxY([tutorialOkButton frame]) + kVerticalSpacing;
1328 } 1384 }
1385
1329 // Adds body content. 1386 // Adds body content.
1330 NSTextField* contentLabel = BuildLabel( 1387 NSTextField* contentLabel = BuildLabel(
1331 contentMessage, 1388 contentMessage,
1332 NSMakePoint(kHorizontalSpacing, yOffset), 1389 NSMakePoint(kHorizontalSpacing, yOffset),
1333 gfx::SkColorToSRGBNSColor(profiles::kAvatarTutorialContentTextColor)); 1390 gfx::SkColorToSRGBNSColor(profiles::kAvatarTutorialContentTextColor));
1334 [contentLabel setFrameSize:NSMakeSize(availableWidth, 0)]; 1391 [contentLabel setFrameSize:NSMakeSize(availableWidth, 0)];
1335 [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:contentLabel]; 1392 [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:contentLabel];
1336 [container addSubview:contentLabel]; 1393 [container addSubview:contentLabel];
1337 yOffset = NSMaxY([contentLabel frame]) + kSmallVerticalSpacing; 1394 yOffset = NSMaxY([contentLabel frame]) + kSmallVerticalSpacing;
1338 1395
1339 // Adds title. 1396 // Adds title.
1340 NSTextField* titleLabel = 1397 NSTextField* titleLabel =
1341 BuildLabel(titleMessage, 1398 BuildLabel(titleMessage,
1342 NSMakePoint(kHorizontalSpacing, yOffset), 1399 NSMakePoint(kHorizontalSpacing, yOffset),
1343 [NSColor whiteColor] /* text_color */); 1400 [NSColor whiteColor] /* text_color */);
1344 [titleLabel setFont:[NSFont labelFontOfSize:kTitleFontSize]]; 1401 [titleLabel setFont:[NSFont labelFontOfSize:kTitleFontSize]];
1345 [titleLabel setFrameSize:NSMakeSize(availableWidth, 0)]; 1402
1403 if (hasCloseButton) {
1404 base::scoped_nsobject<HoverImageButton> closeButton(
1405 [[HoverImageButton alloc] initWithFrame:NSZeroRect]);
1406 [closeButton setBordered:NO];
1407
1408 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
1409 NSImage* closeImage = rb->GetNativeImageNamed(IDR_CLOSE_1).ToNSImage();
1410 CGFloat closeImageWidth = [closeImage size].width;
1411 [closeButton setDefaultImage:closeImage];
1412 [closeButton setHoverImage:
1413 rb->GetNativeImageNamed(IDR_CLOSE_1_H).ToNSImage()];
1414 [closeButton setPressedImage:
1415 rb->GetNativeImageNamed(IDR_CLOSE_1_P).ToNSImage()];
1416 [closeButton setTarget:self];
1417 [closeButton setAction:@selector(dismissTutorial:)];
1418 [closeButton setFrameSize:[closeImage size]];
1419 [closeButton setFrameOrigin:NSMakePoint(
1420 kFixedMenuWidth - kHorizontalSpacing - closeImageWidth, yOffset)];
1421 [container addSubview:closeButton];
1422
1423 [titleLabel setFrameSize:NSMakeSize(
1424 availableWidth - closeImageWidth - kHorizontalSpacing, 0)];
1425 } else {
1426 [titleLabel setFrameSize:NSMakeSize(availableWidth, 0)];
1427 }
1428
1346 [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:titleLabel]; 1429 [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:titleLabel];
1347 [container addSubview:titleLabel]; 1430 [container addSubview:titleLabel];
1348 yOffset = NSMaxY([titleLabel frame]) + kVerticalSpacing; 1431 yOffset = NSMaxY([titleLabel frame]) + kVerticalSpacing;
1349 1432
1350 [container setFrameSize:NSMakeSize(kFixedMenuWidth, yOffset)]; 1433 [container setFrameSize:NSMakeSize(kFixedMenuWidth, yOffset)];
1351 [container setFrameOrigin:NSZeroPoint]; 1434 [container setFrameOrigin:NSZeroPoint];
1352 return container.autorelease(); 1435 return container.autorelease();
1353 } 1436 }
1354 1437
1355 - (NSView*)createCurrentProfileView:(const AvatarMenu::Item&)item { 1438 - (NSView*)createCurrentProfileView:(const AvatarMenu::Item&)item {
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
1750 yOffset = NSMaxY([webview frame]); 1833 yOffset = NSMaxY([webview frame]);
1751 1834
1752 // Adds the title card. 1835 // Adds the title card.
1753 NSBox* separator = [self horizontalSeparatorWithFrame: 1836 NSBox* separator = [self horizontalSeparatorWithFrame:
1754 NSMakeRect(0, yOffset, kFixedGaiaViewWidth, 0)]; 1837 NSMakeRect(0, yOffset, kFixedGaiaViewWidth, 0)];
1755 [container addSubview:separator]; 1838 [container addSubview:separator];
1756 yOffset = NSMaxY([separator frame]) + kSmallVerticalSpacing; 1839 yOffset = NSMaxY([separator frame]) + kSmallVerticalSpacing;
1757 1840
1758 NSView* titleView = BuildTitleCard( 1841 NSView* titleView = BuildTitleCard(
1759 NSMakeRect(0, yOffset, kFixedGaiaViewWidth, 0), 1842 NSMakeRect(0, yOffset, kFixedGaiaViewWidth, 0),
1760 l10n_util::GetNSString(messageId), 1843 l10n_util::GetStringUTF16(messageId),
1761 self /* backButtonTarget*/, 1844 self /* backButtonTarget*/,
1762 @selector(navigateBackFromSigninPage:) /* backButtonAction */); 1845 @selector(navigateBackFromSigninPage:) /* backButtonAction */);
1763 [container addSubview:titleView]; 1846 [container addSubview:titleView];
1764 yOffset = NSMaxY([titleView frame]); 1847 yOffset = NSMaxY([titleView frame]);
1765 1848
1766 [container setFrameSize:NSMakeSize(kFixedGaiaViewWidth, yOffset)]; 1849 [container setFrameSize:NSMakeSize(kFixedGaiaViewWidth, yOffset)];
1767 return container.autorelease(); 1850 return container.autorelease();
1768 } 1851 }
1769 1852
1770 - (NSView*)buildAccountRemovalView { 1853 - (NSView*)buildAccountRemovalView {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1820 yOffset = NSMaxY([contentView frame]) + kVerticalSpacing; 1903 yOffset = NSMaxY([contentView frame]) + kVerticalSpacing;
1821 1904
1822 // Adds the title card. 1905 // Adds the title card.
1823 NSBox* separator = [self horizontalSeparatorWithFrame: 1906 NSBox* separator = [self horizontalSeparatorWithFrame:
1824 NSMakeRect(0, yOffset, kFixedAccountRemovalViewWidth, 0)]; 1907 NSMakeRect(0, yOffset, kFixedAccountRemovalViewWidth, 0)];
1825 [container addSubview:separator]; 1908 [container addSubview:separator];
1826 yOffset = NSMaxY([separator frame]) + kSmallVerticalSpacing; 1909 yOffset = NSMaxY([separator frame]) + kSmallVerticalSpacing;
1827 1910
1828 NSView* titleView = BuildTitleCard( 1911 NSView* titleView = BuildTitleCard(
1829 NSMakeRect(0, yOffset, kFixedAccountRemovalViewWidth,0), 1912 NSMakeRect(0, yOffset, kFixedAccountRemovalViewWidth,0),
1830 l10n_util::GetNSString(IDS_PROFILES_ACCOUNT_REMOVAL_TITLE), 1913 l10n_util::GetStringUTF16(IDS_PROFILES_ACCOUNT_REMOVAL_TITLE),
1831 self /* backButtonTarget*/, 1914 self /* backButtonTarget*/,
1832 @selector(showAccountManagement:) /* backButtonAction */); 1915 @selector(showAccountManagement:) /* backButtonAction */);
1833 [container addSubview:titleView]; 1916 [container addSubview:titleView];
1834 yOffset = NSMaxY([titleView frame]); 1917 yOffset = NSMaxY([titleView frame]);
1835 1918
1836 [container setFrameSize:NSMakeSize(kFixedAccountRemovalViewWidth, yOffset)]; 1919 [container setFrameSize:NSMakeSize(kFixedAccountRemovalViewWidth, yOffset)];
1837 return container.autorelease(); 1920 return container.autorelease();
1838 } 1921 }
1839 1922
1840 - (NSView*)buildSwitchUserView { 1923 - (NSView*)buildSwitchUserView {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1877 action:@selector(showUserManager:)]; 1960 action:@selector(showUserManager:)];
1878 [container addSubview:addPersonButton]; 1961 [container addSubview:addPersonButton];
1879 yOffset = NSMaxY([addPersonButton frame]); 1962 yOffset = NSMaxY([addPersonButton frame]);
1880 1963
1881 separator = [self horizontalSeparatorWithFrame: 1964 separator = [self horizontalSeparatorWithFrame:
1882 NSMakeRect(0, yOffset, kFixedMenuWidth, 0)]; 1965 NSMakeRect(0, yOffset, kFixedMenuWidth, 0)];
1883 [container addSubview:separator]; 1966 [container addSubview:separator];
1884 yOffset = NSMaxY([separator frame]); 1967 yOffset = NSMaxY([separator frame]);
1885 1968
1886 // Adds the content text. 1969 // Adds the content text.
1970 base::string16 elidedName(gfx::ElideText(
1971 avatarItem.name, gfx::FontList(), availableWidth, gfx::ELIDE_TAIL));
1887 NSTextField* contentLabel = BuildLabel( 1972 NSTextField* contentLabel = BuildLabel(
1888 l10n_util::GetNSStringF( 1973 l10n_util::GetNSStringF(IDS_PROFILES_NOT_YOU_CONTENT_TEXT, elidedName),
1889 IDS_PROFILES_NOT_YOU_CONTENT_TEXT, avatarItem.name),
1890 NSMakePoint(kHorizontalSpacing, yOffset + kVerticalSpacing), 1974 NSMakePoint(kHorizontalSpacing, yOffset + kVerticalSpacing),
1891 nil); 1975 nil);
1892 [contentLabel setFrameSize:NSMakeSize(availableWidth, 0)]; 1976 [contentLabel setFrameSize:NSMakeSize(availableWidth, 0)];
1893 [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:contentLabel]; 1977 [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:contentLabel];
1894 [container addSubview:contentLabel]; 1978 [container addSubview:contentLabel];
1895 yOffset = NSMaxY([contentLabel frame]) + kVerticalSpacing; 1979 yOffset = NSMaxY([contentLabel frame]) + kVerticalSpacing;
1896 1980
1897 // Adds the title card. 1981 // Adds the title card.
1898 separator = [self horizontalSeparatorWithFrame: 1982 separator = [self horizontalSeparatorWithFrame:
1899 NSMakeRect(0, yOffset, kFixedSwitchUserViewWidth, 0)]; 1983 NSMakeRect(0, yOffset, kFixedSwitchUserViewWidth, 0)];
1900 [container addSubview:separator]; 1984 [container addSubview:separator];
1901 yOffset = NSMaxY([separator frame]) + kSmallVerticalSpacing; 1985 yOffset = NSMaxY([separator frame]) + kSmallVerticalSpacing;
1902 1986
1903 NSView* titleView = BuildTitleCard( 1987 NSView* titleView = BuildTitleCard(
1904 NSMakeRect(0, yOffset, kFixedSwitchUserViewWidth,0), 1988 NSMakeRect(0, yOffset, kFixedSwitchUserViewWidth,0),
1905 l10n_util::GetNSStringF(IDS_PROFILES_NOT_YOU, avatarItem.name), 1989 l10n_util::GetStringFUTF16(IDS_PROFILES_NOT_YOU, avatarItem.name),
1906 self /* backButtonTarget*/, 1990 self /* backButtonTarget*/,
1907 @selector(navigateBackFromSwitchUserView:) /* backButtonAction */); 1991 @selector(navigateBackFromSwitchUserView:) /* backButtonAction */);
1908 [container addSubview:titleView]; 1992 [container addSubview:titleView];
1909 yOffset = NSMaxY([titleView frame]); 1993 yOffset = NSMaxY([titleView frame]);
1910 1994
1911 [container setFrameSize:NSMakeSize(kFixedAccountRemovalViewWidth, yOffset)]; 1995 [container setFrameSize:NSMakeSize(kFixedAccountRemovalViewWidth, yOffset)];
1912 return container.autorelease(); 1996 return container.autorelease();
1913 } 1997 }
1914 1998
1915 // Called when clicked on the settings link. 1999 // Called when clicked on the settings link.
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
2029 } 2113 }
2030 2114
2031 - (bool)shouldShowGoIncognito { 2115 - (bool)shouldShowGoIncognito {
2032 bool incognitoAvailable = 2116 bool incognitoAvailable =
2033 IncognitoModePrefs::GetAvailability(browser_->profile()->GetPrefs()) != 2117 IncognitoModePrefs::GetAvailability(browser_->profile()->GetPrefs()) !=
2034 IncognitoModePrefs::DISABLED; 2118 IncognitoModePrefs::DISABLED;
2035 return incognitoAvailable && !browser_->profile()->IsGuestSession(); 2119 return incognitoAvailable && !browser_->profile()->IsGuestSession();
2036 } 2120 }
2037 2121
2038 @end 2122 @end
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/ui/views/profiles/profile_chooser_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698