1// Copyright (c) 2013 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_TRAY_THROBBER_VIEW_H_
6#define ASH_SYSTEM_TRAY_THROBBER_VIEW_H_
7
8#include "ui/gfx/size.h"
9#include "ui/views/controls/throbber.h"
10#include "ui/views/view.h"
11
12namespace ash {
13namespace internal {
14
15// A SmoothedThrobber with tooltip.
16class SystemTrayThrobber : public views::SmoothedThrobber {
17 public:
18  SystemTrayThrobber(int frame_delay_ms);
19  virtual ~SystemTrayThrobber();
20
21  void SetTooltipText(const base::string16& tooltip_text);
22
23  // Overriden from views::View.
24  virtual bool GetTooltipText(
25        const gfx::Point& p, base::string16* tooltip) const OVERRIDE;
26
27 private:
28  // The current tooltip text.
29  base::string16 tooltip_text_;
30
31  DISALLOW_COPY_AND_ASSIGN(SystemTrayThrobber);
32};
33
34// A View containing a SystemTrayThrobber with animation for starting/stopping.
35class ThrobberView : public views::View {
36 public:
37  ThrobberView();
38  virtual ~ThrobberView();
39
40  void Start();
41  void Stop();
42  void SetTooltipText(const base::string16& tooltip_text);
43
44  // Overriden from views::View.
45  virtual gfx::Size GetPreferredSize() OVERRIDE;
46  virtual void Layout() OVERRIDE;
47  virtual bool GetTooltipText(
48      const gfx::Point& p, base::string16* tooltip) const OVERRIDE;
49
50 private:
51  // Schedules animation for starting/stopping throbber.
52  void ScheduleAnimation(bool start_throbber);
53
54  SystemTrayThrobber* throbber_;
55
56  // The current tooltip text.
57  base::string16 tooltip_text_;
58
59  DISALLOW_COPY_AND_ASSIGN(ThrobberView);
60};
61
62}  // namespace internal
63}  // namespace ash
64
65#endif  // ASH_SYSTEM_TRAY_THROBBER_VIEW_H_
66