template class EE::UI::UIDataBind

#include <uidatabind.hpp>

template <typename T>
class UIDataBind {
public:
    // structs

    struct Converter;

    // fields

    std::function<void(const T&newVal)> onValueChangeCb;

    // construction

    UIDataBind();
    UIDataBind(T* t, const std::set<UIWidget*>& widgets, const Converter& converter = UIDataBind<T>::converterDefault(), const std::string& valueKey = "value", const Event::EventType& eventType = Event::OnValueChange);
    UIDataBind(T* t, UIWidget* widget, const Converter& converter = UIDataBind<T>::converterDefault(), const std::string& valueKey = "value", const Event::EventType& eventType = Event::OnValueChange);
    ~UIDataBind();

    // methods

    static Converter converterDefault();
    static Converter converterString();
    static Converter converterBool();
    static std::unique_ptr<UIDataBind<T>> New(T* t, const std::set<UIWidget*>& widgets, const Converter& converter = UIDataBind<T>::converterDefault(), const std::string& valueKey = "value", const Event::EventType& eventType = Event::OnValueChange);
    static std::unique_ptr<UIDataBind<T>> New(T* t, UIWidget* widget, const Converter& converter = UIDataBind<T>::converterDefault(), const std::string& valueKey = "value", const Event::EventType& eventType = Event::OnValueChange);
    void init(T* t, const std::set<UIWidget*>& widgets, const Converter& converter = UIDataBind<T>::converterDefault(), const std::string& valueKey = "value", const Event::EventType& eventType = Event::OnValueChange);
    void set(const T& t);
    const T& get() const;
    void reset();
    void bind(UIWidget* widget);
    void unbind(UIWidget* widget);
    const PropertyDefinition* getPropertyDefinition() const;
    const std::set<UIWidget*>& getWidgets() const;
};