Files
viseq/src/signal-manager.h
T

60 lines
1.4 KiB
C++

#pragma once
#include "graph-manager.h"
#include "node.h"
#include "signal.h"
#include "midi.h"
#include <memory>
#include <mutex>
using namespace VISEQ::GRAPH;
namespace VISEQ::SIGNAL {
typedef std::shared_ptr<Signal> SPTR_Signal;
typedef std::vector<SPTR_Signal> VEC_SPTR_Signal;
class SignalManager : public std::enable_shared_from_this<SignalManager>{
public:
SignalManager() {}
SignalManager(std::shared_ptr<GraphManager> gm, std::mutex *mutex) : mutex(mutex), gm(gm) {}
std::shared_ptr<SignalManager> getPtr(){
return shared_from_this();
}
VISEQ::MIDI::Midi midi;
std::mutex *mutex;
std::shared_ptr<GraphManager> 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<Signal> 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<SignalManager>& G);
friend void to_json(json& j, const std::shared_ptr<SignalManager>& G);
};
}