1// Copyright (c) 2011 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 UI_VIEWS_CONTROLS_BUTTON_BUTTON_H_
6#define UI_VIEWS_CONTROLS_BUTTON_BUTTON_H_
7
8#include "ui/views/view.h"
9
10namespace views {
11
12class Button;
13class Event;
14
15// An interface implemented by an object to let it know that a button was
16// pressed.
17class VIEWS_EXPORT ButtonListener {
18 public:
19  virtual void ButtonPressed(Button* sender, const ui::Event& event) = 0;
20
21 protected:
22  virtual ~ButtonListener() {}
23};
24
25// A View representing a button. Depending on the specific type, the button
26// could be implemented by a native control or custom rendered.
27class VIEWS_EXPORT Button : public View {
28 public:
29  virtual ~Button();
30
31  // Button states for various button sub-types.
32  enum ButtonState {
33    STATE_NORMAL = 0,
34    STATE_HOVERED,
35    STATE_PRESSED,
36    STATE_DISABLED,
37    STATE_COUNT,
38  };
39
40  // Button styles with associated images and border painters.
41  // TODO(msw): Add Menu, ComboBox, etc.
42  enum ButtonStyle {
43    STYLE_BUTTON = 0,
44    STYLE_TEXTBUTTON,
45    STYLE_NATIVE_TEXTBUTTON,
46    STYLE_COUNT,
47  };
48
49  void SetTooltipText(const string16& tooltip_text);
50
51  int tag() const { return tag_; }
52  void set_tag(int tag) { tag_ = tag; }
53
54  void SetAccessibleName(const string16& name);
55
56  // Overridden from View:
57  virtual bool GetTooltipText(const gfx::Point& p,
58                              string16* tooltip) const OVERRIDE;
59  virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
60
61 protected:
62  // Construct the Button with a Listener. The listener can be NULL. This can be
63  // true of buttons that don't have a listener - e.g. menubuttons where there's
64  // no default action and checkboxes.
65  explicit Button(ButtonListener* listener);
66
67  // Cause the button to notify the listener that a click occurred.
68  virtual void NotifyClick(const ui::Event& event);
69
70  // The button's listener. Notified when clicked.
71  ButtonListener* listener_;
72
73 private:
74  // The text shown in a tooltip.
75  string16 tooltip_text_;
76
77  // Accessibility data.
78  string16 accessible_name_;
79
80  // The id tag associated with this button. Used to disambiguate buttons in
81  // the ButtonListener implementation.
82  int tag_;
83
84  DISALLOW_COPY_AND_ASSIGN(Button);
85};
86
87}  // namespace views
88
89#endif  // UI_VIEWS_CONTROLS_BUTTON_BUTTON_H_
90