Home | History | Annotate | Download | only in button
      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