#pragma once #include "graph-manager.h" #include "node.h" #include "signal.h" #include "midi.h" #include using namespace VISEQ::GRAPH; namespace VISEQ::SIGNAL { typedef std::shared_ptr SPTR_Signal; typedef std::vector VEC_SPTR_Signal; class SignalManager : public std::enable_shared_from_this{ public: SignalManager() {} SignalManager(std::shared_ptr gm, std::mutex *mutex) : mutex(mutex), gm(gm) {} std::shared_ptr getPtr(){ return shared_from_this(); } VISEQ::MIDI::Midi midi; std::mutex *mutex; std::shared_ptr gm; VEC_SPTR_Signal signals; VEC_SPTR_Signal erase_signals; bool loop = true; bool play = false; void pause(); void stop(); void start(); void reset(); void startSignalThread(); void stopSignalThread(); void addSignalAtNode(WPTR_Node node); void rerouteSignal(VEC_SPTR_Node nodes, VEC_WPTR_Node adjacent_nodes); void rebaseSignal(VEC_SPTR_Node nodes); void removeSignal(std::shared_ptr s); void updateSignals(); void drawSignals(Vec2Df mouse_pos, Camera2D camera); NLOHMANN_DEFINE_TYPE_INTRUSIVE(SignalManager, signals) friend void from_json(const json& j, std::shared_ptr& G); friend void to_json(json& j, const std::shared_ptr& G); }; }