output_range.hpp (2164B)
1 #pragma once 2 3 #include "bogaudio.hpp" 4 5 using namespace rack; 6 7 namespace bogaudio { 8 9 struct OutputRange { 10 float _rangeOffset = 0.0f; 11 float _rangeScale = 10.0f; 12 13 struct OutputRangeParamQuantity : ParamQuantity { 14 float getDisplayValue() override; 15 void setDisplayValue(float v) override; 16 }; 17 }; 18 19 template<class BASE> 20 struct OutputRangeModule : BASE, OutputRange { 21 json_t* saveToJson(json_t* root) override { 22 root = BASE::saveToJson(root); 23 json_object_set_new(root, "range_offset", json_real(_rangeOffset)); 24 json_object_set_new(root, "range_scale", json_real(_rangeScale)); 25 return root; 26 } 27 28 void loadFromJson(json_t* root) override { 29 BASE::loadFromJson(root); 30 31 json_t* ro = json_object_get(root, "range_offset"); 32 if (ro) { 33 _rangeOffset = json_real_value(ro); 34 } 35 36 json_t* rs = json_object_get(root, "range_scale"); 37 if (rs) { 38 _rangeScale = json_real_value(rs); 39 } 40 } 41 }; 42 43 struct OutputRangeOptionMenuItem : OptionMenuItem { 44 OutputRangeOptionMenuItem(OutputRange* module, const char* label, float offset, float scale) 45 : OptionMenuItem( 46 label, 47 [=]() { return module->_rangeOffset == offset && module->_rangeScale == scale; }, 48 [=]() { 49 module->_rangeOffset = offset; 50 module->_rangeScale = scale; 51 } 52 ) 53 {} 54 55 static void addOutputRangeOptionsToMenu(Module* module, Menu* menu) { 56 auto m = dynamic_cast<OutputRange*>(module); 57 assert(m); 58 OptionsMenuItem* mi = new OptionsMenuItem("Range"); 59 mi->addItem(OutputRangeOptionMenuItem(m, "+/-10V", 0.0f, 10.0f)); 60 mi->addItem(OutputRangeOptionMenuItem(m, "+/-5V", 0.0f, 5.0f)); 61 mi->addItem(OutputRangeOptionMenuItem(m, "+/-3V", 0.0f, 3.0f)); 62 mi->addItem(OutputRangeOptionMenuItem(m, "+/-2V", 0.0f, 2.0f)); 63 mi->addItem(OutputRangeOptionMenuItem(m, "+/-1V", 0.0f, 1.0f)); 64 mi->addItem(OutputRangeOptionMenuItem(m, "0V-10V", 1.0f, 5.0f)); 65 mi->addItem(OutputRangeOptionMenuItem(m, "0V-5V", 1.0f, 2.5f)); 66 mi->addItem(OutputRangeOptionMenuItem(m, "0V-3V", 1.0f, 1.5f)); 67 mi->addItem(OutputRangeOptionMenuItem(m, "0V-2V", 1.0f, 1.0f)); 68 mi->addItem(OutputRangeOptionMenuItem(m, "0V-1V", 1.0f, 0.5f)); 69 OptionsMenuItem::addToMenu(mi, menu); 70 } 71 }; 72 73 } // namespace bogaudio