Skip to content

Commit

Permalink
Use parentRowNr for childVars
Browse files Browse the repository at this point in the history
AppEffects: setEffect: set parentRowNr (WIP)

SysModFiles: drSize change to progress type

SysModModel:
- changeFun: do not change to rowNr 0
- add jsonToChar

SysModUI
- add parentRowNr (static ;-( )
- remove rowNr from initVar functions
- initVarAndUpdate: use parentRowNr (WIP)
- initVarAndUpdate: do not change to rowNr 0
- callVarFun: default no rowNr and f_changeFun
  • Loading branch information
ewowi committed Feb 11, 2024
1 parent 20c105b commit ccccbaa
Show file tree
Hide file tree
Showing 22 changed files with 186 additions and 175 deletions.
2 changes: 1 addition & 1 deletion data/model.json
Original file line number Diff line number Diff line change
Expand Up @@ -735,7 +735,7 @@
"max": 32
},
{
"id": "mdlSucces",
"id": "mdlSuccess",
"type": "checkbox",
"ro": true,
"o": 106,
Expand Down
100 changes: 50 additions & 50 deletions src/App/AppEffects.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ class Effect {

virtual void controls(JsonObject parentVar, Leds &leds) {}

void addPalette(JsonObject parentVar, uint8_t value, uint8_t rowNr) {
JsonObject currentVar = ui->initSelect(parentVar, "pal", value, rowNr, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
void addPalette(JsonObject parentVar, uint8_t value) {
JsonObject currentVar = ui->initSelect(parentVar, "pal", value, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
case f_ValueFun:
mdl->setValue(var, 4, rowNr); //4 is default
return true;
Expand Down Expand Up @@ -131,9 +131,9 @@ class SolidEffect: public Effect {
leds.fill_solid(color);
}
void controls(JsonObject parentVar, Leds &leds) {
ui->initSlider(parentVar, "Red", 182, leds.rowNr);
ui->initSlider(parentVar, "Green", 15, leds.rowNr);
ui->initSlider(parentVar, "Blue", 98, leds.rowNr);
ui->initSlider(parentVar, "Red", 182);
ui->initSlider(parentVar, "Green", 15);
ui->initSlider(parentVar, "Blue", 98);
}
};

Expand Down Expand Up @@ -178,7 +178,7 @@ class SinelonEffect: public Effect {
leds[pos] = leds.getPixelColor(pos) + CHSV( gHue, 255, 192);
}
void controls(JsonObject parentVar, Leds &leds) {
ui->initSlider(parentVar, "BPM", 60, leds.rowNr);
ui->initSlider(parentVar, "BPM", 60);
}
}; //Sinelon

Expand All @@ -197,14 +197,14 @@ class RunningEffect: public Effect {
// leds[leds.nrOfLeds -1 - pos2] = CHSV( gHue, 255, 192); //make sure the right physical leds get their value
}
void controls(JsonObject parentVar, Leds &leds) {
ui->initSlider(parentVar, "BPM", 60, leds.rowNr, 0, 255, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
ui->initSlider(parentVar, "BPM", 60, 0, 255, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
case f_UIFun:
web->addResponse(var["id"], "comment", "in BPM!");
return true;
default: return false;
}});
//tbd: check if memory is freed!
ui->initSlider(parentVar, "fade", 128, leds.rowNr);
ui->initSlider(parentVar, "fade", 128);
}
};

Expand Down Expand Up @@ -238,7 +238,7 @@ class BPMEffect: public Effect {
}
}
void controls(JsonObject parentVar, Leds &leds) {
addPalette(parentVar, 4, leds.rowNr);
addPalette(parentVar, 4);
}
};

Expand Down Expand Up @@ -282,7 +282,7 @@ class Ripples3DEffect: public Effect {
}
}
void controls(JsonObject parentVar, Leds &leds) {
ui->initSlider(parentVar, "interval", 128, leds.rowNr);
ui->initSlider(parentVar, "interval", 128);
}
};

Expand Down Expand Up @@ -347,10 +347,10 @@ class Frizzles2D: public Effect {
leds.blur2d(mdl->getValue("blur", leds.rowNr));
}
void controls(JsonObject parentVar, Leds &leds) {
addPalette(parentVar, 4, leds.rowNr);
ui->initSlider(parentVar, "BPM", 60, leds.rowNr);
ui->initSlider(parentVar, "intensity", 128, leds.rowNr);
ui->initSlider(parentVar, "blur", 128, leds.rowNr);
addPalette(parentVar, 4);
ui->initSlider(parentVar, "BPM", 60);
ui->initSlider(parentVar, "intensity", 128);
ui->initSlider(parentVar, "blur", 128);
}
}; // Frizzles2D

Expand Down Expand Up @@ -379,8 +379,8 @@ class Lines2D: public Effect {
}

void controls(JsonObject parentVar, Leds &leds) {
ui->initSlider(parentVar, "BPM", 60, leds.rowNr);
ui->initCheckBox(parentVar, "Vertical", true, leds.rowNr);
ui->initSlider(parentVar, "BPM", 60);
ui->initCheckBox(parentVar, "Vertical", true);
}
}; // Lines2D

Expand Down Expand Up @@ -439,8 +439,8 @@ class DistortionWaves2D: public Effect {
}
}
void controls(JsonObject parentVar, Leds &leds) {
ui->initSlider(parentVar, "Speed", 128, leds.rowNr);
ui->initSlider(parentVar, "scale", 128, leds.rowNr);
ui->initSlider(parentVar, "Speed", 128);
ui->initSlider(parentVar, "scale", 128);
}
}; // DistortionWaves2D

Expand Down Expand Up @@ -510,12 +510,11 @@ class Octopus2D: public Effect {
}
}
void controls(JsonObject parentVar, Leds &leds) {
addPalette(parentVar, 4, leds.rowNr);
ui->initSlider(parentVar, "Speed", 128, leds.rowNr, 1, 255); //start with speed 1
ui->initSlider(parentVar, "Offset X", 128, leds.rowNr);
ui->initSlider(parentVar, "Offset Y", 128, leds.rowNr);
USER_PRINTF("Legs %d\n", leds.rowNr);
ui->initSlider(parentVar, "Legs", 4, leds.rowNr, 1, 8);
addPalette(parentVar, 4);
ui->initSlider(parentVar, "Speed", 128, 1, 255); //start with speed 1
ui->initSlider(parentVar, "Offset X", 128);
ui->initSlider(parentVar, "Offset Y", 128);
ui->initSlider(parentVar, "Legs", 4, 1, 8);
}
}; // Octopus2D

Expand Down Expand Up @@ -562,11 +561,11 @@ class Lissajous2D: public Effect {
}
}
void controls(JsonObject parentVar, Leds &leds) {
addPalette(parentVar, 4, leds.rowNr);
ui->initSlider(parentVar, "X frequency", 64, leds.rowNr);
ui->initSlider(parentVar, "Fade rate", 128, leds.rowNr);
ui->initSlider(parentVar, "Speed", 128, leds.rowNr);
ui->initCheckBox(parentVar, "Smooth", false, leds.rowNr);
addPalette(parentVar, 4);
ui->initSlider(parentVar, "X frequency", 64);
ui->initSlider(parentVar, "Fade rate", 128);
ui->initSlider(parentVar, "Speed", 128);
ui->initCheckBox(parentVar, "Smooth", false);
}
}; // Lissajous2D

Expand Down Expand Up @@ -647,9 +646,9 @@ class BouncingBalls1D: public Effect {
}

void controls(JsonObject parentVar, Leds &leds) {
addPalette(parentVar, 4, leds.rowNr);
ui->initSlider(parentVar, "gravity", 128, leds.rowNr);
ui->initSlider(parentVar, "balls", 8, leds.rowNr, 1, 16);
addPalette(parentVar, 4);
ui->initSlider(parentVar, "gravity", 128);
ui->initSlider(parentVar, "balls", 8, 1, 16);
}
}; // BouncingBalls2D

Expand Down Expand Up @@ -704,9 +703,9 @@ class ScrollingText2D: public Effect {

}
void controls(JsonObject parentVar, Leds &leds) {
ui->initText(parentVar, "text", "StarMod", leds.rowNr);
ui->initSlider(parentVar, "Speed", 128, leds.rowNr);
ui->initSelect(parentVar, "font", 0, leds.rowNr, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
ui->initText(parentVar, "text", "StarMod");
ui->initSlider(parentVar, "Speed", 128);
ui->initSelect(parentVar, "font", 0, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
case f_UIFun: {
JsonArray select = web->addResponseA(var["id"], "options");
select.add("4x6");
Expand Down Expand Up @@ -820,11 +819,11 @@ class GEQEffect:public Effect {
}

void controls(JsonObject parentVar, Leds &leds) {
addPalette(parentVar, 4, leds.rowNr);
ui->initSlider(parentVar, "fadeOut", 255, leds.rowNr);
ui->initSlider(parentVar, "ripple", 128, leds.rowNr);
ui->initCheckBox(parentVar, "colorBars", false, leds.rowNr);
ui->initCheckBox(parentVar, "smoothBars", true, leds.rowNr);
addPalette(parentVar, 4);
ui->initSlider(parentVar, "fadeOut", 255);
ui->initSlider(parentVar, "ripple", 128);
ui->initCheckBox(parentVar, "colorBars", false);
ui->initCheckBox(parentVar, "smoothBars", true);

// Nice an effect can register it's own DMX channel, but not a fan of repeating the range and type of the param

Expand Down Expand Up @@ -880,8 +879,8 @@ class AudioRings:public RingEffect {
}

void controls(JsonObject parentVar, Leds &leds) {
addPalette(parentVar, 4, leds.rowNr);
ui->initCheckBox(parentVar, "inWards", true, leds.rowNr);
addPalette(parentVar, 4);
ui->initCheckBox(parentVar, "inWards", true);
}
};

Expand Down Expand Up @@ -940,11 +939,11 @@ class FreqMatrix:public Effect {
}

void controls(JsonObject parentVar, Leds &leds) {
ui->initSlider(parentVar, "Speed", 255, leds.rowNr);
ui->initSlider(parentVar, "Sound effect", 128, leds.rowNr);
ui->initSlider(parentVar, "Low bin", 18, leds.rowNr);
ui->initSlider(parentVar, "High bin", 48, leds.rowNr);
ui->initSlider(parentVar, "Sensivity", 30, leds.rowNr, 10, 100);
ui->initSlider(parentVar, "Speed", 255);
ui->initSlider(parentVar, "Sound effect", 128);
ui->initSlider(parentVar, "Low bin", 18);
ui->initSlider(parentVar, "High bin", 48);
ui->initSlider(parentVar, "Sensivity", 30, 10, 100);
}
};

Expand Down Expand Up @@ -1031,9 +1030,9 @@ class Effects {
bool setEffect(Leds &leds, JsonObject var, uint8_t rowNr) {
bool doMap = false;

leds.fx = mdl->getValue(var, leds.rowNr);
leds.fx = mdl->getValue(var, rowNr);

USER_PRINTF("setEffect l:%d %d\n", leds.rowNr, leds.fx);
USER_PRINTF("setEffect fx[%d]: %d\n", rowNr, leds.fx);

if (leds.fx < effects.size()) {

Expand All @@ -1059,15 +1058,16 @@ class Effects {

sharedData.clear(); //make sure all values are 0


for (JsonObject var: var["n"].as<JsonArray>()) { //for all controls
if (var["o"].as<int>() >= 0) { //post init
var["o"] = -var["o"].as<int>(); // set all negative
}
}

Effect* effect = effects[leds.fx];
ui->parentRowNr = rowNr;
effect->controls(var, leds); //new controls are positive
ui->parentRowNr = UINT8_MAX;

effect->setup(leds); //if changed then run setup once (like call==0 in WLED)

Expand Down
18 changes: 6 additions & 12 deletions src/App/AppModFixture.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class AppModFixture:public SysModule {
parentVar = ui->initAppMod(parentVar, name);
if (parentVar["o"] > -1000) parentVar["o"] = -1000; //set default order. Don't use auto generated order as order can be changed in the ui (WIP)

JsonObject currentVar = ui->initCheckBox(parentVar, "on", true, UINT8_MAX, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
JsonObject currentVar = ui->initCheckBox(parentVar, "on", true, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
case f_UIFun:
web->addResponse(var["id"], "label", "On/Off");
return true;
Expand All @@ -30,7 +30,7 @@ class AppModFixture:public SysModule {
currentVar["stage"] = true;

//logarithmic slider (10)
currentVar = ui->initSlider(parentVar, "bri", 10, UINT8_MAX, 0, 255, false , [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
currentVar = ui->initSlider(parentVar, "bri", 10, 0, 255, false , [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun

case f_UIFun:
web->addResponse(var["id"], "label", "Brightness");
Expand Down Expand Up @@ -84,7 +84,7 @@ class AppModFixture:public SysModule {
default: return false;
}});

ui->initSelect(parentVar, "fixture", lds->fixture.fixtureNr, UINT8_MAX, false ,[](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
ui->initSelect(parentVar, "fixture", lds->fixture.fixtureNr, false ,[](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun

case f_UIFun:
{
Expand Down Expand Up @@ -116,7 +116,7 @@ class AppModFixture:public SysModule {
default: return false;
}}); //fixture

ui->initCoord3D(parentVar, "fixSize", lds->fixture.size, UINT8_MAX, 0, UINT16_MAX, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
ui->initCoord3D(parentVar, "fixSize", lds->fixture.size, 0, UINT16_MAX, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
case f_UIFun:
web->addResponse(var["id"], "label", "Size");
// web->addResponse(var["id"], "value", fixture.size);
Expand All @@ -134,38 +134,32 @@ class AppModFixture:public SysModule {
}});

ui->initNumber(parentVar, "fps", lds->fps, 1, 999, false , [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun

case f_UIFun:
web->addResponse(var["id"], "comment", "Frames per second");
return true;

case f_ChangeFun:
lds->fps = var["value"];
return true;

default: return false;
}});

ui->initText(parentVar, "realFps", nullptr, UINT8_MAX, 10, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
ui->initText(parentVar, "realFps", nullptr, 10, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
case f_UIFun:
web->addResponseV(var["id"], "comment", "f(%d leds)", lds->fixture.nrOfLeds);
return true;
default: return false;
}});

#ifdef STARMOD_USERMOD_WLEDAUDIO
ui->initCheckBox(parentVar, "mHead", false, UINT8_MAX, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun

ui->initCheckBox(parentVar, "mHead", false, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
case f_UIFun:
web->addResponse(var["id"], "label", "Moving heads");
web->addResponse(var["id"], "comment", "Move on GEQ");
return true;

case f_ChangeFun:
if (!var["value"])
lds->fixture.head = {0,0,0};
return true;

default: return false;
}});
#endif
Expand Down
12 changes: 6 additions & 6 deletions src/App/AppModFixtureGen.h
Original file line number Diff line number Diff line change
Expand Up @@ -535,7 +535,7 @@ class AppModFixtureGen:public SysModule {
parentVar = ui->initUserMod(parentVar, name);
if (parentVar["o"] > -1000) parentVar["o"] = -1200; //set default order. Don't use auto generated order as order can be changed in the ui (WIP)

ui->initSelect(parentVar, "fixtureGen", 0, UINT8_MAX, false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
ui->initSelect(parentVar, "fixtureGen", 0, false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun

case f_UIFun: {
web->addResponse(var["id"], "label", "Fixture");
Expand Down Expand Up @@ -565,7 +565,7 @@ class AppModFixtureGen:public SysModule {
default: return false;
}}); //fixtureGen

ui->initText(parentVar, "pinList", "16", UINT8_MAX, 32, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
ui->initText(parentVar, "pinList", "16", 32, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
case f_UIFun:
web->addResponse(var["id"], "comment", "One or more e.g. 12,13,14");
return true;
Expand Down Expand Up @@ -619,14 +619,14 @@ class AppModFixtureGen:public SysModule {
ui->initNumber(parentVar, "ledCount", 24, 1, NUM_LEDS_Max);
}
else if (value == f_2DRings241) {
ui->initCheckBox(parentVar, "in2out", true, UINT8_MAX);
ui->initCheckBox(parentVar, "in2out", true);
}
else if (value == f_2DWheel) {
ui->initNumber(parentVar, "nrOfSpokes", 36, 1, 360);
ui->initNumber(parentVar, "ledsPerSpoke", 24, 1, 360);
}
else if (value == f_3DCone) {
ui->initCheckBox(parentVar, "in2out", true, UINT8_MAX);
ui->initCheckBox(parentVar, "in2out", true);
ui->initNumber(parentVar, "nrOfRings", 24, 1, 360);
}
else if (value == f_2DMatrix) {
Expand All @@ -636,7 +636,7 @@ class AppModFixtureGen:public SysModule {

ui->initNumber(parentVar, "height", 8, 1, 255);

ui->initSelect(parentVar, "firstLedX", 0, UINT8_MAX, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
ui->initSelect(parentVar, "firstLedX", 0, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
case f_UIFun: {
web->addResponse(var["id"], "comment", "WIP");
JsonArray select = web->addResponseA(var["id"], "options");
Expand All @@ -647,7 +647,7 @@ class AppModFixtureGen:public SysModule {
default: return false;
}});

ui->initSelect(parentVar, "firstLedY", 0, UINT8_MAX, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
ui->initSelect(parentVar, "firstLedY", 0, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun
case f_UIFun: {
web->addResponse(var["id"], "comment", "WIP");
JsonArray select = web->addResponseA(var["id"], "options");
Expand Down
Loading

0 comments on commit ccccbaa

Please sign in to comment.