60 lines
1.4 KiB
C++
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);
|
|
|
|
};
|
|
}
|