#include "json.hpp" using json = nlohmann::json; void GUIApp::setup() { gui0 = new ofxDatGui( 0, 0 ); gui0->setTheme( new AppGuiTheme() ); bool reload_prev_iteration = true; json prevStateVars; printf( "Do you wish to reload the previous interation values? Yes = 1, No = 0. " ); cin >> reload_prev_iteration; if( reload_prev_iteration ) { // read a JSON file std::ifstream i( "sweeper_saved_variables.json" ); i >> prevStateVars; reload_prev_iteration = !prevStateVars.empty(); } // -----------------------------------------------------------------------------------// gui0_SaveFile = gui0->addButton( "[ Save To File ]" ); gui0_SaveAs = gui0->addButton( "[ Save as ]" ); gui0_LoadFile = gui0->addButton( "[ Load From File ]" ); gui0_equalizerEnable = gui0->addToggle( "Enable Equalizer", ( reload_prev_iteration ? prevStateVars[ "gui0_equalizerEnable" ] : false ) ); gui0_timeCoherent = gui0->addToggle( "Time-Coherent", ( reload_prev_iteration ? prevStateVars[ "gui0_timeCoherent" ] : false ) ); sweep_mode = ( reload_prev_iteration ? prevStateVars[ "sweep_mode" ] : 1 ); // 0 - manual // 1 - automatic vector sweep_options ={ "Sweep: Manual","Sweep: Auto" }; gui0_SweepMode = gui0->addDropdown( "Sweep Mode", sweep_options ); gui0_SweepMode->select( sweep_mode ); gui0_StopSweep = gui0->addButton( "[ Stop Sweep ]" ); sweep_rate = ( reload_prev_iteration ? prevStateVars[ "sweep_rate" ] : 0.25 ); gui0_SweepRate = gui0->addSlider( "Sweep Rate", -2.0, 2.0 ); gui0_SweepRate->setValue( sweep_rate ); gui0_SweepRate->setVisible( true ); sweep_percentage = ( reload_prev_iteration ? prevStateVars[ "sweep_percentage" ] : 0.5 ); gui0_SweepPercentage = gui0->addSlider( "Sweep Alpha", 0.0, 1.0 ); gui0_SweepPercentage->setValue( sweep_percentage ); gui0_SweepPercentage->setVisible( true ); vector mode_options ={ "Output Mode: Shared", "Output Mode: Separate" }; gui0_outputModeDD = gui0->addDropdown( "Output Mode", mode_options ); output_mode = ( reload_prev_iteration ? prevStateVars[ "output_mode" ] : 1 ); // 0 - all three together // 1 - all three separate gui0_outputModeDD->select( output_mode ); vector channel_options ={ "Output Channel: Red", "Output Channel: Green", "Output Channel: Blue" }; gui0_outputChannelDD = gui0->addDropdown( "Output Channel", channel_options ); output_channel = ( reload_prev_iteration ? prevStateVars[ "output_channel" ] : 0 ); // 0 - all three on R // 1 - all three on G // 2 - all three on B gui0_outputChannelDD->select( output_channel ); gui0_outputChannelDD->setVisible( output_mode == 0 ); vector mixing_options ={ "Averaging Divisor: Constant", "Averaging Divisor: Summation" }; gui0_mixingModeDD = gui0->addDropdown( "Shared Mixing Mode", mixing_options ); shared_output_mixing_mode = ( reload_prev_iteration ? prevStateVars[ "shared_output_mixing_mode" ] : 0 ); // 0 - average with constant divisor // 1 - average with changing divisor based upon sum of amplitudes gui0_mixingModeDD->setVisible( output_mode == 0 ); char temp_c_str[ 16 ]; gui_widgets[ 0 ] = gui0_RedEnable = gui0->addToggle( "Red Enable", ( reload_prev_iteration ? prevStateVars[ "red_enable" ] : true ) ); red_carrier_freq = ( reload_prev_iteration ? prevStateVars[ "red_carrier_freq" ] : 350.0 ); sprintf( temp_c_str, "%.2f", red_carrier_freq ); gui0_RedCarrierFrequency = gui0->addTextInput( "Red Carrier Freq", temp_c_str ); gui0_RedCarrierFrequency->setInputType( ofxDatGuiInputType::NUMERIC ); gui0_RedMinFreq = gui0->addSlider( "Red Min Freq", red_carrier_freq, red_carrier_freq + GPU_BW_MHZ, ( reload_prev_iteration ? prevStateVars[ "red_min_freq" ] : red_carrier_freq ) ); gui_widgets[ 1 ] = gui0_RedFreq = gui0->addSlider( "Red Freq", red_carrier_freq, red_carrier_freq + GPU_BW_MHZ, ( reload_prev_iteration ? prevStateVars[ "red_freq" ] : ( red_carrier_freq + GPU_BW_MHZ * 0.5 ) ) ); gui0_RedMaxFreq = gui0->addSlider( "Red Max Freq", red_carrier_freq, red_carrier_freq + GPU_BW_MHZ, ( reload_prev_iteration ? prevStateVars[ "red_max_freq" ] : ( red_carrier_freq + GPU_BW_MHZ ) ) ); gui_widgets[ 2 ] = gui0_RedAmp = gui0->addSlider( "Red Amp", 0.0, 1.0, ( reload_prev_iteration ? prevStateVars[ "red_amp" ] : 1.0 ) ); gui_widgets[ 3 ] = gui0_GreenEnable = gui0->addToggle( "Green Enable", ( reload_prev_iteration ? prevStateVars[ "green_enable" ] : false ) ); green_carrier_freq = ( reload_prev_iteration ? prevStateVars[ "green_carrier_freq" ] : 0.0 ); sprintf( temp_c_str, "%.2f", green_carrier_freq ); gui0_GreenCarrierFrequency = gui0->addTextInput( "Green Carrier Freq", temp_c_str ); gui0_GreenCarrierFrequency->setInputType( ofxDatGuiInputType::NUMERIC ); gui0_GreenMinFreq = gui0->addSlider( "Green Min Freq", green_carrier_freq, green_carrier_freq + GPU_BW_MHZ, ( reload_prev_iteration ? prevStateVars[ "green_min_freq" ] : 0.0 ) ); gui_widgets[ 4 ] = gui0_GreenFreq = gui0->addSlider( "Green Freq", green_carrier_freq, green_carrier_freq + GPU_BW_MHZ, ( reload_prev_iteration ? prevStateVars[ "green_freq" ] : 0.0 ) ); gui0_GreenMaxFreq = gui0->addSlider( "Green Max Freq", green_carrier_freq, green_carrier_freq + GPU_BW_MHZ, ( reload_prev_iteration ? prevStateVars[ "green_max_freq" ] : 0.0 ) ); gui_widgets[ 5 ] = gui0_GreenAmp = gui0->addSlider( "Green Amp", 0.0, 1.0, ( reload_prev_iteration ? prevStateVars[ "green_amp" ] : 1.0 ) ); gui_widgets[ 6 ] = gui0_BlueEnable = gui0->addToggle( "Blue Enable", ( reload_prev_iteration ? prevStateVars[ "blue_enable" ] : true ) ); blue_carrier_freq = ( reload_prev_iteration ? prevStateVars[ "blue_carrier_freq" ] : 0.0 ); sprintf( temp_c_str, "%.2f", blue_carrier_freq ); gui0_BlueCarrierFrequency = gui0->addTextInput( "Blue Carrier Freq", temp_c_str ); gui0_BlueCarrierFrequency->setInputType( ofxDatGuiInputType::NUMERIC ); gui0_BlueMinFreq = gui0->addSlider( "Blue Min Freq", blue_carrier_freq, blue_carrier_freq + GPU_BW_MHZ, ( reload_prev_iteration ? prevStateVars[ "blue_min_freq" ] : 1.0 ) ); gui_widgets[ 7 ] = gui0_BlueFreq = gui0->addSlider( "Blue Freq", blue_carrier_freq, blue_carrier_freq + GPU_BW_MHZ, ( reload_prev_iteration ? prevStateVars[ "blue_freq" ] : 1.0 ) ); gui0_BlueMaxFreq = gui0->addSlider( "Blue Max Freq", blue_carrier_freq, blue_carrier_freq + GPU_BW_MHZ, ( reload_prev_iteration ? prevStateVars[ "blue_max_freq" ] : 1.0 ) ); gui_widgets[ 8 ] = gui0_BlueAmp = gui0->addSlider( "Blue Amp", 0.0, 1.0, ( reload_prev_iteration ? prevStateVars[ "blue_amp" ] : 1.0 ) ); // ------------------------------------------------------------ // if( sweep_mode ) { gui0_RedMinFreq->setVisible( true ); gui0_RedMaxFreq->setVisible( true ); gui0_GreenMinFreq->setVisible( true ); gui0_GreenMaxFreq->setVisible( true ); gui0_BlueMinFreq->setVisible( true ); gui0_BlueMaxFreq->setVisible( true ); } else { gui0_SweepRate->setVisible( false ); gui0_SweepPercentage->setVisible( false ); gui0_RedMinFreq->setVisible( false ); gui0_RedMaxFreq->setVisible( false ); gui0_GreenMinFreq->setVisible( false ); gui0_GreenMaxFreq->setVisible( false ); gui0_BlueMinFreq->setVisible( false ); gui0_BlueMaxFreq->setVisible( false ); } gui_widget_focused_index = 1; // focus on red frequency widget initially gui0->onButtonEvent( this, &GUIApp::onButtonEvent ); gui0->onToggleEvent( this, &GUIApp::onToggleEvent ); gui0->onTextInputEvent( this, &GUIApp::onTextInputEvent ); gui0->onSliderEvent( this, &GUIApp::onSliderEvent ); gui0->onDropdownEvent( this, &GUIApp::onDropdownEvent ); alt_modifier = false; shift_modifier = false; ctrl_modifier = false; is_adjusting_min_max_freq = false; //ofTrueTypeFont::setGlobalDpi( 72 ); // this screws up the font size font.load( "FAFERS_Technical_Font.ttf", 14, false ); if( !font.isLoaded() ) font.load( "arial.ttf", 14, false ); font.setLineHeight( font.getSize() * 1.125 ); font.setLetterSpacing( 1.037 ); } bool save_curr_iteration = true; printf( "Do you wish to save current data? Yes = 1, No = 0 \n" ); cin >> save_curr_iteration; if (save_curr_iteration) { json savedStateVars; savedStateVars["sweep_rate"] = gui0_SweepRate->getValue(); savedStateVars["sweep_percentage"] = gui0_SweepPercentage->getValue(); savedStateVars["red_enable"] = gui0_RedEnable->getChecked(); savedStateVars["red_carrier_freq"] = gui0_RedCarrierFrequency->getLabel(); savedStateVars["red_min_freq"] = gui0_RedMinFreq->getValue(); savedStateVars["red_freq"] = gui0_RedFreq->getValue(); savedStateVars["red_max_freq"] = gui0_RedMaxFreq->getValue(); savedStateVars["red_amp"] = gui0_RedAmp->getValue(); savedStateVars["green_enable"] = gui0_GreenEnable->getChecked(); savedStateVars["green_carrier_freq"] = gui0_GreenCarrierFrequency->getLabel(); savedStateVars["green_min_freq"] = gui0_GreenMinFreq->getValue(); savedStateVars["green_freq"] = gui0_GreenFreq->getValue(); savedStateVars["green_max_freq"] = gui0_GreenMaxFreq->getValue(); savedStateVars["green_amp"] = gui0_GreenAmp->getValue(); savedStateVars["blue_enable"] = gui0_BlueEnable->getChecked(); savedStateVars["blue_carrier_freq"] = gui0_BlueCarrierFrequency->getLabel(); savedStateVars["blue_min_freq"] = gui0_BlueMinFreq->getValue(); savedStateVars["blue_freq"] = gui0_BlueFreq->getValue(); savedStateVars["blue_max_freq"] = gui0_BlueMaxFreq->getValue(); savedStateVars["blue_amp"] = gui0_BlueAmp->getValue(); // write prettified JSON to another file std::ofstream off_program_file("sweeper_saved_variables.json"); off_program_file << std::setw(10) << savedStateVars << std::endl; printf("sweep_rate: %f \n", savedStateVars["sweep_rate"]); printf("sweep_percentage: %f \n", savedStateVars["sweep_percentage"]); printf("red_min_freq: %f \n", savedStateVars["red_min_freq"]); printf("red curr freq: %f \n", savedStateVars["red_freq"]); printf("red_max_freq: %f \n", savedStateVars["red_max_freq"]); printf("green_min_freq: %f \n", savedStateVars["green_min_freq"]); printf("green curr freq: %f \n", savedStateVars["green_freq"]); printf("green_max_freq: %f \n", savedStateVars["green_max_freq"]); printf("blue_min_freq: %f \n", savedStateVars["blue_min_freq"]); printf("blue curr freq: %f \n", savedStateVars["blue_freq"]); printf("blue_max_freq: %f \n", savedStateVars["blue_max_freq"]); }