|  | @@ -45,6 +45,11 @@ struct RackUI : public GenericUI | 
														
													
														
															
																|  |  | vector<ConverterZoneControl*> fConverters; |  |  | vector<ConverterZoneControl*> fConverters; | 
														
													
														
															
																|  |  | vector<updateFunction> fUpdateFunIn; |  |  | vector<updateFunction> fUpdateFunIn; | 
														
													
														
															
																|  |  | vector<updateFunction> fUpdateFunOut; |  |  | vector<updateFunction> fUpdateFunOut; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | // For checkbox handling | 
														
													
														
															
																|  |  |  |  |  | struct CheckBox { float fLast = 0.0f; }; | 
														
													
														
															
																|  |  |  |  |  | map <FAUSTFLOAT*, CheckBox> fCheckBoxes; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | string fKey, fValue, fScale; |  |  | string fKey, fValue, fScale; | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | int getIndex(const string& value) |  |  | int getIndex(const string& value) | 
														
													
												
													
														
															
																|  | @@ -78,11 +83,37 @@ struct RackUI : public GenericUI | 
														
													
														
															
																|  |  | fUpdateFunIn.push_back([=] (ProcessBlock* block) { *zone = block->switches[index-1]; }); |  |  | fUpdateFunIn.push_back([=] (ProcessBlock* block) { *zone = block->switches[index-1]; }); | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  |  |  |  | void addCheckButton(const char* label, FAUSTFLOAT* zone) | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | int index = getIndex(fValue); | 
														
													
														
															
																|  |  |  |  |  | if (fKey == "switch" && (index != -1)) { | 
														
													
														
															
																|  |  |  |  |  | // Add a checkbox | 
														
													
														
															
																|  |  |  |  |  | fCheckBoxes[zone] = CheckBox(); | 
														
													
														
															
																|  |  |  |  |  | // Update function | 
														
													
														
															
																|  |  |  |  |  | fUpdateFunIn.push_back([=] (ProcessBlock* block) | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | float state = block->switches[index-1]; | 
														
													
														
															
																|  |  |  |  |  | // Detect upfront | 
														
													
														
															
																|  |  |  |  |  | if (state == 1.0 && (state != fCheckBoxes[zone].fLast)) { | 
														
													
														
															
																|  |  |  |  |  | // Swich button state | 
														
													
														
															
																|  |  |  |  |  | *zone = !*zone; | 
														
													
														
															
																|  |  |  |  |  | // And set the color | 
														
													
														
															
																|  |  |  |  |  | block->switchLights[index-1][0] = *zone; | 
														
													
														
															
																|  |  |  |  |  | block->switchLights[index-1][1] = *zone; | 
														
													
														
															
																|  |  |  |  |  | block->switchLights[index-1][2] = *zone; | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | // Always keep previous button state | 
														
													
														
															
																|  |  |  |  |  | fCheckBoxes[zone].fLast = state; | 
														
													
														
															
																|  |  |  |  |  | }); | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) |  |  | void addVerticalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  | addNumEntry(label, zone, init, min, max, step); |  |  | addNumEntry(label, zone, init, min, max, step); | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) |  |  | void addHorizontalSlider(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT init, FAUSTFLOAT min, FAUSTFLOAT max, FAUSTFLOAT step) | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  | addNumEntry(label, zone, init, min, max, step); |  |  | addNumEntry(label, zone, init, min, max, step); | 
														
													
												
													
														
															
																|  | @@ -127,6 +158,7 @@ struct RackUI : public GenericUI | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  | addBarGraph(zone); |  |  | addBarGraph(zone); | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) |  |  | void addVerticalBargraph(const char* label, FAUSTFLOAT* zone, FAUSTFLOAT min, FAUSTFLOAT max) | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  | addBarGraph(zone); |  |  | addBarGraph(zone); | 
														
													
												
													
														
															
																|  | 
 |