BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

save_latch_to_patch.cpp (1221B)


      1 #include "save_latch_to_patch.hpp"
      2 
      3 #define SAVE_LATCHED_TO_PATCH "save_latched_to_patch"
      4 #define LATCHED_STATE "latched_state"
      5 
      6 json_t* SaveLatchToPatchModule::saveToJson(json_t* root) {
      7 	json_object_set_new(root, SAVE_LATCHED_TO_PATCH, json_boolean(_saveLatchedToPatch));
      8 	if (_saveLatchedToPatch && _latch) {
      9 		json_t* a = json_array();
     10 		for (int c = 0; c < maxChannels; ++c) {
     11 			json_array_append_new(a, json_boolean(_latchedHigh[c]));
     12 		}
     13 		json_object_set_new(root, LATCHED_STATE, a);
     14 	}
     15 	return root;
     16 }
     17 
     18 void SaveLatchToPatchModule::loadFromJson(json_t* root) {
     19 	json_t* sl = json_object_get(root, SAVE_LATCHED_TO_PATCH);
     20 	if (sl) {
     21 		_saveLatchedToPatch = json_is_true(sl);
     22 		json_t* a = json_object_get(root, LATCHED_STATE);
     23 		if (_saveLatchedToPatch && a && json_array_size(a) == maxChannels) {
     24 			for (int c = 0; c < maxChannels; ++c) {
     25 				json_t* ls = json_array_get(a, c);
     26 				if (ls && json_is_true(ls)) {
     27 					_latchedHigh[c] = true;
     28 				}
     29 			}
     30 		}
     31 	}
     32 }
     33 
     34 
     35 void SaveLatchToPatchModuleWidget::contextMenu(Menu* menu) {
     36 	auto m = dynamic_cast<SaveLatchToPatchModule*>(module);
     37 	assert(m);
     38 	menu->addChild(new BoolOptionMenuItem("Save latched state to patch", [m]() { return &m->_saveLatchedToPatch; }));
     39 }