blob: cb523b13c38a241177c41ccf8edf14fbad9fbaf6 [file] [log] [blame]
#ifndef _RIVE_DATA_CONTEXT_HPP_
#define _RIVE_DATA_CONTEXT_HPP_
#include "rive/viewmodel/viewmodel_instance_value.hpp"
#include "rive/viewmodel/viewmodel_instance.hpp"
#include "rive/data_resolver.hpp"
#include "rive/refcnt.hpp"
namespace rive
{
class DataBindPath;
class DataContext : public RefCnt<DataContext>
{
private:
rcp<DataContext> m_Parent = nullptr;
rcp<ViewModelInstance> m_ViewModelInstance;
public:
DataContext(rcp<ViewModelInstance> viewModelInstance);
rcp<DataContext> parent() { return m_Parent; }
void parent(rcp<DataContext> value) { m_Parent = value; }
ViewModelInstanceValue* getViewModelProperty(
const std::vector<uint32_t> path) const;
ViewModelInstanceValue* getRelativeViewModelProperty(
const std::vector<uint32_t> path,
DataResolver* resolver) const;
ViewModelInstanceValue* getViewModelProperty(DataBindPath* dataBindPath);
rcp<ViewModelInstance> getViewModelInstance(
const std::vector<uint32_t> path) const;
rcp<ViewModelInstance> getViewModelInstance(DataBindPath*) const;
rcp<ViewModelInstance> getRelativeViewModelInstance(
const std::vector<uint32_t> path,
DataResolver* resolver) const;
void viewModelInstance(rcp<ViewModelInstance> value);
void advanced();
rcp<ViewModelInstance> viewModelInstance() { return m_ViewModelInstance; };
rcp<ViewModelInstance> rootViewModelInstance()
{
if (m_Parent)
{
return m_Parent->rootViewModelInstance();
}
return m_ViewModelInstance;
};
ViewModelInstanceValue* viewModelValue()
{
if (m_Parent)
{
return m_Parent->viewModelValue();
}
return nullptr;
}
};
} // namespace rive
#endif