Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Side by Side Diff: ash/system/power/tray_power.cc

Issue 10443004: Move common notification layout to base class (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ash/system/network/tray_sms.cc ('k') | ash/system/tray/tray_constants.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/power/tray_power.h" 5 #include "ash/system/power/tray_power.h"
6 6
7 #include "ash/ash_switches.h" 7 #include "ash/ash_switches.h"
8 #include "ash/shell.h" 8 #include "ash/shell.h"
9 #include "ash/system/date/date_view.h" 9 #include "ash/system/date/date_view.h"
10 #include "ash/system/power/power_supply_status.h" 10 #include "ash/system/power/power_supply_status.h"
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 }; 122 };
123 123
124 // This view is used only for the popup. 124 // This view is used only for the popup.
125 class PowerStatusView : public views::View { 125 class PowerStatusView : public views::View {
126 public: 126 public:
127 enum ViewType { 127 enum ViewType {
128 VIEW_DEFAULT, 128 VIEW_DEFAULT,
129 VIEW_NOTIFICATION 129 VIEW_NOTIFICATION
130 }; 130 };
131 131
132 explicit PowerStatusView(ViewType view_type) { 132 explicit PowerStatusView(ViewType view_type) : icon_(NULL) {
133 status_label_ = new views::Label; 133 status_label_ = new views::Label;
134 status_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
135 time_label_ = new views::Label; 134 time_label_ = new views::Label;
136 time_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
137
138 icon_ = new views::ImageView;
139
140 AddChildView(status_label_);
141 AddChildView(time_label_);
142 AddChildView(icon_);
143 135
144 if (view_type == VIEW_DEFAULT) 136 if (view_type == VIEW_DEFAULT)
145 LayoutDefaultView(); 137 LayoutDefaultView();
146 else 138 else
147 LayoutNotificationView(); 139 LayoutNotificationView();
148 140
149 Update(); 141 Update();
150
151 set_border(views::Border::CreateEmptyBorder(
152 kPaddingVertical, kTrayPopupPaddingHorizontal,
153 kPaddingVertical, kTrayPopupPaddingHorizontal));
154 } 142 }
155 143
156 virtual ~PowerStatusView() { 144 virtual ~PowerStatusView() {
157 } 145 }
158 146
159 void UpdatePowerStatus(const PowerSupplyStatus& status) { 147 void UpdatePowerStatus(const PowerSupplyStatus& status) {
160 supply_status_ = status; 148 supply_status_ = status;
161 // Sanitize. 149 // Sanitize.
162 if (supply_status_.battery_is_full) 150 if (supply_status_.battery_is_full)
163 supply_status_.battery_percentage = 100.0; 151 supply_status_.battery_percentage = 100.0;
164 152
165 Update(); 153 Update();
166 } 154 }
167 155
168 private: 156 private:
169 void LayoutDefaultView() { 157 void LayoutDefaultView() {
158 set_border(views::Border::CreateEmptyBorder(
159 kPaddingVertical, kTrayPopupPaddingHorizontal,
160 kPaddingVertical, kTrayPopupPaddingHorizontal));
161
162 status_label_->SetHorizontalAlignment(views::Label::ALIGN_RIGHT);
163 time_label_->SetHorizontalAlignment(views::Label::ALIGN_RIGHT);
164
165 icon_ = new views::ImageView;
166
170 views::GridLayout* layout = new views::GridLayout(this); 167 views::GridLayout* layout = new views::GridLayout(this);
171 SetLayoutManager(layout); 168 SetLayoutManager(layout);
172 169
173 views::ColumnSet* columns = layout->AddColumnSet(0); 170 views::ColumnSet* columns = layout->AddColumnSet(0);
174 171
175 columns->AddPaddingColumn(0, kTrayPopupPaddingHorizontal); 172 columns->AddPaddingColumn(0, kTrayPopupPaddingHorizontal);
176 // Status + Time 173 // Status + Time
177 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 174 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL,
178 0, views::GridLayout::USE_PREF, 0, kLabelMinWidth); 175 0, views::GridLayout::USE_PREF, 0, kLabelMinWidth);
179 176
(...skipping 12 matching lines...) Expand all
192 layout->AddView(icon_, 1, 3); // 3 rows for icon 189 layout->AddView(icon_, 1, 3); // 3 rows for icon
193 190
194 layout->AddPaddingRow(0, kPaddingVertical/3); 191 layout->AddPaddingRow(0, kPaddingVertical/3);
195 layout->StartRow(0, 0); 192 layout->StartRow(0, 0);
196 layout->AddView(time_label_); 193 layout->AddView(time_label_);
197 194
198 layout->AddPaddingRow(0, kPaddingVertical); 195 layout->AddPaddingRow(0, kPaddingVertical);
199 } 196 }
200 197
201 void LayoutNotificationView() { 198 void LayoutNotificationView() {
202 const int msg_width = kTrayPopupWidth - kNotificationCloseButtonWidth - 199 SetLayoutManager(
203 kTrayPopupPaddingHorizontal - kNotificationIconWidth; 200 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1));
201 status_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
202 AddChildView(status_label_);
204 203
205 views::GridLayout* layout = new views::GridLayout(this); 204 time_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
206 SetLayoutManager(layout); 205 AddChildView(time_label_);
207
208 views::ColumnSet* columns = layout->AddColumnSet(0);
209
210 // Icon
211 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL,
212 0 /* resize percent */,
213 views::GridLayout::FIXED,
214 kNotificationIconWidth, kNotificationIconWidth);
215
216 columns->AddPaddingColumn(0, kTrayPopupPaddingHorizontal/2);
217
218 // Status + Time
219 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL,
220 0 /* resize percent */,
221 views::GridLayout::FIXED, msg_width, msg_width);
222
223 // Layout rows
224 layout->AddPaddingRow(0, kTrayPopupPaddingBetweenItems);
225
226 layout->StartRow(0, 0);
227 layout->AddView(icon_, 1, 2); // 2 rows for icon
228 layout->AddView(status_label_);
229
230 layout->StartRow(0, 0);
231 layout->SkipColumns(1);
232 layout->AddView(time_label_);
233
234 layout->AddPaddingRow(0, kPaddingVertical);
235 } 206 }
236 207
237 void UpdateText() { 208 void UpdateText() {
238 base::TimeDelta time = base::TimeDelta::FromSeconds( 209 base::TimeDelta time = base::TimeDelta::FromSeconds(
239 supply_status_.line_power_on ? 210 supply_status_.line_power_on ?
240 supply_status_.averaged_battery_time_to_full : 211 supply_status_.averaged_battery_time_to_full :
241 supply_status_.averaged_battery_time_to_empty); 212 supply_status_.averaged_battery_time_to_empty);
242 int hour = time.InHours(); 213 int hour = time.InHours();
243 int min = (time - base::TimeDelta::FromHours(hour)).InMinutes(); 214 int min = (time - base::TimeDelta::FromHours(hour)).InMinutes();
244 215
(...skipping 20 matching lines...) Expand all
265 IDS_ASH_STATUS_TRAY_BATTERY_TIME_UNTIL_FULL : 236 IDS_ASH_STATUS_TRAY_BATTERY_TIME_UNTIL_FULL :
266 IDS_ASH_STATUS_TRAY_BATTERY_TIME_UNTIL_EMPTY, 237 IDS_ASH_STATUS_TRAY_BATTERY_TIME_UNTIL_EMPTY,
267 base::IntToString16(hour), 238 base::IntToString16(hour),
268 base::IntToString16(min))); 239 base::IntToString16(min)));
269 } else { 240 } else {
270 time_label_->SetText(string16()); 241 time_label_->SetText(string16());
271 } 242 }
272 } 243 }
273 244
274 void UpdateIcon() { 245 void UpdateIcon() {
275 icon_->SetImage(GetBatteryImage(supply_status_, ICON_DARK)); 246 if (icon_) {
276 icon_->SetVisible(true); 247 icon_->SetImage(GetBatteryImage(supply_status_, ICON_DARK));
248 icon_->SetVisible(true);
249 }
277 } 250 }
278 251
279 void Update() { 252 void Update() {
280 UpdateText(); 253 UpdateText();
281 UpdateIcon(); 254 UpdateIcon();
282 } 255 }
283 256
284 views::Label* status_label_; 257 views::Label* status_label_;
285 views::Label* time_label_; 258 views::Label* time_label_;
286 views::ImageView* icon_; 259 views::ImageView* icon_;
287 260
288 PowerSupplyStatus supply_status_; 261 PowerSupplyStatus supply_status_;
289 262
290 DISALLOW_COPY_AND_ASSIGN(PowerStatusView); 263 DISALLOW_COPY_AND_ASSIGN(PowerStatusView);
291 }; 264 };
292 265
293 class PowerNotificationView : public TrayNotificationView { 266 class PowerNotificationView : public TrayNotificationView {
294 public: 267 public:
295 explicit PowerNotificationView(TrayPower* tray) 268 explicit PowerNotificationView(TrayPower* tray)
296 : tray_(tray) { 269 : TrayNotificationView(0),
270 tray_(tray) {
297 power_status_view_ = 271 power_status_view_ =
298 new PowerStatusView(PowerStatusView::VIEW_NOTIFICATION); 272 new PowerStatusView(PowerStatusView::VIEW_NOTIFICATION);
299 InitView(power_status_view_); 273 InitView(power_status_view_);
300 } 274 }
301 275
302 void UpdatePowerStatus(const PowerSupplyStatus& status) { 276 void UpdatePowerStatus(const PowerSupplyStatus& status) {
277 SetIconImage(GetBatteryImage(status, ICON_DARK));
303 power_status_view_->UpdatePowerStatus(status); 278 power_status_view_->UpdatePowerStatus(status);
304 } 279 }
305 280
306 // Overridden from TrayNotificationView: 281 // Overridden from TrayNotificationView:
307 virtual void OnClose() OVERRIDE { 282 virtual void OnClose() OVERRIDE {
308 tray_->HideNotificationView(); 283 tray_->HideNotificationView();
309 } 284 }
310 285
311 private: 286 private:
312 TrayPower* tray_; 287 TrayPower* tray_;
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 return false; 395 return false;
421 case NOTIFICATION_CRITICAL: 396 case NOTIFICATION_CRITICAL:
422 return false; 397 return false;
423 } 398 }
424 NOTREACHED(); 399 NOTREACHED();
425 return false; 400 return false;
426 } 401 }
427 402
428 } // namespace internal 403 } // namespace internal
429 } // namespace ash 404 } // namespace ash
OLDNEW
« no previous file with comments | « ash/system/network/tray_sms.cc ('k') | ash/system/tray/tray_constants.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698