Chromium Code Reviews| Index: ash/system/user/tray_user.cc |
| diff --git a/ash/system/user/tray_user.cc b/ash/system/user/tray_user.cc |
| index 51d09015404a7632e08c4d86d5e55681eff809fb..d6696de4915f9c5e8e8c28ae0ebd64d6765ec4c0 100644 |
| --- a/ash/system/user/tray_user.cc |
| +++ b/ash/system/user/tray_user.cc |
| @@ -8,6 +8,7 @@ |
| #include <climits> |
| #include <vector> |
| +#include "ash/popup_message.h" |
| #include "ash/session_state_delegate.h" |
| #include "ash/shell.h" |
| #include "ash/shell_delegate.h" |
| @@ -105,6 +106,9 @@ const int kPublicAccountLogoutButtonBorderImagesHovered[] = { |
| IDR_AURA_TRAY_POPUP_PUBLIC_ACCOUNT_LOGOUT_BUTTON_BORDER, |
| }; |
| +// Offsetting the popup message relativ to the tray menu. |
|
Nikita (slow)
2013/05/21 18:03:52
nit: relative
Mr4D (OOO till 08-26)
2013/05/21 19:23:33
Done.
|
| +const int kPopupMessageOffset = 25; |
| + |
| } // namespace |
| namespace ash { |
| @@ -262,6 +266,7 @@ class UserView : public views::View, |
| MultiProfileIndex multiprofile_index_; |
| views::View* user_card_; |
| views::View* logout_button_; |
| + scoped_ptr<ash::PopupMessage> popup_message_; |
| scoped_ptr<views::Widget> add_menu_option_; |
| // The mouse watcher which takes care of out of window hover events. |
| @@ -280,6 +285,9 @@ class AddUserView : public views::CustomButton, |
| AddUserView(UserCard* owner, views::ButtonListener* listener); |
| virtual ~AddUserView(); |
| + // Get the anchor view for a message. |
| + views::View* anchor() { return anchor_; } |
| + |
| // Overridden from views::ButtonListener. |
| virtual void ButtonPressed(views::Button* sender, |
| const ui::Event& event) OVERRIDE; |
| @@ -302,6 +310,9 @@ class AddUserView : public views::CustomButton, |
| // This is the owner view of this item. |
| UserCard* owner_; |
| + // The anchor view for the "all users are already assigned" message. |
|
Nikita (slow)
2013/05/21 18:03:52
nit: I would leave comment more generic as it coul
Mr4D (OOO till 08-26)
2013/05/21 19:23:33
Good point. Done.
|
| + views::View* anchor_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(AddUserView); |
| }; |
| @@ -591,8 +602,7 @@ UserView::UserView(SystemTrayItem* owner, |
| UserView::~UserView() {} |
| void UserView::MouseMovedOutOfHost() { |
| - // Make sure that the MouseWatcher does not outlive our add menu option. |
| - DCHECK(!add_menu_option_.get()); |
| + popup_message_.reset(); |
| mouse_watcher_.reset(); |
| add_menu_option_.reset(); |
| } |
| @@ -832,6 +842,7 @@ void UserView::AddLoggedInPublicModeUserCardContent(SystemTrayItem* owner) { |
| void UserView::ToggleAddUserMenuOption() { |
| if (add_menu_option_.get()) { |
| + popup_message_.reset(); |
| mouse_watcher_.reset(); |
| add_menu_option_.reset(); |
| return; |
| @@ -865,14 +876,21 @@ void UserView::ToggleAddUserMenuOption() { |
| add_menu_option_->SetBounds(bounds); |
| // Show the content. |
| - add_menu_option_->SetContentsView(new AddUserView( |
| - static_cast<UserCard*>(user_card_), this)); |
| + AddUserView* add_user_view = new AddUserView( |
| + static_cast<UserCard*>(user_card_), this); |
| + add_menu_option_->SetContentsView(add_user_view); |
| add_menu_option_->SetAlwaysOnTop(true); |
| add_menu_option_->Show(); |
| if (cannot_add_more_users) { |
| - // TODO(skuhne): Use IDS_ASH_STATUS_TRAY_CAPTION_CANNOT_ADD_USER and |
| - // IDS_ASH_STATUS_TRAY_MESSAGE_CANNOT_ADD_USER when showing the error |
| - // message that no more users can be added. |
| + ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
| + popup_message_.reset(new PopupMessage( |
| + bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_CAPTION_CANNOT_ADD_USER), |
| + bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_MESSAGE_CANNOT_ADD_USER), |
| + PopupMessage::ICON_WARNING, |
| + add_user_view->anchor(), |
| + views::BubbleBorder::TOP_LEFT, |
| + gfx::Size(parent()->bounds().width() - kPopupMessageOffset, 0), |
| + 2 * kPopupMessageOffset)); |
| } |
| // Find the screen area which encloses both elements and sets then a mouse |
| // watcher which will close the "menu". |
| @@ -888,7 +906,8 @@ AddUserView::AddUserView(UserCard* owner, views::ButtonListener* listener) |
| : CustomButton(listener_), |
| add_user_(NULL), |
| listener_(listener), |
| - owner_(owner) { |
| + owner_(owner), |
| + anchor_(NULL) { |
| AddContent(); |
| owner_->ForceBorderVisible(true); |
| } |
| @@ -942,13 +961,13 @@ void AddUserView::AddContent() { |
| views::BoxLayout::kHorizontal, 0, 0 , kTrayPopupPaddingBetweenItems)); |
| AddChildViewAt(add_user_, 0); |
| - // Add the [+] icon. |
| + // Add the [+] icon which is also the anchor for messages. |
| ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
| RoundedImageView* icon = new RoundedImageView(kProfileRoundedCornerRadius, |
| true); |
| - // TODO(skuhne): Add the resource and load the proper icon. |
| + anchor_ = icon; |
| icon->SetImage(*ui::ResourceBundle::GetSharedInstance(). |
| - GetImageNamed(IDR_AURA_UBER_TRAY_GUEST_ICON).ToImageSkia(), |
| + GetImageNamed(IDR_AURA_UBER_TRAY_ADD_MULTIPROFILE_USER).ToImageSkia(), |
| gfx::Size(kUserIconSize, kUserIconSize)); |
| add_user_->AddChildView(icon); |
| @@ -1010,7 +1029,7 @@ views::View* TrayUser::CreateDefaultView(user::LoginStatus status) { |
| // Do not show more UserView's then there are logged in users. |
| if (multiprofile_index_ >= logged_in_users) |
| - return NULL;; |
| + return NULL; |
| user_ = new tray::UserView(this, status, multiprofile_index_); |
| return user_; |