| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef UI_VIEWS_CONTROLS_BUTTON_CHECKBOX_H_ |
| #define UI_VIEWS_CONTROLS_BUTTON_CHECKBOX_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "cc/paint/paint_flags.h" |
| #include "third_party/abseil-cpp/absl/types/optional.h" |
| #include "ui/views/controls/button/label_button.h" |
| #include "ui/views/controls/focus_ring.h" |
| #include "ui/views/metadata/view_factory.h" |
| |
| namespace gfx { |
| struct VectorIcon; |
| } |
| |
| namespace views { |
| |
| // A native themed class representing a checkbox. This class does not use |
| // platform specific objects to replicate the native platforms looks and feel. |
| class VIEWS_EXPORT Checkbox : public LabelButton { |
| public: |
| METADATA_HEADER(Checkbox); |
| |
| explicit Checkbox(const std::u16string& label = std::u16string(), |
| PressedCallback callback = PressedCallback(), |
| int button_context = style::CONTEXT_BUTTON); |
| |
| Checkbox(const Checkbox&) = delete; |
| Checkbox& operator=(const Checkbox&) = delete; |
| |
| ~Checkbox() override; |
| |
| // Sets/Gets whether or not the checkbox is checked. |
| virtual void SetChecked(bool checked); |
| bool GetChecked() const; |
| |
| [[nodiscard]] base::CallbackListSubscription AddCheckedChangedCallback( |
| PropertyChangedCallback callback); |
| |
| void SetMultiLine(bool multi_line); |
| bool GetMultiLine() const; |
| |
| // If the accessible name should be the same as the labelling view's text, |
| // use this. It will set the accessible label relationship and copy the |
| // accessible name from the labelling views's accessible name. Any view with |
| // an accessible name can be used, e.g. a Label, StyledLabel or Link. |
| void SetAssociatedLabel(View* labelling_view); |
| |
| void SetCheckedIconImageColor(SkColor color); |
| |
| // LabelButton: |
| void GetAccessibleNodeData(ui::AXNodeData* node_data) override; |
| gfx::ImageSkia GetImage(ButtonState for_state) const override; |
| std::unique_ptr<LabelButtonBorder> CreateDefaultBorder() const override; |
| |
| protected: |
| // Bitmask constants for GetIconImageColor. |
| enum IconState { CHECKED = 0b1, ENABLED = 0b10 }; |
| |
| // LabelButton: |
| void OnThemeChanged() override; |
| |
| // Returns the path to draw the focus ring around for this Checkbox. |
| virtual SkPath GetFocusRingPath() const; |
| |
| // |icon_state| is a bitmask using the IconState enum. |
| virtual SkColor GetIconImageColor(int icon_state) const; |
| |
| // Gets the vector icon to use based on the current state of |checked_|. |
| virtual const gfx::VectorIcon& GetVectorIcon() const; |
| |
| private: |
| class FocusRingHighlightPathGenerator; |
| |
| // Button: |
| void NotifyClick(const ui::Event& event) override; |
| |
| ui::NativeTheme::Part GetThemePart() const override; |
| void GetExtraParams(ui::NativeTheme::ExtraParams* params) const override; |
| |
| // True if the checkbox is checked. |
| bool checked_ = false; |
| |
| absl::optional<SkColor> checked_icon_image_color_; |
| }; |
| |
| BEGIN_VIEW_BUILDER(VIEWS_EXPORT, Checkbox, LabelButton) |
| VIEW_BUILDER_PROPERTY(bool, Checked) |
| VIEW_BUILDER_PROPERTY(bool, MultiLine) |
| END_VIEW_BUILDER |
| |
| } // namespace views |
| |
| DEFINE_VIEW_BUILDER(VIEWS_EXPORT, Checkbox) |
| |
| #endif // UI_VIEWS_CONTROLS_BUTTON_CHECKBOX_H_ |