lpg_common.cpp (3805B)
1 2 #include "lpg_common.hpp" 3 4 #define RISE_SHAPE_MODE "rise_shape_mode" 5 #define FALL_SHAPE_MODE "fall_shape_mode" 6 #define SHAPE_MODE_OFF "off" 7 #define SHAPE_MODE_ON "on" 8 #define SHAPE_MODE_INVERTED "inverted" 9 10 json_t* LPGEnvBaseModule::saveToJson(json_t* root) { 11 switch (_riseShapeMode) { 12 case RiseFallShapedSlewLimiter::OFF_SCVM: { 13 json_object_set_new(root, RISE_SHAPE_MODE, json_string(SHAPE_MODE_OFF)); 14 break; 15 } 16 case RiseFallShapedSlewLimiter::ON_SCVM: { 17 json_object_set_new(root, RISE_SHAPE_MODE, json_string(SHAPE_MODE_ON)); 18 break; 19 } 20 case RiseFallShapedSlewLimiter::INVERTED_SCVM: { 21 json_object_set_new(root, RISE_SHAPE_MODE, json_string(SHAPE_MODE_INVERTED)); 22 break; 23 } 24 default:; 25 } 26 switch (_fallShapeMode) { 27 case RiseFallShapedSlewLimiter::OFF_SCVM: { 28 json_object_set_new(root, FALL_SHAPE_MODE, json_string(SHAPE_MODE_OFF)); 29 break; 30 } 31 case RiseFallShapedSlewLimiter::ON_SCVM: { 32 json_object_set_new(root, FALL_SHAPE_MODE, json_string(SHAPE_MODE_ON)); 33 break; 34 } 35 case RiseFallShapedSlewLimiter::INVERTED_SCVM: { 36 json_object_set_new(root, FALL_SHAPE_MODE, json_string(SHAPE_MODE_INVERTED)); 37 break; 38 } 39 default:; 40 } 41 return root; 42 } 43 44 void LPGEnvBaseModule::loadFromJson(json_t* root) { 45 json_t* rsm = json_object_get(root, RISE_SHAPE_MODE); 46 if (rsm) { 47 std::string s = json_string_value(rsm); 48 if (s == SHAPE_MODE_OFF) { 49 _riseShapeMode = RiseFallShapedSlewLimiter::OFF_SCVM; 50 } 51 else if (s == SHAPE_MODE_ON) { 52 _riseShapeMode = RiseFallShapedSlewLimiter::ON_SCVM; 53 } 54 else if (s == SHAPE_MODE_INVERTED) { 55 _riseShapeMode = RiseFallShapedSlewLimiter::INVERTED_SCVM; 56 } 57 } 58 json_t* fsm = json_object_get(root, FALL_SHAPE_MODE); 59 if (fsm) { 60 std::string s = json_string_value(fsm); 61 if (s == SHAPE_MODE_OFF) { 62 _fallShapeMode = RiseFallShapedSlewLimiter::OFF_SCVM; 63 } 64 else if (s == SHAPE_MODE_ON) { 65 _fallShapeMode = RiseFallShapedSlewLimiter::ON_SCVM; 66 } 67 else if (s == SHAPE_MODE_INVERTED) { 68 _fallShapeMode = RiseFallShapedSlewLimiter::INVERTED_SCVM; 69 } 70 } 71 } 72 73 void LPGEnvBaseModule::modulate() { 74 _gateToTrigger = _gateToTriggerParamID >= 0 && params[_gateToTriggerParamID].getValue() > 0.5f; 75 _timeScale = _timeScaleParamID >= 0 && params[_timeScaleParamID].getValue() > 0.5f ? _longTimeScale : 1.0f; 76 } 77 78 79 void LPGEnvBaseWidget::contextMenu(Menu* menu) { 80 auto m = dynamic_cast<LPGEnvBaseModule*>(module); 81 assert(m); 82 83 OptionsMenuItem* rm = new OptionsMenuItem("Rise shape CV"); 84 rm->addItem(OptionMenuItem( 85 "Enable", 86 [m]() { return m->_riseShapeMode == RiseFallShapedSlewLimiter::ON_SCVM; }, 87 [m]() { m->_riseShapeMode = RiseFallShapedSlewLimiter::ON_SCVM; } 88 )); 89 rm->addItem(OptionMenuItem( 90 "Enable inverted", 91 [m]() { return m->_riseShapeMode == RiseFallShapedSlewLimiter::INVERTED_SCVM; }, 92 [m]() { m->_riseShapeMode = RiseFallShapedSlewLimiter::INVERTED_SCVM; } 93 )); 94 rm->addItem(OptionMenuItem( 95 "Disable", 96 [m]() { return m->_riseShapeMode == RiseFallShapedSlewLimiter::OFF_SCVM; }, 97 [m]() { m->_riseShapeMode = RiseFallShapedSlewLimiter::OFF_SCVM; } 98 )); 99 OptionsMenuItem::addToMenu(rm, menu); 100 101 OptionsMenuItem* fm = new OptionsMenuItem("Fall shape CV"); 102 fm->addItem(OptionMenuItem( 103 "Enable", 104 [m]() { return m->_fallShapeMode == RiseFallShapedSlewLimiter::ON_SCVM; }, 105 [m]() { m->_fallShapeMode = RiseFallShapedSlewLimiter::ON_SCVM; } 106 )); 107 fm->addItem(OptionMenuItem( 108 "Enable inverted", 109 [m]() { return m->_fallShapeMode == RiseFallShapedSlewLimiter::INVERTED_SCVM; }, 110 [m]() { m->_fallShapeMode = RiseFallShapedSlewLimiter::INVERTED_SCVM; } 111 )); 112 fm->addItem(OptionMenuItem( 113 "Disable", 114 [m]() { return m->_fallShapeMode == RiseFallShapedSlewLimiter::OFF_SCVM; }, 115 [m]() { m->_fallShapeMode = RiseFallShapedSlewLimiter::OFF_SCVM; } 116 )); 117 OptionsMenuItem::addToMenu(fm, menu); 118 }