[content shell] implement testRunner.overridePreference
[chromium-blink-merge.git] / ash / system / tray / tray_notification_view.cc
blob1565fd7a168da645e2faa11a05d3ea9de9de6780
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
3 // found in the LICENSE file.
5 #include "ash/system/tray/tray_notification_view.h"
7 #include "ash/system/tray/system_tray_item.h"
8 #include "ash/system/tray/tray_constants.h"
9 #include "grit/ash_strings.h"
10 #include "grit/ui_resources.h"
11 #include "ui/base/resource/resource_bundle.h"
12 #include "ui/gfx/image/image_skia.h"
13 #include "ui/views/controls/button/image_button.h"
14 #include "ui/views/controls/image_view.h"
15 #include "ui/views/layout/grid_layout.h"
17 namespace {
19 const int kNotificationButtonWidth = 32;
21 } // namespace
23 namespace ash {
24 namespace internal {
26 TrayNotificationView::TrayNotificationView(SystemTrayItem* owner, int icon_id)
27 : owner_(owner),
28 icon_id_(icon_id),
29 icon_(NULL) {
32 TrayNotificationView::~TrayNotificationView() {
35 void TrayNotificationView::InitView(views::View* contents) {
36 set_background(views::Background::CreateSolidBackground(kBackgroundColor));
38 views::GridLayout* layout = new views::GridLayout(this);
39 SetLayoutManager(layout);
41 views::ImageButton* close_button = new views::ImageButton(this);
42 close_button->SetImage(views::CustomButton::STATE_NORMAL,
43 ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
44 IDR_MESSAGE_CLOSE));
45 close_button->SetImageAlignment(views::ImageButton::ALIGN_CENTER,
46 views::ImageButton::ALIGN_MIDDLE);
48 icon_ = new views::ImageView;
49 if (icon_id_ != 0) {
50 icon_->SetImage(
51 ResourceBundle::GetSharedInstance().GetImageSkiaNamed(icon_id_));
54 views::ColumnSet* columns = layout->AddColumnSet(0);
56 columns->AddPaddingColumn(0, kTrayPopupPaddingHorizontal / 2);
58 // Icon
59 columns->AddColumn(views::GridLayout::CENTER, views::GridLayout::CENTER,
60 0, /* resize percent */
61 views::GridLayout::FIXED,
62 kNotificationIconWidth, kNotificationIconWidth);
64 columns->AddPaddingColumn(0, kTrayPopupPaddingHorizontal / 2);
66 // Contents
67 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL,
68 100, /* resize percent */
69 views::GridLayout::FIXED,
70 kTrayNotificationContentsWidth,
71 kTrayNotificationContentsWidth);
73 columns->AddPaddingColumn(0, kTrayPopupPaddingHorizontal / 2);
75 // Close button
76 columns->AddColumn(views::GridLayout::CENTER, views::GridLayout::LEADING,
77 0, /* resize percent */
78 views::GridLayout::FIXED,
79 kNotificationButtonWidth, kNotificationButtonWidth);
81 // Layout rows
82 layout->AddPaddingRow(0, kTrayPopupPaddingBetweenItems);
83 layout->StartRow(0, 0);
84 layout->AddView(icon_);
85 layout->AddView(contents);
86 layout->AddView(close_button);
87 layout->AddPaddingRow(0, kTrayPopupPaddingBetweenItems);
90 void TrayNotificationView::SetIconImage(const gfx::ImageSkia& image) {
91 icon_->SetImage(image);
92 SchedulePaint();
95 const gfx::ImageSkia& TrayNotificationView::GetIconImage() const {
96 return icon_->GetImage();
99 void TrayNotificationView::UpdateView(views::View* new_contents) {
100 RemoveAllChildViews(true);
101 InitView(new_contents);
102 Layout();
103 PreferredSizeChanged();
104 SchedulePaint();
107 void TrayNotificationView::UpdateViewAndImage(views::View* new_contents,
108 const gfx::ImageSkia& image) {
109 RemoveAllChildViews(true);
110 InitView(new_contents);
111 icon_->SetImage(image);
112 Layout();
113 PreferredSizeChanged();
114 SchedulePaint();
117 void TrayNotificationView::ButtonPressed(views::Button* sender,
118 const ui::Event& event) {
119 HandleClose();
122 bool TrayNotificationView::OnMousePressed(const ui::MouseEvent& event) {
123 HandleClickAction();
124 return true;
127 void TrayNotificationView::OnGestureEvent(ui::GestureEvent* event) {
128 SlideOutView::OnGestureEvent(event);
129 if (event->handled())
130 return;
131 if (event->type() != ui::ET_GESTURE_TAP)
132 return;
133 HandleClickAction();
134 event->SetHandled();
137 void TrayNotificationView::OnClose() {
140 void TrayNotificationView::OnClickAction() {
143 void TrayNotificationView::OnSlideOut() {
144 owner_->HideNotificationView();
147 void TrayNotificationView::HandleClose() {
148 OnClose();
149 owner_->HideNotificationView();
152 void TrayNotificationView::HandleClickAction() {
153 HandleClose();
154 OnClickAction();
157 } // namespace internal
158 } // namespace ash