2022-03-30 15:41:23 +02:00
# include "settings.h"
# include "imgui/imgui.h"
# include <string>
# include "core/params.h"
# include "core/config.h"
# include "main_ui.h"
2022-04-24 18:31:30 +02:00
# include "common/opencl.h"
2022-03-30 15:41:23 +02:00
2022-05-07 17:06:56 +02:00
# include "init.h"
# include "common/tracking/tle.h"
2022-03-30 15:41:23 +02:00
namespace satdump
{
namespace settings
{
std : : vector < std : : pair < std : : string , satdump : : params : : EditableParameter > > settings_user_interface ;
2022-04-21 16:10:00 +02:00
std : : vector < std : : pair < std : : string , satdump : : params : : EditableParameter > > settings_general ;
2022-05-03 23:55:39 +02:00
std : : vector < std : : pair < std : : string , satdump : : params : : EditableParameter > > settings_output_directories ;
2022-03-30 15:41:23 +02:00
2022-04-24 18:31:30 +02:00
# ifdef USE_OPENCL
// OpenCL Selection
int opencl_devices_id = 0 ;
std : : string opencl_devices_str ;
std : : vector < std : : tuple < std : : string , int , int > > opencl_devices_enum ;
# endif
2022-03-30 15:41:23 +02:00
void setup ( )
{
nlohmann : : ordered_json params = satdump : : config : : main_cfg [ " user_interface " ] ;
for ( nlohmann : : detail : : iteration_proxy_value < nlohmann : : detail : : iter_impl < nlohmann : : ordered_json > > cfg : params . items ( ) )
{
// Check setting type, and create an EditableParameter if possible
if ( cfg . value ( ) . contains ( " type " ) & & cfg . value ( ) . contains ( " value " ) & & cfg . value ( ) . contains ( " name " ) )
settings_user_interface . push_back ( { cfg . key ( ) , params : : EditableParameter ( nlohmann : : json ( cfg . value ( ) ) ) } ) ;
}
2022-04-21 16:10:00 +02:00
params = satdump : : config : : main_cfg [ " satdump_general " ] ;
for ( nlohmann : : detail : : iteration_proxy_value < nlohmann : : detail : : iter_impl < nlohmann : : ordered_json > > cfg : params . items ( ) )
{
// Check setting type, and create an EditableParameter if possible
if ( cfg . value ( ) . contains ( " type " ) & & cfg . value ( ) . contains ( " value " ) & & cfg . value ( ) . contains ( " name " ) )
settings_general . push_back ( { cfg . key ( ) , params : : EditableParameter ( nlohmann : : json ( cfg . value ( ) ) ) } ) ;
}
2022-05-03 23:55:39 +02:00
params = satdump : : config : : main_cfg [ " satdump_output_directories " ] ;
2022-05-03 21:10:59 +02:00
for ( nlohmann : : detail : : iteration_proxy_value < nlohmann : : detail : : iter_impl < nlohmann : : ordered_json > > cfg : params . items ( ) )
{
// Check setting type, and create an EditableParameter if possible
if ( cfg . value ( ) . contains ( " type " ) & & cfg . value ( ) . contains ( " value " ) & & cfg . value ( ) . contains ( " name " ) )
2022-05-03 23:55:39 +02:00
settings_output_directories . push_back ( { cfg . key ( ) , params : : EditableParameter ( nlohmann : : json ( cfg . value ( ) ) ) } ) ;
2022-05-03 21:10:59 +02:00
}
2022-04-24 18:31:30 +02:00
# ifdef USE_OPENCL
opencl_devices_enum = opencl : : getAllDevices ( ) ;
int p = satdump : : config : : main_cfg [ " satdump_general " ] [ " opencl_device " ] [ " platform " ] . get < int > ( ) ;
int d = satdump : : config : : main_cfg [ " satdump_general " ] [ " opencl_device " ] [ " device " ] . get < int > ( ) ;
int dev_id = 0 ;
for ( std : : tuple < std : : string , int , int > & dev : opencl_devices_enum )
{
opencl_devices_str + = std : : get < 0 > ( dev ) + ' \0 ' ;
if ( std : : get < 1 > ( dev ) = = p & & std : : get < 2 > ( dev ) = = d )
opencl_devices_id = dev_id ;
dev_id + + ;
}
# endif
2022-03-30 15:41:23 +02:00
}
void render ( )
{
if ( ImGui : : CollapsingHeader ( " User Interface " ) )
{
if ( ImGui : : BeginTable ( " ##satdumpuisettings " , 2 , ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg ) )
{
for ( std : : pair < std : : string , satdump : : params : : EditableParameter > & p : settings_user_interface )
p . second . draw ( ) ;
ImGui : : EndTable ( ) ;
}
}
2022-04-21 16:10:00 +02:00
if ( ImGui : : CollapsingHeader ( " General SatDump " ) )
{
if ( ImGui : : BeginTable ( " ##satdumpgeneralsettings " , 2 , ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg ) )
{
2022-04-24 18:31:30 +02:00
# ifdef USE_OPENCL
ImGui : : TableNextRow ( ) ;
ImGui : : TableSetColumnIndex ( 0 ) ;
ImGui : : Text ( " OpenCL Device " ) ;
if ( ImGui : : IsItemHovered ( ) )
ImGui : : SetTooltip ( " OpenCL Device SatDump will use for accelerated computing where it can help, eg, for some image processing tasks such as projections. " ) ;
ImGui : : TableSetColumnIndex ( 1 ) ;
ImGui : : Combo ( " ##opencldeviceselection " , & opencl_devices_id , opencl_devices_str . c_str ( ) ) ;
# endif
2022-04-21 16:10:00 +02:00
for ( std : : pair < std : : string , satdump : : params : : EditableParameter > & p : settings_general )
p . second . draw ( ) ;
2022-05-07 17:06:56 +02:00
ImGui : : TableNextRow ( ) ;
ImGui : : TableSetColumnIndex ( 0 ) ;
ImGui : : Text ( " Update TLEs Now " ) ;
ImGui : : TableSetColumnIndex ( 1 ) ;
if ( ImGui : : Button ( " Update###updateTLEs " ) )
2022-05-23 01:11:11 +02:00
updateTLEFile ( satdump : : user_path + " /satdump_tles.txt " ) ;
2022-05-07 17:06:56 +02:00
2022-04-21 16:10:00 +02:00
ImGui : : EndTable ( ) ;
}
}
2022-05-04 00:51:13 +02:00
if ( ImGui : : CollapsingHeader ( " Output Directories " ) )
2022-05-03 21:10:59 +02:00
{
2022-05-03 23:55:39 +02:00
if ( ImGui : : BeginTable ( " ##satdumpoutput_directories " , 2 , ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg ) )
2022-05-03 21:10:59 +02:00
{
2022-05-03 23:55:39 +02:00
for ( std : : pair < std : : string , satdump : : params : : EditableParameter > & p : settings_output_directories )
2022-05-03 21:10:59 +02:00
p . second . draw ( ) ;
ImGui : : EndTable ( ) ;
}
}
2022-05-03 23:55:39 +02:00
2022-03-30 15:41:23 +02:00
if ( ImGui : : Button ( " Save " ) )
{
2022-04-24 18:31:30 +02:00
# ifdef USE_OPENCL
2022-07-30 20:16:17 +02:00
if ( opencl_devices_enum . size ( ) > 0 )
{
satdump : : config : : main_cfg [ " satdump_general " ] [ " opencl_device " ] [ " platform " ] = std : : get < 1 > ( opencl_devices_enum [ opencl_devices_id ] ) ;
satdump : : config : : main_cfg [ " satdump_general " ] [ " opencl_device " ] [ " device " ] = std : : get < 2 > ( opencl_devices_enum [ opencl_devices_id ] ) ;
}
2022-04-24 18:31:30 +02:00
# endif
2022-03-30 15:41:23 +02:00
for ( std : : pair < std : : string , satdump : : params : : EditableParameter > & p : settings_user_interface )
satdump : : config : : main_cfg [ " user_interface " ] [ p . first ] [ " value " ] = p . second . getValue ( ) ;
2022-04-21 16:10:00 +02:00
for ( std : : pair < std : : string , satdump : : params : : EditableParameter > & p : settings_general )
satdump : : config : : main_cfg [ " satdump_general " ] [ p . first ] [ " value " ] = p . second . getValue ( ) ;
2022-05-03 23:55:39 +02:00
for ( std : : pair < std : : string , satdump : : params : : EditableParameter > & p : settings_output_directories )
satdump : : config : : main_cfg [ " satdump_output_directories " ] [ p . first ] [ " value " ] = p . second . getValue ( ) ;
2022-03-30 15:41:23 +02:00
config : : saveUserConfig ( ) ;
}
2022-05-07 18:16:24 +02:00
ImGui : : TextColored ( ImColor ( 255 , 255 , 0 ) , " Note : Some settings will require SatDump to be restarted \n to take effect! " ) ;
2022-03-30 15:41:23 +02:00
}
}
2022-05-03 21:10:59 +02:00
}