Browse Source

Add id to Wire

tags/v1.0.0
Andrew Belt 6 years ago
parent
commit
94d34c51fa
4 changed files with 24 additions and 13 deletions
  1. +1
    -1
      include/engine/Module.hpp
  2. +1
    -0
      include/engine/Wire.hpp
  3. +13
    -9
      src/app/RackWidget.cpp
  4. +9
    -3
      src/engine/Engine.cpp

+ 1
- 1
include/engine/Module.hpp View File

@@ -13,7 +13,7 @@ namespace rack {


struct Module {
int id = -1;
int id = 0;
std::vector<Param> params;
std::vector<Input> inputs;
std::vector<Output> outputs;


+ 1
- 0
include/engine/Wire.hpp View File

@@ -7,6 +7,7 @@ namespace rack {


struct Wire {
int id = 0;
Module *outputModule = NULL;
int outputId;
Module *inputModule = NULL;


+ 13
- 9
src/app/RackWidget.cpp View File

@@ -235,7 +235,7 @@ json_t *RackWidget::toJson() {
json_object_set_new(rootJ, "modules", modulesJ);

// wires
json_t *wires = json_array();
json_t *wiresJ = json_array();
for (Widget *w : wireContainer->children) {
WireWidget *wireWidget = dynamic_cast<WireWidget*>(w);
assert(wireWidget);
@@ -245,20 +245,24 @@ json_t *RackWidget::toJson() {
// Only serialize WireWidgets connected on both ends
if (!(outputPort && inputPort))
continue;

Wire *wire = wireWidget->wire;
assert(wire);
// wire
json_t *wire = wireWidget->toJson();
json_t *wireJ = wireWidget->toJson();

assert(outputPort->module);
assert(inputPort->module);

json_object_set_new(wire, "outputModuleId", json_integer(outputPort->module->id));
json_object_set_new(wire, "outputId", json_integer(outputPort->portId));
json_object_set_new(wire, "inputModuleId", json_integer(inputPort->module->id));
json_object_set_new(wire, "inputId", json_integer(inputPort->portId));
json_object_set_new(wireJ, "id", json_integer(wire->id));
json_object_set_new(wireJ, "outputModuleId", json_integer(outputPort->module->id));
json_object_set_new(wireJ, "outputId", json_integer(outputPort->portId));
json_object_set_new(wireJ, "inputModuleId", json_integer(inputPort->module->id));
json_object_set_new(wireJ, "inputId", json_integer(inputPort->portId));

json_array_append_new(wires, wire);
json_array_append_new(wiresJ, wireJ);
}
json_object_set_new(rootJ, "wires", wires);
json_object_set_new(rootJ, "wires", wiresJ);

return rootJ;
}
@@ -306,7 +310,7 @@ void RackWidget::fromJson(json_t *rootJ) {
if (moduleWidget) {
// id
json_t *idJ = json_object_get(moduleJ, "id");
int id = -1;
int id = 0;
if (idJ)
id = json_integer_value(idJ);
// pos


+ 9
- 3
src/engine/Engine.cpp View File

@@ -52,7 +52,8 @@ struct Engine::Internal {

Module *resetModule = NULL;
Module *randomizeModule = NULL;
int nextModuleId = 0;
int nextModuleId = 1;
int nextWireId = 1;

// Parameter smoothing
Module *smoothModule = NULL;
@@ -218,7 +219,7 @@ void Engine::addModule(Module *module) {
VIPLock vipLock(internal->vipMutex);
std::lock_guard<std::mutex> lock(internal->mutex);
// Set ID
assert(module->id == -1);
assert(module->id == 0);
module->id = internal->nextModuleId++;
// Check that the module is not already added
auto it = std::find(modules.begin(), modules.end(), module);
@@ -245,7 +246,7 @@ void Engine::removeModule(Module *module) {
// Remove the module
modules.erase(it);
// Remove id
module->id = -1;
module->id = 0;
}

void Engine::resetModule(Module *module) {
@@ -285,6 +286,9 @@ void Engine::addWire(Wire *wire) {
assert(wire2 != wire);
assert(!(wire2->inputModule == wire->inputModule && wire2->inputId == wire->inputId));
}
// Set ID
assert(wire->id == 0);
wire->id = internal->nextWireId++;
// Add the wire
wires.push_back(wire);
Engine_updateActive(this);
@@ -302,6 +306,8 @@ void Engine::removeWire(Wire *wire) {
// Remove the wire
wires.erase(it);
Engine_updateActive(this);
// Remove ID
wire->id = 0;
}

void Engine::setParam(Module *module, int paramId, float value) {


Loading…
Cancel
Save