1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
#include "macro-ref.hpp"
#include "macro.hpp"
namespace advss {
MacroRef::MacroRef(std::string name)
{
_macro = GetWeakMacroByName(name.c_str());
}
void MacroRef::Save(obs_data_t *obj) const
{
if (auto macro = _macro.lock()) {
obs_data_set_string(obj, "macro", macro->Name().c_str());
}
}
void MacroRef::Load(obs_data_t *obj)
{
auto name = obs_data_get_string(obj, "macro");
_postLoadName = name;
_macro = GetWeakMacroByName(name);
}
void MacroRef::PostLoad()
{
_macro = GetWeakMacroByName(_postLoadName.c_str());
}
void MacroRef::operator=(const QString &name)
{
_macro = GetWeakMacroByName(name.toStdString().c_str());
}
void MacroRef::operator=(const std::shared_ptr<Macro> ¯o)
{
_macro = macro;
}
std::shared_ptr<Macro> MacroRef::GetMacro() const
{
return _macro.lock();
}
std::string MacroRef::Name() const
{
if (auto macro = GetMacro()) {
return macro->Name();
}
return "";
}
void SaveMacroList(obs_data_t *obj, const std::vector<MacroRef> ¯os,
const std::string &name)
{
obs_data_array_t *array = obs_data_array_create();
for (auto &m : macros) {
if (!m.GetMacro()) {
continue;
}
obs_data_t *array_obj = obs_data_create();
m.Save(array_obj);
obs_data_array_push_back(array, array_obj);
obs_data_release(array_obj);
}
obs_data_set_array(obj, name.c_str(), array);
obs_data_array_release(array);
}
void LoadMacroList(obs_data_t *obj, std::vector<MacroRef> ¯os,
const std::string &name)
{
obs_data_array_t *array = obs_data_get_array(obj, name.c_str());
size_t count = obs_data_array_count(array);
for (size_t i = 0; i < count; i++) {
obs_data_t *array_obj = obs_data_array_item(array, i);
MacroRef ref;
ref.Load(array_obj);
macros.push_back(ref);
obs_data_release(array_obj);
}
obs_data_array_release(array);
}
} // namespace advss
|