tray_tracing.cc revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
1ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// found in the LICENSE file.
4ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
5ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ash/system/chromeos/tray_tracing.h"
6ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ash/shell.h"
8ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ash/system/tray/actionable_view.h"
9ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ash/system/tray/fixed_sized_image_view.h"
10ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ash/system/tray/system_tray.h"
11ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ash/system/tray/system_tray_delegate.h"
12ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ash/system/tray/system_tray_notifier.h"
13ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ash/system/tray/tray_constants.h"
14ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "grit/ash_resources.h"
15ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "grit/ash_strings.h"
16ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ui/base/l10n/l10n_util.h"
17ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ui/base/resource/resource_bundle.h"
18ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ui/gfx/image/image.h"
19ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ui/views/controls/image_view.h"
20ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ui/views/controls/label.h"
21ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ui/views/layout/box_layout.h"
22ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
23ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochnamespace ash {
24ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochnamespace tray {
25ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass DefaultTracingView : public ActionableView {
27ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch public:
28ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  DefaultTracingView() {
29ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    SetLayoutManager(new views::BoxLayout(
30ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        views::BoxLayout::kHorizontal,
311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        kTrayPopupPaddingHorizontal, 0,
321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        kTrayPopupPaddingBetweenItems));
33ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
34ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    image_ = new FixedSizedImageView(0, kTrayPopupItemHeight);
36ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    image_->SetImage(
37ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        bundle.GetImageNamed(IDR_AURA_UBER_TRAY_TRACING).ToImageSkia());
38ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    AddChildView(image_);
39ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
40ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    label_ = new views::Label();
41ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    label_->SetMultiLine(true);
42ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
43ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    label_->SetText(bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_TRACING));
44ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    AddChildView(label_);
45ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  }
46ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
47ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual ~DefaultTracingView() {}
48ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
49ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch private:
50ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Overridden from ActionableView.
51ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual bool PerformAction(const ui::Event& event) OVERRIDE {
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    Shell::GetInstance()->system_tray_delegate()->ShowChromeSlow();
53ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    return true;
54ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  }
55ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
56ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  views::ImageView* image_;
57ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  views::Label* label_;
58ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
59ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(DefaultTracingView);
60ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch};
61ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
62ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}  // namespace tray
63ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
64ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch////////////////////////////////////////////////////////////////////////////////
65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// ash::TrayTracing
66ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
67ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochTrayTracing::TrayTracing(SystemTray* system_tray)
68ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    : TrayImageItem(system_tray, IDR_AURA_UBER_TRAY_TRACING),
69ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      default_(NULL) {
70ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  DCHECK(Shell::GetInstance()->delegate());
71ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  DCHECK(system_tray);
72ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  Shell::GetInstance()->system_tray_notifier()->AddTracingObserver(this);
73ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
74ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
75ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochTrayTracing::~TrayTracing() {
76ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  Shell::GetInstance()->system_tray_notifier()->RemoveTracingObserver(this);
77ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
78ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
79ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid TrayTracing::SetTrayIconVisible(bool visible) {
80ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  if (tray_view())
81ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    tray_view()->SetVisible(visible);
82ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
83ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
84ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbool TrayTracing::GetInitialVisibility() {
85ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  return false;
86ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
87ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
88ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochviews::View* TrayTracing::CreateDefaultView(user::LoginStatus status) {
89ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  CHECK(default_ == NULL);
903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (tray_view() && tray_view()->visible())
913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    default_ = new tray::DefaultTracingView();
92ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  return default_;
93ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
94ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
95ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochviews::View* TrayTracing::CreateDetailedView(user::LoginStatus status) {
96ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  return NULL;
97ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
98ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
99ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid TrayTracing::DestroyDefaultView() {
100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  default_ = NULL;
101ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
102ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
103ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid TrayTracing::DestroyDetailedView() {
104ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
105ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
106ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid TrayTracing::OnTracingModeChanged(bool value) {
107ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  SetTrayIconVisible(value);
108ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
109ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
110ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}  // namespace ash
111