1// Copyright 2014 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.
4
5#ifndef ASH_SYSTEM_AUDIO_VOLUME_VIEW_H_
6#define ASH_SYSTEM_AUDIO_VOLUME_VIEW_H_
7
8#include "ash/system/tray/actionable_view.h"
9#include "ui/gfx/font.h"
10#include "ui/views/controls/button/button.h"
11#include "ui/views/controls/slider.h"
12
13namespace views {
14class View;
15class ImageView;
16}
17
18namespace ash {
19class HoverHighlightView;
20class SystemTrayItem;
21
22namespace system {
23class TrayAudioDelegate;
24}
25
26namespace tray {
27class BarSeparator;
28class VolumeButton;
29class VolumeSlider;
30
31class VolumeView : public ActionableView,
32                   public views::ButtonListener,
33                   public views::SliderListener {
34 public:
35  VolumeView(SystemTrayItem* owner,
36             system::TrayAudioDelegate* audio_delegate,
37             bool is_default_view);
38
39  virtual ~VolumeView();
40
41  void Update();
42
43  // Sets volume level on slider_, |percent| is ranged from [0.00] to [1.00].
44  void SetVolumeLevel(float percent);
45
46 private:
47  // Updates bar_, device_type_ icon, and more_ buttons.
48  void UpdateDeviceTypeAndMore();
49  void HandleVolumeUp(float percent);
50  void HandleVolumeDown(float percent);
51
52  // Overridden from views::View.
53  virtual void Layout() OVERRIDE;
54
55  // Overridden from views::ButtonListener.
56  virtual void ButtonPressed(views::Button* sender,
57                             const ui::Event& event) OVERRIDE;
58
59  // Overridden from views::SliderListener.
60  virtual void SliderValueChanged(views::Slider* sender,
61                                  float value,
62                                  float old_value,
63                                  views::SliderChangeReason reason) OVERRIDE;
64
65  // Overriden from ActionableView.
66  virtual bool PerformAction(const ui::Event& event) OVERRIDE;
67
68  SystemTrayItem* owner_;
69  system::TrayAudioDelegate* audio_delegate_;
70  VolumeButton* icon_;
71  VolumeSlider* slider_;
72  BarSeparator* bar_;
73  views::ImageView* device_type_;
74  views::ImageView* more_;
75  bool is_default_view_;
76
77  DISALLOW_COPY_AND_ASSIGN(VolumeView);
78};
79
80}  // namespace tray
81}  // namespace ash
82
83#endif  // ASH_SYSTEM_AUDIO_VOLUME_VIEW_H_
84
85