OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "ash/system/tray/system_tray.h" | 5 #include "ash/system/tray/system_tray.h" |
6 | 6 |
| 7 #include "ash/shell.h" |
7 #include "ash/shell/panel_window.h" | 8 #include "ash/shell/panel_window.h" |
| 9 #include "ash/system/tray/system_tray_delegate.h" |
8 #include "ash/system/tray/system_tray_item.h" | 10 #include "ash/system/tray/system_tray_item.h" |
| 11 #include "ash/system/user/login_status.h" |
9 #include "ash/wm/shadow_types.h" | 12 #include "ash/wm/shadow_types.h" |
10 #include "base/logging.h" | 13 #include "base/logging.h" |
11 #include "base/utf_string_conversions.h" | 14 #include "base/utf_string_conversions.h" |
12 #include "third_party/skia/include/core/SkColor.h" | 15 #include "third_party/skia/include/core/SkColor.h" |
13 #include "ui/views/border.h" | 16 #include "ui/views/border.h" |
14 #include "ui/views/bubble/bubble_delegate.h" | 17 #include "ui/views/bubble/bubble_delegate.h" |
15 #include "ui/views/controls/label.h" | 18 #include "ui/views/controls/label.h" |
16 #include "ui/views/layout/box_layout.h" | 19 #include "ui/views/layout/box_layout.h" |
17 #include "ui/views/view.h" | 20 #include "ui/views/view.h" |
18 | 21 |
(...skipping 24 matching lines...) Expand all Loading... |
43 (*it)->DestroyDefaultView(); | 46 (*it)->DestroyDefaultView(); |
44 } | 47 } |
45 } | 48 } |
46 | 49 |
47 private: | 50 private: |
48 // Overridden from views::BubbleDelegateView. | 51 // Overridden from views::BubbleDelegateView. |
49 virtual void Init() OVERRIDE { | 52 virtual void Init() OVERRIDE { |
50 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, | 53 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, |
51 0, 0, 1)); | 54 0, 0, 1)); |
52 | 55 |
| 56 ash::SystemTrayDelegate* delegate = |
| 57 ash::Shell::GetInstance()->tray_delegate(); |
| 58 ash::user::LoginStatus login_status = delegate->GetUserLoginStatus(); |
53 for (std::vector<ash::SystemTrayItem*>::iterator it = items_.begin(); | 59 for (std::vector<ash::SystemTrayItem*>::iterator it = items_.begin(); |
54 it != items_.end(); | 60 it != items_.end(); |
55 ++it) { | 61 ++it) { |
56 views::View* view = detailed_ ? (*it)->CreateDetailedView() : | 62 views::View* view = detailed_ ? (*it)->CreateDetailedView(login_status) : |
57 (*it)->CreateDefaultView(); | 63 (*it)->CreateDefaultView(login_status); |
| 64 if (!view) |
| 65 continue; |
58 if (it != items_.begin()) | 66 if (it != items_.begin()) |
59 view->set_border(views::Border::CreateSolidSidedBorder( | 67 view->set_border(views::Border::CreateSolidSidedBorder( |
60 1, 0, 0, 0, SkColorSetARGB(25, 0, 0, 0))); | 68 1, 0, 0, 0, SkColorSetARGB(25, 0, 0, 0))); |
61 AddChildView(view); | 69 AddChildView(view); |
62 } | 70 } |
63 } | 71 } |
64 | 72 |
65 ash::SystemTray* tray_; | 73 ash::SystemTray* tray_; |
66 std::vector<ash::SystemTrayItem*> items_; | 74 std::vector<ash::SystemTrayItem*> items_; |
67 bool detailed_; | 75 bool detailed_; |
(...skipping 20 matching lines...) Expand all Loading... |
88 for (std::vector<SystemTrayItem*>::iterator it = items_.begin(); | 96 for (std::vector<SystemTrayItem*>::iterator it = items_.begin(); |
89 it != items_.end(); | 97 it != items_.end(); |
90 ++it) { | 98 ++it) { |
91 (*it)->DestroyTrayView(); | 99 (*it)->DestroyTrayView(); |
92 } | 100 } |
93 } | 101 } |
94 | 102 |
95 void SystemTray::AddTrayItem(SystemTrayItem* item) { | 103 void SystemTray::AddTrayItem(SystemTrayItem* item) { |
96 items_.push_back(item); | 104 items_.push_back(item); |
97 | 105 |
98 views::View* tray_item = item->CreateTrayView(); | 106 SystemTrayDelegate* delegate = Shell::GetInstance()->tray_delegate(); |
| 107 views::View* tray_item = item->CreateTrayView(delegate->GetUserLoginStatus()); |
99 if (tray_item) { | 108 if (tray_item) { |
100 AddChildViewAt(tray_item, 0); | 109 AddChildViewAt(tray_item, 0); |
101 PreferredSizeChanged(); | 110 PreferredSizeChanged(); |
102 } | 111 } |
103 } | 112 } |
104 | 113 |
105 void SystemTray::RemoveTrayItem(SystemTrayItem* item) { | 114 void SystemTray::RemoveTrayItem(SystemTrayItem* item) { |
106 NOTIMPLEMENTED(); | 115 NOTIMPLEMENTED(); |
107 } | 116 } |
108 | 117 |
109 void SystemTray::ShowDetailedView(SystemTrayItem* item) { | 118 void SystemTray::ShowDetailedView(SystemTrayItem* item) { |
110 if (popup_) | 119 if (popup_) |
111 popup_->Close(); | 120 popup_->Close(); |
112 popup_ = NULL; | 121 popup_ = NULL; |
113 | 122 |
114 std::vector<SystemTrayItem*> items; | 123 std::vector<SystemTrayItem*> items; |
115 items.push_back(item); | 124 items.push_back(item); |
116 ShowItems(items, true); | 125 ShowItems(items, true); |
117 } | 126 } |
118 | 127 |
| 128 void SystemTray::UpdateAfterLoginStatusChange(user::LoginStatus login_status) { |
| 129 if (popup_) |
| 130 popup_->CloseNow(); |
| 131 |
| 132 for (std::vector<SystemTrayItem*>::iterator it = items_.begin(); |
| 133 it != items_.end(); |
| 134 ++it) { |
| 135 (*it)->DestroyTrayView(); |
| 136 } |
| 137 RemoveAllChildViews(true); |
| 138 |
| 139 for (std::vector<SystemTrayItem*>::iterator it = items_.begin(); |
| 140 it != items_.end(); |
| 141 ++it) { |
| 142 views::View* view = (*it)->CreateTrayView(login_status); |
| 143 if (view) |
| 144 AddChildViewAt(view, 0); |
| 145 } |
| 146 PreferredSizeChanged(); |
| 147 } |
| 148 |
119 void SystemTray::ShowItems(std::vector<SystemTrayItem*>& items, bool detailed) { | 149 void SystemTray::ShowItems(std::vector<SystemTrayItem*>& items, bool detailed) { |
120 CHECK(!popup_); | 150 CHECK(!popup_); |
121 SystemTrayBubble* bubble = new SystemTrayBubble(this, items, detailed); | 151 SystemTrayBubble* bubble = new SystemTrayBubble(this, items, detailed); |
122 popup_ = views::BubbleDelegateView::CreateBubble(bubble); | 152 popup_ = views::BubbleDelegateView::CreateBubble(bubble); |
123 popup_->AddObserver(this); | 153 popup_->AddObserver(this); |
124 bubble->Show(); | 154 bubble->Show(); |
125 } | 155 } |
126 | 156 |
127 bool SystemTray::OnMousePressed(const views::MouseEvent& event) { | 157 bool SystemTray::OnMousePressed(const views::MouseEvent& event) { |
128 if (popup_) | 158 if (popup_) |
129 popup_->Show(); | 159 popup_->Show(); |
130 else | 160 else |
131 ShowItems(items_, false); | 161 ShowItems(items_, false); |
132 return true; | 162 return true; |
133 } | 163 } |
134 | 164 |
135 void SystemTray::OnWidgetClosing(views::Widget* widget) { | 165 void SystemTray::OnWidgetClosing(views::Widget* widget) { |
136 CHECK_EQ(popup_, widget); | 166 CHECK_EQ(popup_, widget); |
137 popup_ = NULL; | 167 popup_ = NULL; |
138 } | 168 } |
139 | 169 |
140 } // namespace ash | 170 } // namespace ash |
OLD | NEW |