Browse Source

Use Module::params/inputs/outputs indices instead of

ModuleWidget::params/inputs/outputs indices for patch ids
pull/1639/head
Andrew Belt 7 years ago
parent
commit
990068edc9
3 changed files with 75 additions and 22 deletions
  1. +29
    -4
      src/app/ModuleWidget.cpp
  2. +7
    -3
      src/app/ParamWidget.cpp
  3. +39
    -15
      src/app/RackWidget.cpp

+ 29
- 4
src/app/ModuleWidget.cpp View File

@@ -89,6 +89,12 @@ json_t *ModuleWidget::toJson() {
}

void ModuleWidget::fromJson(json_t *rootJ) {
// legacy
int legacy = 0;
json_t *legacyJ = json_object_get(rootJ, "legacy");
if (legacyJ)
legacy = json_integer_value(legacyJ);

// pos
json_t *posJ = json_object_get(rootJ, "pos");
double x, y;
@@ -97,11 +103,30 @@ void ModuleWidget::fromJson(json_t *rootJ) {

// params
json_t *paramsJ = json_object_get(rootJ, "params");
size_t paramId;
size_t i;
json_t *paramJ;
json_array_foreach(paramsJ, paramId, paramJ) {
if (paramId < params.size()) {
params[paramId]->fromJson(paramJ);
json_array_foreach(paramsJ, i, paramJ) {
if (legacy && legacy <= 1) {
// The index in the array we're iterating is the index of the ParamWidget in the params vector.
if (i < params.size()) {
// Create upgraded version of param JSON object
json_t *newParamJ = json_object();
json_object_set(newParamJ, "value", paramJ);
params[i]->fromJson(newParamJ);
json_decref(newParamJ);
}
}
else {
// Get paramId
json_t *paramIdJ = json_object_get(paramJ, "paramId");
if (!paramIdJ)
continue;
int paramId = json_integer_value(paramIdJ);
// Find ParamWidget(s) with paramId
for (ParamWidget *paramWidget : params) {
if (paramWidget->paramId == paramId)
paramWidget->fromJson(paramJ);
}
}
}



+ 7
- 3
src/app/ParamWidget.cpp View File

@@ -6,12 +6,16 @@ namespace rack {


json_t *ParamWidget::toJson() {
json_t *paramJ = json_real(value);
return paramJ;
json_t *rootJ = json_object();
json_object_set_new(rootJ, "paramId", json_integer(paramId));
json_object_set_new(rootJ, "value", json_real(value));
return rootJ;
}

void ParamWidget::fromJson(json_t *rootJ) {
setValue(json_number_value(rootJ));
json_t *valueJ = json_object_get(rootJ, "value");
if (valueJ)
setValue(json_number_value(valueJ));
}

void ParamWidget::randomize() {


+ 39
- 15
src/app/RackWidget.cpp View File

@@ -184,13 +184,8 @@ json_t *RackWidget::toJson() {
int inputModuleId = moduleIds[inputModuleWidget];

// Get output/input ports
auto outputIt = std::find(outputModuleWidget->outputs.begin(), outputModuleWidget->outputs.end(), wireWidget->outputPort);
assert(outputIt != outputModuleWidget->outputs.end());
int outputId = outputIt - outputModuleWidget->outputs.begin();

auto inputIt = std::find(inputModuleWidget->inputs.begin(), inputModuleWidget->inputs.end(), wireWidget->inputPort);
assert(inputIt != inputModuleWidget->inputs.end());
int inputId = inputIt - inputModuleWidget->inputs.begin();
int outputId = wireWidget->outputPort->portId;
int inputId = wireWidget->inputPort->portId;

json_object_set_new(wire, "outputModuleId", json_integer(outputModuleId));
json_object_set_new(wire, "outputId", json_integer(outputId));
@@ -218,9 +213,12 @@ void RackWidget::fromJson(json_t *rootJ) {

// Detect old patches with ModuleWidget::params/inputs/outputs indices.
// (We now use Module::params/inputs/outputs indices.)
bool legacy1 = (startsWith(version, "0.3.") || startsWith(version, "0.4.") || startsWith(version, "0.5.") || version == "" || version == "dev");
if (legacy1) {
info("Converting patch using legacy1 loader");
int legacy = 0;
if (startsWith(version, "0.3.") || startsWith(version, "0.4.") || startsWith(version, "0.5.") || version == "" || version == "dev") {
legacy = 1;
}
if (legacy) {
info("Loading patch using legacy mode %d", legacy);
}

// modules
@@ -230,6 +228,10 @@ void RackWidget::fromJson(json_t *rootJ) {
size_t moduleId;
json_t *moduleJ;
json_array_foreach(modulesJ, moduleId, moduleJ) {
// Set legacy property
if (legacy)
json_object_set_new(moduleJ, "legacy", json_integer(legacy));

json_t *pluginSlugJ = json_object_get(moduleJ, "plugin");
if (!pluginSlugJ) continue;
json_t *modelSlugJ = json_object_get(moduleJ, "model");
@@ -285,15 +287,37 @@ void RackWidget::fromJson(json_t *rootJ) {
"outputModuleId", &outputModuleId, "outputId", &outputId,
"inputModuleId", &inputModuleId, "inputId", &inputId);
if (err) continue;
// Get ports

// Get module widgets
ModuleWidget *outputModuleWidget = moduleWidgets[outputModuleId];
if (!outputModuleWidget) continue;
Port *outputPort = outputModuleWidget->outputs[outputId];
if (!outputPort) continue;
ModuleWidget *inputModuleWidget = moduleWidgets[inputModuleId];
if (!inputModuleWidget) continue;
Port *inputPort = inputModuleWidget->inputs[inputId];
if (!inputPort) continue;

// Get port widgets
Port *outputPort = NULL;
Port *inputPort = NULL;
if (legacy && legacy <= 1) {
outputPort = outputModuleWidget->outputs[outputId];
inputPort = inputModuleWidget->inputs[inputId];
}
else {
for (Port *port : outputModuleWidget->outputs) {
if (port->portId == outputId) {
outputPort = port;
break;
}
}
for (Port *port : inputModuleWidget->inputs) {
if (port->portId == inputId) {
inputPort = port;
break;
}
}
}
if (!outputPort || !inputPort)
continue;

// Create WireWidget
WireWidget *wireWidget = new WireWidget();
wireWidget->outputPort = outputPort;


Loading…
Cancel
Save