15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_VIEWS_CONTROLS_BUTTON_BUTTON_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_VIEWS_CONTROLS_BUTTON_BUTTON_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/native_theme/native_theme.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Button; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Event; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An interface implemented by an object to let it know that a button was 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// pressed. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VIEWS_EXPORT ButtonListener { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ButtonPressed(Button* sender, const ui::Event& event) = 0; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ButtonListener() {} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A View representing a button. Depending on the specific type, the button 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// could be implemented by a native control or custom rendered. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VIEWS_EXPORT Button : public View { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Button(); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Button states for various button sub-types. 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum ButtonState { 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) STATE_NORMAL = 0, 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) STATE_HOVERED, 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) STATE_PRESSED, 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) STATE_DISABLED, 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) STATE_COUNT, 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Button styles with associated images and border painters. 42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // TODO(msw): Add Menu, ComboBox, etc. 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum ButtonStyle { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) STYLE_BUTTON = 0, 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) STYLE_TEXTBUTTON, 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) STYLE_COUNT, 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static ButtonState GetButtonStateFrom(ui::NativeTheme::State state); 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetTooltipText(const base::string16& tooltip_text); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tag() const { return tag_; } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_tag(int tag) { tag_ = tag; } 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetAccessibleName(const base::string16& name); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from View: 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetTooltipText(const gfx::Point& p, 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16* tooltip) const OVERRIDE; 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void GetAccessibleState(ui::AXViewState* state) OVERRIDE; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Construct the Button with a Listener. The listener can be NULL. This can be 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // true of buttons that don't have a listener - e.g. menubuttons where there's 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // no default action and checkboxes. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit Button(ButtonListener* listener); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cause the button to notify the listener that a click occurred. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void NotifyClick(const ui::Event& event); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The button's listener. Notified when clicked. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ButtonListener* listener_; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The text shown in a tooltip. 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 tooltip_text_; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Accessibility data. 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 accessible_name_; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The id tag associated with this button. Used to disambiguate buttons in 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the ButtonListener implementation. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tag_; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Button); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_VIEWS_CONTROLS_BUTTON_BUTTON_H_ 92