// Copyright (C) 2017 Samy Bensaid // This file is part of the "Nazara Development Kit" // For conditions of distribution and use, see copyright notice in Prerequisites.hpp #pragma once #ifndef NDK_WIDGETS_CHECKBOXWIDGET_HPP #define NDK_WIDGETS_CHECKBOXWIDGET_HPP #include #include #include #include #include #include #include #include namespace Nz { class AbstractTextDrawer; } namespace Ndk { class NDK_API CheckboxWidget : public BaseWidget { friend class Sdk; public: CheckboxWidget(BaseWidget* parent = nullptr); CheckboxWidget(const CheckboxWidget&) = delete; CheckboxWidget(CheckboxWidget&&) = default; ~CheckboxWidget() = default; //virtual CheckboxWidget* Clone() const = 0; inline void EnableAdaptativeMargin(bool enable = true); inline void EnableCheckbox(bool enable = true); inline void EnableTristate(bool enable = true); inline bool IsCheckboxEnabled() const; inline bool IsMarginAdaptative() const; inline bool IsTristateEnabled() const; inline const Nz::Vector2f& GetCheckboxSize() const; inline Nz::Vector2f GetCheckboxBorderSize() const; inline CheckboxState GetState() const; inline float GetTextMargin() const; inline void SetCheckboxSize(const Nz::Vector2f& size); CheckboxState SwitchToNextState(); void SetState(CheckboxState state); inline void SetTextMargin(float margin); void ResizeToContent() override; inline void UpdateText(const Nz::AbstractTextDrawer& drawer); CheckboxWidget& operator=(const CheckboxWidget&) = delete; CheckboxWidget& operator=(CheckboxWidget&&) = default; NazaraSignal(OnStateChanged, const CheckboxWidget* /*checkbox*/); private: static bool Initialize(); static void Uninitialize(); void Layout() override; void UpdateCheckbox(); void OnMouseButtonRelease(int x, int y, Nz::Mouse::Button button) override; inline bool ContainsCheckbox(int x, int y) const; EntityHandle m_checkboxBorderEntity; EntityHandle m_checkboxBackgroundEntity; EntityHandle m_checkboxContentEntity; EntityHandle m_textEntity; Nz::TextureRef m_checkMark; Nz::SpriteRef m_checkboxContentSprite; Nz::SpriteRef m_checkboxBorderSprite; Nz::SpriteRef m_checkboxBackgroundSprite; Nz::TextSpriteRef m_textSprite; static Nz::Color s_backgroundColor; static Nz::Color s_disabledBackgroundColor; static Nz::Color s_disabledBorderColor; static Nz::Color s_borderColor; bool m_adaptativeMargin; bool m_checkboxEnabled; bool m_tristateEnabled; static float s_borderScale; float m_textMargin; CheckboxState m_state; }; } #include #endif // NDK_WIDGETS_CHECKBOXWIDGET_HPP