Files
viseq/src/graph-manager.h
T

90 lines
2.6 KiB
C++
Raw Normal View History

2024-10-30 14:55:24 +01:00
#pragma once
#include "state.h"
2024-11-14 00:55:09 +01:00
#include "vmath.h"
2024-11-01 14:08:27 +01:00
#include "raylib.h"
#include "nlohmann/json.hpp"
#include "midi-node.h"
#include "edge.h"
2024-11-03 03:48:49 +01:00
#include "node.h"
2024-11-01 14:08:27 +01:00
2024-10-30 14:55:24 +01:00
#include <map>
#include <memory>
#include <vector>
2024-10-30 14:55:24 +01:00
using json = nlohmann::json;
2024-11-03 03:48:49 +01:00
using namespace VISEQ::GRAPH::NODES;
using namespace VISEQ::GRAPH::EDGES;
2024-11-03 03:48:49 +01:00
namespace VISEQ::GRAPH {
2024-10-30 14:55:24 +01:00
class GraphManager : public std::enable_shared_from_this<GraphManager>{
2024-12-03 01:25:49 +01:00
private:
NODES::VEC_SPTR_Node nodes;
EDGES::VEC_SPTR_Edge edges;
EDGES::VEC_WPTR_Edge remove_edges;
EDGES::VEC_WPTR_Edge split_edges;
VEC_SPTR_Node selected_nodes;
2024-12-03 01:25:49 +01:00
std::map<NODES::SPTR_Node, int> counter;
2024-12-03 01:25:49 +01:00
std::shared_ptr<APP::State> state = APP::State::get();
2024-10-30 14:55:24 +01:00
2024-11-03 03:48:49 +01:00
public:
2024-10-30 14:55:24 +01:00
2024-11-03 03:48:49 +01:00
GraphManager() {}
2024-11-01 14:08:27 +01:00
2026-01-05 02:56:30 +01:00
std::shared_ptr<GraphManager> getPtr();
int getNodesSize();
void createMidiNode(Vec2Df position);
void createConfigNode(Vec2Df position);
void setMidiPortForAll(int number, bool _state);
void addNode(SPTR_Node node);
void addConnection(WPTR_Node from, WPTR_Node to);
void addToSelection();
void select();
void deselect();
VEC_SPTR_Node getSelection();
void copyNodes(VEC_SPTR_Node _nodes, Vec2Df position);
void copyNodes(std::vector<std::shared_ptr<MidiNode>> _nodes, Vec2Df position);
VEC_SPTR_Node getCopiesOfSelectedNodes();
SPTR_Node copyNode(SPTR_Node n, Vec2Df position);
SPTR_Node copyNode(std::shared_ptr<MidiNode> n, Vec2Df position);
void setNodeMode(int mode);
void cycleModeOfSelectedNodes(bool direction);
2026-01-05 02:56:30 +01:00
void reset();
WPTR_Node getNode(int i);
WPTR_Node getFirstNode();
WPTR_Node getLastNode();
VEC_WPTR_Node getMidiNodes();
NODES::SPTR_Node getRandomNode();
EDGES::SPTR_Edge getRandomEdge();
SPTR_Node getClosestNode(Vec2Df position);
VEC_WPTR_Node getNodesByID(int _id);
WPTR_Edge lastEdge();
WPTR_Node next(WPTR_Node current, WPTR_Node last);
void splitEdge(SPTR_Edge edge);
void splitEdges();
void removeEdge(SPTR_Edge edge);
void removeEdges();
VEC_WPTR_Node getAdjacentNodes(VEC_SPTR_Node selected_nodes);
void removeNodesAndEdges(VEC_SPTR_Node selected_nodes);
void pasteNodesAndEdges(VEC_SPTR_Node nodes, Vec2Df position);
void update();
void drawEdges(Vec2Df mouse_pos, Camera2D cam);
void drawNeighborLines(SPTR_Node node, Vec2Df mouse_pos, Camera2D camera);
void drawNodes(Vec2Df mouse_pos, Camera2D camera);
2024-10-30 14:55:24 +01:00
NLOHMANN_DEFINE_TYPE_INTRUSIVE(GraphManager, nodes, edges, selected_nodes)
2026-01-12 00:16:36 +01:00
friend void from_json(const json& j, std::shared_ptr<GraphManager>& G);
friend void to_json(json& j, const std::shared_ptr<GraphManager>& G);
2024-11-03 03:48:49 +01:00
};
2024-10-30 14:55:24 +01:00
2024-11-03 03:48:49 +01:00
}