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/audio/tray_volume.h" | 5 #include "ash/system/audio/tray_volume.h" |
6 | 6 |
7 #include "ash/shell.h" | 7 #include "ash/shell.h" |
8 #include "ash/system/tray/system_tray_delegate.h" | 8 #include "ash/system/tray/system_tray_delegate.h" |
9 #include "ash/system/tray/tray_constants.h" | 9 #include "ash/system/tray/tray_constants.h" |
10 #include "ash/system/tray/tray_views.h" | 10 #include "ash/system/tray/tray_views.h" |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 size.set_height(kTrayPopupItemHeight); | 84 size.set_height(kTrayPopupItemHeight); |
85 return size; | 85 return size; |
86 } | 86 } |
87 | 87 |
88 gfx::Image image_; | 88 gfx::Image image_; |
89 int image_index_; | 89 int image_index_; |
90 | 90 |
91 DISALLOW_COPY_AND_ASSIGN(VolumeButton); | 91 DISALLOW_COPY_AND_ASSIGN(VolumeButton); |
92 }; | 92 }; |
93 | 93 |
| 94 class MuteButton : public ash::internal::TrayBarButtonWithTitle { |
| 95 public: |
| 96 explicit MuteButton(views::ButtonListener* listener) |
| 97 : TrayBarButtonWithTitle(listener, |
| 98 IDS_ASH_STATUS_TRAY_VOLUME_MUTE, |
| 99 kTrayBarButtonWidth) { |
| 100 Update(); |
| 101 } |
| 102 virtual ~MuteButton() {} |
| 103 |
| 104 void Update() { |
| 105 ash::SystemTrayDelegate* delegate = |
| 106 ash::Shell::GetInstance()->tray_delegate(); |
| 107 UpdateButton(delegate->IsAudioMuted()); |
| 108 SchedulePaint(); |
| 109 } |
| 110 |
| 111 DISALLOW_COPY_AND_ASSIGN(MuteButton); |
| 112 }; |
| 113 |
94 class VolumeView : public views::View, | 114 class VolumeView : public views::View, |
95 public views::ButtonListener, | 115 public views::ButtonListener, |
96 public views::SliderListener { | 116 public views::SliderListener { |
97 public: | 117 public: |
98 VolumeView() { | 118 VolumeView() { |
99 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, | 119 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, |
100 kTrayPopupPaddingHorizontal, 0, kTrayPopupPaddingBetweenItems)); | 120 kTrayPopupPaddingHorizontal, 0, kTrayPopupPaddingBetweenItems)); |
101 | 121 |
102 icon_ = new VolumeButton(this); | 122 icon_ = new VolumeButton(this); |
103 AddChildView(icon_); | 123 AddChildView(icon_); |
104 | 124 |
| 125 mute_ = new MuteButton(this); |
| 126 AddChildView(mute_); |
| 127 |
105 ash::SystemTrayDelegate* delegate = | 128 ash::SystemTrayDelegate* delegate = |
106 ash::Shell::GetInstance()->tray_delegate(); | 129 ash::Shell::GetInstance()->tray_delegate(); |
107 slider_ = new views::Slider(this, views::Slider::HORIZONTAL); | 130 slider_ = new views::Slider(this, views::Slider::HORIZONTAL); |
108 slider_->set_focus_border_color(kFocusBorderColor); | 131 slider_->set_focus_border_color(kFocusBorderColor); |
109 slider_->SetValue( | 132 slider_->SetValue( |
110 delegate->IsAudioMuted() ? 0.0 : delegate->GetVolumeLevel()); | 133 delegate->IsAudioMuted() ? 0.0 : delegate->GetVolumeLevel()); |
111 slider_->SetAccessibleName( | 134 slider_->SetAccessibleName( |
112 ui::ResourceBundle::GetSharedInstance().GetLocalizedString( | 135 ui::ResourceBundle::GetSharedInstance().GetLocalizedString( |
113 IDS_ASH_STATUS_TRAY_VOLUME)); | 136 IDS_ASH_STATUS_TRAY_VOLUME)); |
114 AddChildView(slider_); | 137 AddChildView(slider_); |
115 } | 138 } |
116 | 139 |
117 virtual ~VolumeView() {} | 140 virtual ~VolumeView() {} |
118 | 141 |
119 void SetVolumeLevel(float percent) { | 142 void SetVolumeLevel(float percent) { |
120 // The change in volume will be reflected via accessibility system events, | 143 // The change in volume will be reflected via accessibility system events, |
121 // so we prevent the UI event from being sent here. | 144 // so we prevent the UI event from being sent here. |
122 slider_->set_enable_accessibility_events(false); | 145 slider_->set_enable_accessibility_events(false); |
123 slider_->SetValue(percent); | 146 slider_->SetValue(percent); |
124 // It is possible that the volume was (un)muted, but the actual volume level | 147 // It is possible that the volume was (un)muted, but the actual volume level |
125 // did not change. In that case, setting the value of the slider won't | 148 // did not change. In that case, setting the value of the slider won't |
126 // trigger an update. So explicitly trigger an update. | 149 // trigger an update. So explicitly trigger an update. |
127 icon_->Update(); | 150 icon_->Update(); |
| 151 mute_->Update(); |
128 slider_->set_enable_accessibility_events(true); | 152 slider_->set_enable_accessibility_events(true); |
129 } | 153 } |
130 | 154 |
131 private: | 155 private: |
132 // Overridden from views::View. | 156 // Overridden from views::View. |
133 virtual void OnBoundsChanged(const gfx::Rect& old_bounds) OVERRIDE { | 157 virtual void OnBoundsChanged(const gfx::Rect& old_bounds) OVERRIDE { |
134 int w = width() - slider_->x(); | 158 int w = width() - slider_->x(); |
135 slider_->SetSize(gfx::Size(w, slider_->height())); | 159 slider_->SetSize(gfx::Size(w, slider_->height())); |
136 } | 160 } |
137 | 161 |
138 // Overridden from views::ButtonListener. | 162 // Overridden from views::ButtonListener. |
139 virtual void ButtonPressed(views::Button* sender, | 163 virtual void ButtonPressed(views::Button* sender, |
140 const views::Event& event) OVERRIDE { | 164 const views::Event& event) OVERRIDE { |
141 CHECK(sender == icon_); | 165 CHECK(sender == icon_ || sender == mute_); |
142 ash::SystemTrayDelegate* delegate = | 166 ash::SystemTrayDelegate* delegate = |
143 ash::Shell::GetInstance()->tray_delegate(); | 167 ash::Shell::GetInstance()->tray_delegate(); |
144 delegate->SetAudioMuted(!delegate->IsAudioMuted()); | 168 delegate->SetAudioMuted(!delegate->IsAudioMuted()); |
145 } | 169 } |
146 | 170 |
147 // Overridden from views:SliderListener. | 171 // Overridden from views:SliderListener. |
148 virtual void SliderValueChanged(views::Slider* sender, | 172 virtual void SliderValueChanged(views::Slider* sender, |
149 float value, | 173 float value, |
150 float old_value, | 174 float old_value, |
151 views::SliderChangeReason reason) OVERRIDE { | 175 views::SliderChangeReason reason) OVERRIDE { |
152 if (reason == views::VALUE_CHANGED_BY_USER) { | 176 if (reason == views::VALUE_CHANGED_BY_USER) { |
153 ash::SystemTrayDelegate* delegate = | 177 ash::SystemTrayDelegate* delegate = |
154 ash::Shell::GetInstance()->tray_delegate(); | 178 ash::Shell::GetInstance()->tray_delegate(); |
155 delegate->SetVolumeLevel(value); | 179 delegate->SetVolumeLevel(value); |
156 } | 180 } |
157 icon_->Update(); | 181 icon_->Update(); |
158 } | 182 } |
159 | 183 |
160 VolumeButton* icon_; | 184 VolumeButton* icon_; |
| 185 MuteButton* mute_; |
161 views::Slider* slider_; | 186 views::Slider* slider_; |
162 | 187 |
163 DISALLOW_COPY_AND_ASSIGN(VolumeView); | 188 DISALLOW_COPY_AND_ASSIGN(VolumeView); |
164 }; | 189 }; |
165 | 190 |
166 } // namespace tray | 191 } // namespace tray |
167 | 192 |
168 TrayVolume::TrayVolume() | 193 TrayVolume::TrayVolume() |
169 : TrayImageItem(IDR_AURA_UBER_TRAY_VOLUME_MUTE), | 194 : TrayImageItem(IDR_AURA_UBER_TRAY_VOLUME_MUTE), |
170 volume_view_(NULL), | 195 volume_view_(NULL), |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 percent = 0.0; | 236 percent = 0.0; |
212 volume_view_->SetVolumeLevel(percent); | 237 volume_view_->SetVolumeLevel(percent); |
213 SetDetailedViewCloseDelay(kTrayPopupAutoCloseDelayInSeconds); | 238 SetDetailedViewCloseDelay(kTrayPopupAutoCloseDelayInSeconds); |
214 return; | 239 return; |
215 } | 240 } |
216 PopupDetailedView(kTrayPopupAutoCloseDelayInSeconds, false); | 241 PopupDetailedView(kTrayPopupAutoCloseDelayInSeconds, false); |
217 } | 242 } |
218 | 243 |
219 } // namespace internal | 244 } // namespace internal |
220 } // namespace ash | 245 } // namespace ash |
OLD | NEW |