blob: 0be9c7a27cb53f2b2cfc0479eb38b03191194066 [file]
#ifndef _RIVE_SEMANTIC_DATA_BASE_HPP_
#define _RIVE_SEMANTIC_DATA_BASE_HPP_
#include <string>
#include "rive/component.hpp"
#include "rive/core/field_types/core_bool_type.hpp"
#include "rive/core/field_types/core_string_type.hpp"
#include "rive/core/field_types/core_uint_type.hpp"
namespace rive
{
class SemanticDataBase : public Component
{
protected:
typedef Component Super;
public:
static const uint16_t typeKey = 668;
/// Helper to quickly determine if a core object extends another without
/// RTTI at runtime.
bool isTypeOf(uint16_t typeKey) const override
{
switch (typeKey)
{
case SemanticDataBase::typeKey:
case ComponentBase::typeKey:
return true;
default:
return false;
}
}
uint16_t coreType() const override { return typeKey; }
static const uint16_t rolePropertyKey = 982;
static const uint16_t labelPropertyKey = 983;
static const uint16_t valuePropertyKey = 984;
static const uint16_t hintPropertyKey = 985;
static const uint16_t headingLevelPropertyKey = 986;
static const uint16_t traitFlagsPropertyKey = 987;
static const uint16_t stateFlagsPropertyKey = 988;
static const uint16_t isExpandablePropertyKey = 989;
static const uint32_t isExpandableBitmask = 1u << 0;
static const uint16_t isSelectablePropertyKey = 990;
static const uint32_t isSelectableBitmask = 1u << 1;
static const uint16_t isCheckablePropertyKey = 991;
static const uint32_t isCheckableBitmask = 1u << 2;
static const uint16_t isToggleablePropertyKey = 992;
static const uint32_t isToggleableBitmask = 1u << 3;
static const uint16_t isRequirablePropertyKey = 993;
static const uint32_t isRequirableBitmask = 1u << 4;
static const uint16_t isEnablablePropertyKey = 994;
static const uint32_t isEnablableBitmask = 1u << 5;
static const uint16_t isFocusablePropertyKey = 995;
static const uint32_t isFocusableBitmask = 1u << 6;
static const uint16_t isExpandedPropertyKey = 996;
static const uint32_t isExpandedBitmask = 1u << 0;
static const uint16_t isSelectedPropertyKey = 997;
static const uint32_t isSelectedBitmask = 1u << 1;
static const uint16_t isCheckedPropertyKey = 998;
static const uint32_t isCheckedBitmask = 1u << 2;
static const uint16_t isMixedPropertyKey = 999;
static const uint32_t isMixedBitmask = 1u << 3;
static const uint16_t isToggledPropertyKey = 1000;
static const uint32_t isToggledBitmask = 1u << 4;
static const uint16_t isRequiredPropertyKey = 1001;
static const uint32_t isRequiredBitmask = 1u << 5;
static const uint16_t isDisabledPropertyKey = 1002;
static const uint32_t isDisabledBitmask = 1u << 6;
static const uint16_t isFocusedPropertyKey = 1003;
static const uint32_t isFocusedBitmask = 1u << 7;
static const uint16_t isHiddenPropertyKey = 1004;
static const uint32_t isHiddenBitmask = 1u << 8;
static const uint16_t isLiveRegionPropertyKey = 1005;
static const uint32_t isLiveRegionBitmask = 1u << 9;
static const uint16_t isReadOnlyPropertyKey = 1006;
static const uint32_t isReadOnlyBitmask = 1u << 10;
static const uint16_t isModalPropertyKey = 1007;
static const uint32_t isModalBitmask = 1u << 11;
static const uint16_t isObscuredPropertyKey = 1008;
static const uint32_t isObscuredBitmask = 1u << 12;
static const uint16_t isMultilinePropertyKey = 1009;
static const uint32_t isMultilineBitmask = 1u << 13;
protected:
uint32_t m_Role = 0;
std::string m_Label = "";
std::string m_Value = "";
std::string m_Hint = "";
uint32_t m_HeadingLevel = 0;
uint32_t m_TraitFlags = 0;
uint32_t m_StateFlags = 0;
public:
inline uint32_t role() const { return m_Role; }
void role(uint32_t value)
{
if (m_Role == value)
{
return;
}
m_Role = value;
roleChanged();
}
inline const std::string& label() const { return m_Label; }
void label(std::string value)
{
if (m_Label == value)
{
return;
}
m_Label = value;
labelChanged();
}
inline const std::string& value() const { return m_Value; }
void value(std::string value)
{
if (m_Value == value)
{
return;
}
m_Value = value;
valueChanged();
}
inline const std::string& hint() const { return m_Hint; }
void hint(std::string value)
{
if (m_Hint == value)
{
return;
}
m_Hint = value;
hintChanged();
}
inline uint32_t headingLevel() const { return m_HeadingLevel; }
void headingLevel(uint32_t value)
{
if (m_HeadingLevel == value)
{
return;
}
m_HeadingLevel = value;
headingLevelChanged();
}
inline uint32_t traitFlags() const { return m_TraitFlags; }
void traitFlags(uint32_t value)
{
if (m_TraitFlags == value)
{
return;
}
m_TraitFlags = value;
traitFlagsChanged();
}
inline uint32_t stateFlags() const { return m_StateFlags; }
void stateFlags(uint32_t value)
{
if (m_StateFlags == value)
{
return;
}
m_StateFlags = value;
stateFlagsChanged();
}
Core* clone() const override;
void copy(const SemanticDataBase& object)
{
m_Role = object.m_Role;
m_Label = object.m_Label;
m_Value = object.m_Value;
m_Hint = object.m_Hint;
m_HeadingLevel = object.m_HeadingLevel;
m_TraitFlags = object.m_TraitFlags;
m_StateFlags = object.m_StateFlags;
Component::copy(object);
}
bool deserialize(uint16_t propertyKey, BinaryReader& reader) override
{
switch (propertyKey)
{
case rolePropertyKey:
m_Role = CoreUintType::deserialize(reader);
return true;
case labelPropertyKey:
m_Label = CoreStringType::deserialize(reader);
return true;
case valuePropertyKey:
m_Value = CoreStringType::deserialize(reader);
return true;
case hintPropertyKey:
m_Hint = CoreStringType::deserialize(reader);
return true;
case headingLevelPropertyKey:
m_HeadingLevel = CoreUintType::deserialize(reader);
return true;
case traitFlagsPropertyKey:
m_TraitFlags = CoreUintType::deserialize(reader);
return true;
case stateFlagsPropertyKey:
m_StateFlags = CoreUintType::deserialize(reader);
return true;
}
return Component::deserialize(propertyKey, reader);
}
protected:
virtual void roleChanged() {}
virtual void labelChanged() {}
virtual void valueChanged() {}
virtual void hintChanged() {}
virtual void headingLevelChanged() {}
virtual void traitFlagsChanged() {}
virtual void stateFlagsChanged() {}
};
} // namespace rive
#endif