diff --git a/ui/click_handler.cpp b/ui/click_handler.cpp index c96abe9..f5129cb 100644 --- a/ui/click_handler.cpp +++ b/ui/click_handler.cpp @@ -154,6 +154,16 @@ auto ClickHandler::getTextEntity() const -> TextEntity { return { EntityType::Invalid }; } +void ClickHandler::setProperty(int id, QVariant value) { + _properties[id] = std::move(value); +} + +const QVariant &ClickHandler::property(int id) const { + static const QVariant kEmpty; + const auto i = _properties.find(id); + return (i != end(_properties)) ? i->second : kEmpty; +} + void ActivateClickHandler( not_null guard, ClickHandlerPtr handler, diff --git a/ui/click_handler.h b/ui/click_handler.h index 4c13c47..9e1b0b9 100644 --- a/ui/click_handler.h +++ b/ui/click_handler.h @@ -7,6 +7,7 @@ #pragma once #include "base/basic_types.h" +#include "base/flat_map.h" #include @@ -62,6 +63,9 @@ public: }; virtual TextEntity getTextEntity() const; + void setProperty(int id, QVariant value); + [[nodiscard]] const QVariant &property(int id) const; + // This method should be called on mouse over a click handler. // It returns true if the active handler was changed or false otherwise. static bool setActive(const ClickHandlerPtr &p, ClickHandlerHost *host = nullptr); @@ -88,6 +92,8 @@ private: static ClickHandlerHost *_activeHost; static ClickHandlerHost *_pressedHost; + base::flat_map _properties; + }; class LeftButtonClickHandler : public ClickHandler {