#pragma once #include "config-node.h" #include "midi-node.h" #include "graph-item.h" #include "node.h" #include "edge.h" #include "datatypes.h" #include "signal.h" #include #include typedef std::shared_ptr SPTR_GraphItem; typedef std::vector VEC_SPTR_GraphItem; //namespace nlohmann { // template // struct adl_serializer> { // static void to_json(json& j, const std::shared_ptr& opt) { // if (opt) { // j = *opt; // } else { // j = nullptr; // } // } // // static void from_json(const json& j, std::shared_ptr& opt) { // if (j.is_null()) { // opt = nullptr; // } else { // opt.reset(new T(j.get())); // } // } // }; //} namespace VISEQ::GRAPH { inline void to_json(json& j, const GraphItem& G){ std::cout << "Movable" << std::endl; j = json{{"id", G.id}, {"type", G.gItemType}}; } inline void to_json(json& j, const SPTR_GraphItem& G){ j = *G; } } namespace VISEQ::BASE{ inline void to_json(json& j, const Movable& G){ std::cout << "Movable" << std::endl; j = json{{"position", G.position}}; } inline void to_json(json& j, const std::shared_ptr& G){ j = *G; } inline void from_json(const json& j, Movable& G){ std::cout << "Movable" << std::endl; j.at("position").get_to(G.position); } inline void from_json(json& j, const std::shared_ptr& G){ j = *G; } } namespace VISEQ::SIGNAL{ // inline void to_json(json& j, const Signal& G){ // std::map fc = {{"r",G.color.r},{"g",G.color.g},{"b",G.color.b},{"a",G.color.a}}; // j = json{{"color",fc},{"position", G.position},{"radius",G.radius},{"start",G.start.lock()->id},{"next",G.next.lock()->id},{"last",G.last.lock()->id},{"speed",G.speed},{"midi_note_offset",G.midi_note_offset},{"midi_cc_offset",G.midi_cc_offset},{"multiplier",G.multiplier}}; // } // // inline void from_json(const json& j, Signal& S){ // // Color c; // c.r = j.at("color")["r"].get(); // c.g = j.at("color")["g"].get(); // c.b = j.at("color")["b"].get(); // c.a = j.at("color")["a"].get(); // // j.at("position").get_to(S.position); // j.at("speed").get_to(S.speed); // j.at("radius").get_to(S.radius); // j.at("midi_note_offset").get_to(S.midi_note_offset); // j.at("midi_cc_offset").get_to(S.midi_cc_offset); // // S.color = c; // } // // inline void to_json(json& j, const std::shared_ptr& G){ // j = *G; // } // // inline void from_json(const json& j, std::shared_ptr& S){ // S.reset(new Signal(j.get())); // } }