// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_VIEWS_BUTTON_H_ #define CHROME_VIEWS_BUTTON_H_ #include "chrome/views/base_button.h" #include "skia/include/SkBitmap.h" namespace ChromeViews { class MouseEvent; //////////////////////////////////////////////////////////////////////////////// // // Button // // A simple button class // //////////////////////////////////////////////////////////////////////////////// class Button : public BaseButton { public: // // Create a Button Button(); virtual ~Button(); // // Set the image the button should use for the provided state. virtual void SetImage(ButtonState aState, SkBitmap* anImage); enum HorizontalAlignment { ALIGN_LEFT = 0, ALIGN_CENTER, ALIGN_RIGHT, }; enum VerticalAlignment {ALIGN_TOP = 0, ALIGN_MIDDLE, ALIGN_BOTTOM }; void SetImageAlignment(HorizontalAlignment h_align, VerticalAlignment v_align); // // Computes the minimum size given the current theme and graphics void GetPreferredSize(CSize *result); // Returns the MSAA default action of the current view. The string returned // describes the default action that will occur when executing // IAccessible::DoDefaultAction. bool GetAccessibleDefaultAction(std::wstring* action); // Returns the MSAA role of the current view. The role is what assistive // technologies (ATs) use to determine what behavior to expect from a given // control. bool GetAccessibleRole(VARIANT* role); // Set the tooltip text for this button. void SetTooltipText(const std::wstring& text); // Return the tooltip text currently used by this button. std::wstring GetTooltipText() const; // Overridden from View. virtual bool GetTooltipText(int x, int y, std::wstring* tooltip); protected: // Overridden to render the button. virtual void Paint(ChromeCanvas* canvas); // Returns the image to paint. This is invoked from paint and returns a value // from images. virtual SkBitmap GetImageToPaint(); // Images. SkBitmap images_[kButtonStateCount]; // Alignment State. HorizontalAlignment h_alignment_; VerticalAlignment v_alignment_; // The tooltip text or empty string for none. std::wstring tooltip_text_; DISALLOW_EVIL_CONSTRUCTORS(Button); }; //////////////////////////////////////////////////////////////////////////////// // // ToggleButton // // A togglable button. It swaps out its graphics when toggled. // //////////////////////////////////////////////////////////////////////////////// class ToggleButton : public Button { public: ToggleButton(); virtual ~ToggleButton(); // Overridden from Button. virtual void SetImage(ButtonState aState, SkBitmap* anImage); // Like Button::SetImage(), but to set the graphics used for the // "has been toggled" state. Must be called for each button state // before the button is toggled. void SetToggledImage(ButtonState state, SkBitmap* image); virtual bool GetTooltipText(int x, int y, std::wstring* tooltip); // Set the tooltip text displayed when the button is toggled. void SetToggledTooltipText(const std::wstring& tooltip); // Change the toggled state. void SetToggled(bool toggled); private: // The parent class's images_ member is used for the current images, // and this array is used to hold the alternative images. // We swap between the two when toggling. SkBitmap alternate_images_[kButtonStateCount]; bool toggled_; // The parent class's tooltip_text_ is displayed when not toggled, and // this one is shown when toggled. std::wstring toggled_tooltip_text_; DISALLOW_EVIL_CONSTRUCTORS(ToggleButton); }; } // namespace #endif // CHROME_VIEWS_BUTTON_H_