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 10 namespace views { 11 12 class Button; 13 class Event; 14 15 // An interface implemented by an object to let it know that a button was 16 // pressed. 17 class 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. 27 class 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