Index: athena/system/status_icon_container_view.cc |
diff --git a/athena/system/status_icon_container_view.cc b/athena/system/status_icon_container_view.cc |
index 30f2565d7756551f9e6b14cf1247431226fce49f..afb38955224afc5c3fc6a8d8948de6281db9e1f9 100644 |
--- a/athena/system/status_icon_container_view.cc |
+++ b/athena/system/status_icon_container_view.cc |
@@ -2,12 +2,10 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "athena/main/debug/debug_window.h" |
+#include "athena/system/status_icon_container_view.h" |
-#include "athena/common/container_priorities.h" |
-#include "athena/main/debug/network_selector.h" |
#include "athena/resources/athena_resources.h" |
-#include "athena/screen/public/screen_manager.h" |
+#include "athena/system/network_selector.h" |
#include "base/bind.h" |
#include "base/macros.h" |
#include "base/strings/stringprintf.h" |
@@ -20,33 +18,33 @@ |
#include "chromeos/network/network_state_handler.h" |
#include "chromeos/network/network_state_handler_observer.h" |
#include "chromeos/network/network_type_pattern.h" |
+#include "extensions/shell/common/version.h" |
#include "ui/aura/window.h" |
#include "ui/base/resource/resource_bundle.h" |
#include "ui/gfx/image/image.h" |
#include "ui/gfx/image/image_skia.h" |
#include "ui/gfx/image/image_skia_operations.h" |
-#include "ui/views/background.h" |
-#include "ui/views/border.h" |
#include "ui/views/controls/image_view.h" |
#include "ui/views/controls/label.h" |
#include "ui/views/layout/box_layout.h" |
-#include "ui/views/view.h" |
-#include "ui/views/widget/widget.h" |
+namespace athena { |
namespace { |
-views::Label* CreateDebugLabel(const std::string& text) { |
+views::Label* CreateLabel(const std::string& text) { |
views::Label* label = new views::Label(base::UTF8ToUTF16(text)); |
label->SetEnabledColor(SK_ColorWHITE); |
- label->SetBackgroundColor(SK_ColorTRANSPARENT); |
- label->SetFontList(gfx::FontList().Derive(-2, gfx::Font::BOLD)); |
+ label->SetAutoColorReadabilityEnabled(false); |
+ label->SetFontList(gfx::FontList().DeriveWithStyle(gfx::Font::BOLD)); |
return label; |
} |
-class PowerStatus : public chromeos::PowerManagerClient::Observer { |
+} // namespace |
+ |
+class StatusIconContainerView::PowerStatus |
+ : public chromeos::PowerManagerClient::Observer { |
public: |
- PowerStatus(views::ImageView* icon, const base::Closure& closure) |
- : icon_(icon), closure_(closure) { |
+ explicit PowerStatus(views::ImageView* icon) : icon_(icon) { |
chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver( |
this); |
chromeos::DBusThreadManager::Get() |
@@ -96,20 +94,17 @@ class PowerStatus : public chromeos::PowerManagerClient::Observer { |
virtual void PowerChanged( |
const power_manager::PowerSupplyProperties& proto) OVERRIDE { |
icon_->SetImage(GetPowerIcon(proto)); |
- if (!closure_.is_null()) |
- closure_.Run(); |
} |
views::ImageView* icon_; |
- base::Closure closure_; |
DISALLOW_COPY_AND_ASSIGN(PowerStatus); |
}; |
-class NetworkStatus : public chromeos::NetworkStateHandlerObserver { |
+class StatusIconContainerView::NetworkStatus |
+ : public chromeos::NetworkStateHandlerObserver { |
public: |
- NetworkStatus(views::Label* label, const base::Closure& closure) |
- : label_(label), closure_(closure) { |
+ explicit NetworkStatus(views::Label* label) : label_(label) { |
chromeos::NetworkStateHandler* handler = |
chromeos::NetworkHandler::Get()->network_state_handler(); |
handler->AddObserver(this, FROM_HERE); |
@@ -136,8 +131,6 @@ class NetworkStatus : public chromeos::NetworkStateHandlerObserver { |
"%s (%s)", network->ip_address().c_str(), network->name().c_str()); |
} |
label_->SetText(base::UTF8ToUTF16(status)); |
- if (!closure_.is_null()) |
- closure_.Run(); |
} |
// chromeos::NetworkStateHandlerObserver: |
@@ -157,7 +150,8 @@ class NetworkStatus : public chromeos::NetworkStateHandlerObserver { |
} |
views::Label* label_; |
- base::Closure closure_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(NetworkStatus); |
}; |
void StartUpdateCallback( |
@@ -165,10 +159,10 @@ void StartUpdateCallback( |
VLOG(1) << "Callback from RequestUpdateCheck, result " << result; |
} |
-class UpdateStatus : public chromeos::UpdateEngineClient::Observer { |
+class StatusIconContainerView::UpdateStatus |
+ : public chromeos::UpdateEngineClient::Observer { |
public: |
- UpdateStatus(views::ImageView* icon, const base::Closure& closure) |
- : icon_(icon), closure_(closure) { |
+ explicit UpdateStatus(views::ImageView* icon) : icon_(icon) { |
chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()->AddObserver( |
this); |
chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()-> |
@@ -189,158 +183,60 @@ class UpdateStatus : public chromeos::UpdateEngineClient::Observer { |
} |
icon_->SetImage(ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
IDR_AURA_UBER_TRAY_UPDATE)); |
- if (!closure_.is_null()) |
- closure_.Run(); |
} |
private: |
views::ImageView* icon_; |
- base::Closure closure_; |
DISALLOW_COPY_AND_ASSIGN(UpdateStatus); |
}; |
-// Processes user input to show the detailed network-list. |
-class DetailViewHandler : public ui::EventHandler { |
- public: |
- explicit DetailViewHandler(aura::Window* container) : container_(container) {} |
- virtual ~DetailViewHandler() {} |
- |
- private: |
- // ui::EventHandler: |
- virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE { |
- if (event->type() == ui::ET_MOUSE_PRESSED) { |
- debug::CreateNetworkSelector(container_); |
- event->SetHandled(); |
- } |
- } |
- |
- virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE { |
- if (event->type() == ui::ET_GESTURE_TAP) { |
- debug::CreateNetworkSelector(container_); |
- event->SetHandled(); |
- } |
- } |
- |
- aura::Window* container_; |
- |
- DISALLOW_COPY_AND_ASSIGN(DetailViewHandler); |
-}; |
- |
-class DebugWidget { |
- public: |
- DebugWidget() : container_(NULL), widget_(NULL) { |
- CreateContainer(); |
- CreateWidget(); |
- |
- CreateBatteryView(); |
- CreateUpdateView(); |
- CreateNetworkView(); |
- |
- UpdateSize(); |
- } |
- |
- virtual ~DebugWidget() {} |
- |
- private: |
- void CreateContainer() { |
- athena::ScreenManager::ContainerParams params("DebugContainer", |
- athena::CP_DEBUG); |
- params.can_activate_children = true; |
- container_ = athena::ScreenManager::Get()->CreateContainer(params); |
- } |
- |
- void CreateWidget() { |
- views::Widget::InitParams params; |
- params.type = views::Widget::InitParams::TYPE_WINDOW_FRAMELESS; |
- params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; |
- params.activatable = views::Widget::InitParams::ACTIVATABLE_NO; |
- params.accept_events = true; |
- params.bounds = gfx::Rect(200, 0, 100, 105); |
- params.parent = container_; |
- widget_ = new views::Widget(); |
- widget_->Init(params); |
- |
- event_handler_.reset(new DetailViewHandler(container_)); |
- |
- const int kHorizontalSpacing = 10; |
- const int kBorderVerticalSpacing = 3; |
- const int kBetweenChildSpacing = 10; |
- const int kBackgroundColor = SkColorSetARGB(0x7f, 0, 0, 0); |
- views::View* container = new views::View; |
- container->SetLayoutManager( |
- new views::BoxLayout(views::BoxLayout::kHorizontal, |
- kHorizontalSpacing, |
- kBorderVerticalSpacing, |
- kBetweenChildSpacing)); |
- container->set_background( |
- views::Background::CreateSolidBackground(kBackgroundColor)); |
- container->SetBorder(views::Border::CreateSolidBorder(1, kBackgroundColor)); |
- container->set_target_handler(event_handler_.get()); |
- widget_->SetContentsView(container); |
- widget_->StackAtTop(); |
- widget_->Show(); |
- |
- widget_->SetBounds(gfx::Rect(600, 0, 300, 25)); |
- } |
- |
- void CreateBatteryView() { |
- views::View* container = widget_->GetContentsView(); |
- views::ImageView* icon = new views::ImageView(); |
- container->AddChildView(icon); |
- container->Layout(); |
- |
- power_status_.reset(new PowerStatus( |
- icon, base::Bind(&DebugWidget::UpdateSize, base::Unretained(this)))); |
- } |
- |
- void CreateNetworkView() { |
- views::View* container = widget_->GetContentsView(); |
- container->AddChildView(CreateDebugLabel("Network:")); |
- |
- views::Label* label = CreateDebugLabel(std::string()); |
- container->AddChildView(label); |
- container->Layout(); |
- |
- network_status_.reset(new NetworkStatus( |
- label, base::Bind(&DebugWidget::UpdateSize, base::Unretained(this)))); |
- } |
- |
- void CreateUpdateView() { |
- views::View* container = widget_->GetContentsView(); |
- views::ImageView* icon = new views::ImageView(); |
- container->AddChildView(icon); |
- container->Layout(); |
+StatusIconContainerView::StatusIconContainerView( |
+ aura::Window* system_modal_container) |
+ : system_modal_container_(system_modal_container) { |
+ const int kHorizontalSpacing = 10; |
+ const int kVerticalSpacing = 3; |
+ const int kBetweenChildSpacing = 10; |
+ SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, |
+ kHorizontalSpacing, |
+ kVerticalSpacing, |
+ kBetweenChildSpacing)); |
+ |
+ std::string version_text = |
+ base::StringPrintf("%s (Build %s)", PRODUCT_VERSION, LAST_CHANGE); |
+ AddChildView(CreateLabel(version_text)); |
+ |
+ AddChildView(CreateLabel("Network:")); |
+ views::Label* network_label = CreateLabel(std::string()); |
+ AddChildView(network_label); |
+ network_status_.reset(new NetworkStatus(network_label)); |
+ |
+ views::ImageView* battery_view = new views::ImageView(); |
+ AddChildView(battery_view); |
+ power_status_.reset(new PowerStatus(battery_view)); |
+ |
+ views::ImageView* update_view = new views::ImageView(); |
+ AddChildView(update_view); |
+ update_status_.reset(new UpdateStatus(update_view)); |
+} |
- update_status_.reset(new UpdateStatus( |
- icon, base::Bind(&DebugWidget::UpdateSize, base::Unretained(this)))); |
- } |
+StatusIconContainerView::~StatusIconContainerView() { |
+} |
- const gfx::Rect GetPositionForSize(const gfx::Size& size) { |
- int right = container_->bounds().right(); |
- int x = right - size.width(); |
- return gfx::Rect(x, 0, size.width(), size.height()); |
- } |
+bool StatusIconContainerView::OnMousePressed(const ui::MouseEvent& event) { |
+ CreateNetworkSelector(system_modal_container_); |
+ return true; |
+} |
- void UpdateSize() { |
- views::View* container = widget_->GetContentsView(); |
- container->Layout(); |
- gfx::Size size = container->GetPreferredSize(); |
- widget_->SetBounds(GetPositionForSize(size)); |
+void StatusIconContainerView::OnGestureEvent(ui::GestureEvent* event) { |
+ if (event->type() == ui::ET_GESTURE_TAP) { |
+ CreateNetworkSelector(system_modal_container_); |
+ event->SetHandled(); |
} |
+} |
- aura::Window* container_; |
- views::Widget* widget_; |
- scoped_ptr<PowerStatus> power_status_; |
- scoped_ptr<NetworkStatus> network_status_; |
- scoped_ptr<UpdateStatus> update_status_; |
- scoped_ptr<ui::EventHandler> event_handler_; |
- |
- DISALLOW_COPY_AND_ASSIGN(DebugWidget); |
-}; |
- |
-} // namespace |
- |
-void CreateDebugWindow() { |
- new DebugWidget(); |
+void StatusIconContainerView::ChildPreferredSizeChanged(views::View* child) { |
+ PreferredSizeChanged(); |
} |
+ |
+} // namespace athena |