Chromium Code Reviews| Index: ash/system/settings/tray_settings.cc |
| diff --git a/ash/system/settings/tray_settings.cc b/ash/system/settings/tray_settings.cc |
| index fee44ece1ff34383883497f91a5b4ac9a46858d0..d78634fe2ce33d0b7ebb83f0dd092dff53ae72b4 100644 |
| --- a/ash/system/settings/tray_settings.cc |
| +++ b/ash/system/settings/tray_settings.cc |
| @@ -5,6 +5,7 @@ |
| #include "ash/system/settings/tray_settings.h" |
| #include "ash/shell.h" |
| +#include "ash/system/power/power_status_view.h" |
| #include "ash/system/tray/system_tray_delegate.h" |
| #include "ash/system/tray/tray_constants.h" |
| #include "ash/system/tray/tray_views.h" |
| @@ -22,30 +23,44 @@ |
| #include "ui/views/layout/fill_layout.h" |
| #include "ui/views/view.h" |
| -namespace { |
| +namespace ash { |
| +namespace internal { |
| + |
| +namespace tray { |
| -class SettingsView : public ash::internal::ActionableView { |
| +class SettingsDefaultView : public ash::internal::ActionableView { |
| public: |
| - SettingsView() { |
| + explicit SettingsDefaultView(user::LoginStatus status) |
| + : power_status_view_(NULL) { |
| SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, |
| ash::kTrayPopupPaddingHorizontal, 0, |
| ash::kTrayPopupPaddingBetweenItems)); |
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
| - views::ImageView* icon = |
| - new ash::internal::FixedSizedImageView(0, ash::kTrayPopupItemHeight); |
| - icon->SetImage(rb.GetImageNamed(IDR_AURA_UBER_TRAY_SETTINGS).ToImageSkia()); |
| - AddChildView(icon); |
| - |
| - string16 text = rb.GetLocalizedString( |
| - IDS_ASH_STATUS_TRAY_SETTINGS); |
| - label_ = new views::Label(text); |
| - AddChildView(label_); |
| - |
| - SetAccessibleName(text); |
| + if (status != user::LOGGED_IN_NONE && status != user::LOGGED_IN_LOCKED) { |
| + ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
| + views::ImageView* icon = |
| + new ash::internal::FixedSizedImageView(0, ash::kTrayPopupItemHeight); |
| + icon->SetImage( |
| + rb.GetImageNamed(IDR_AURA_UBER_TRAY_SETTINGS).ToImageSkia()); |
| + AddChildView(icon); |
| + |
| + string16 text = rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_SETTINGS); |
| + label_ = new views::Label(text); |
| + AddChildView(label_); |
| + SetAccessibleName(text); |
| + } |
| + |
| + PowerSupplyStatus power_status = |
| + ash::Shell::GetInstance()->tray_delegate()->GetPowerSupplyStatus(); |
| + if (power_status.battery_is_present) { |
| + power_status_view_ = new ash::internal::tray::PowerStatusView( |
| + ash::internal::tray::PowerStatusView::VIEW_DEFAULT); |
| + AddChildView(power_status_view_); |
| + power_status_view_->UpdatePowerStatus(power_status); |
|
stevenjb
2012/06/07 01:31:18
nit: Put this into UpdatePowerStatus()? (See comme
jennyz
2012/06/07 22:06:52
Done.
|
| + } |
| } |
| - virtual ~SettingsView() {} |
| + virtual ~SettingsDefaultView() {} |
| // Overridden from ash::internal::ActionableView. |
| virtual bool PerformAction(const views::Event& event) OVERRIDE { |
| @@ -53,18 +68,43 @@ class SettingsView : public ash::internal::ActionableView { |
| return true; |
| } |
| + // Overridden from views::View. |
| + virtual void Layout() OVERRIDE { |
| + // Let the box-layout do the layout first. Then move power_status_view_ |
| + // to right align if it is created. |
| + views::View::Layout(); |
| + |
| + if (power_status_view_) { |
| + gfx::Size size = power_status_view_->GetPreferredSize(); |
| + gfx::Rect bounds(size); |
| + bounds.set_x(width() - size.width() - ash::kTrayPopupPaddingBetweenItems); |
| + bounds.set_y((height() - size.height()) / 2); |
| + power_status_view_->SetBoundsRect(bounds); |
| + } |
| + } |
| + |
| + // Overridden from views::View. |
| + virtual void ChildPreferredSizeChanged(views::View* child) OVERRIDE { |
| + views::View::ChildPreferredSizeChanged(child); |
| + Layout(); |
| + } |
| + |
| + ash::internal::tray::PowerStatusView* power_status_view() { |
| + return power_status_view_; |
| + } |
| + |
| private: |
| views::Label* label_; |
| + ash::internal::tray::PowerStatusView* power_status_view_; |
| - DISALLOW_COPY_AND_ASSIGN(SettingsView); |
| -}; |
| + DISALLOW_COPY_AND_ASSIGN(SettingsDefaultView); |
| + }; |
| -} // namespace |
| - |
| -namespace ash { |
| -namespace internal { |
| +} // namespace tray |
| -TraySettings::TraySettings() {} |
| +TraySettings::TraySettings() |
| + : default_(NULL) { |
| +} |
| TraySettings::~TraySettings() {} |
| @@ -73,10 +113,14 @@ views::View* TraySettings::CreateTrayView(user::LoginStatus status) { |
| } |
| views::View* TraySettings::CreateDefaultView(user::LoginStatus status) { |
| - if (status == user::LOGGED_IN_NONE || status == user::LOGGED_IN_LOCKED) |
| + if ((status == user::LOGGED_IN_NONE || status == user::LOGGED_IN_LOCKED) && |
| + (!ash::Shell::GetInstance()->tray_delegate()-> |
| + GetPowerSupplyStatus().battery_is_present)) |
| return NULL; |
| - return new SettingsView; |
| + CHECK(default_ == NULL); |
| + default_ = new tray::SettingsDefaultView(status); |
| + return default_; |
| } |
| views::View* TraySettings::CreateDetailedView(user::LoginStatus status) { |
| @@ -88,6 +132,7 @@ void TraySettings::DestroyTrayView() { |
| } |
| void TraySettings::DestroyDefaultView() { |
| + default_ = NULL; |
| } |
| void TraySettings::DestroyDetailedView() { |
| @@ -96,5 +141,11 @@ void TraySettings::DestroyDetailedView() { |
| void TraySettings::UpdateAfterLoginStatusChange(user::LoginStatus status) { |
| } |
| +// Overridden from PowerStatusObserver. |
| +void TraySettings::OnPowerStatusChanged(const PowerSupplyStatus& status) { |
| + if (default_ && default_->power_status_view()) |
| + default_->power_status_view()->UpdatePowerStatus(status); |
|
stevenjb
2012/06/07 01:31:18
nit: Make UpdatePowerStatus() a member of PowerSta
jennyz
2012/06/07 22:06:52
Done, you mean make UpdatePowerStatus() a member o
|
| +} |
| + |
| } // namespace internal |
| } // namespace ash |