70#if defined( __WXGTK__ ) || defined( __WXMSW__ )
77#
if defined( __WXMSW__ )
126 &
m_Appearance.zoom_correction_factor, 1.0, 0.1, 10.0 ) );
131 &
m_Backup.limit_total_size, 104857600 ) );
134 [&]() -> nlohmann::json
136 nlohmann::json ret = {};
138 for(
const std::pair<wxString, ENV_VAR_ITEM> entry :
m_Env.vars )
140 const ENV_VAR_ITEM& var = entry.second;
142 wxASSERT( entry.first == var.GetKey() );
145 if( var.IsDefault() )
147 wxLogTrace( traceEnvVars,
148 wxS(
"COMMON_SETTINGS: Env var %s skipping save (default)" ),
153 wxString value = var.GetValue();
155 value.Trim(
true ).Trim(
false );
159 if( var.GetDefinedExternally() )
161 if( var.GetDefinedInSettings() )
163 wxLogTrace( traceEnvVars,
164 wxS(
"COMMON_SETTINGS: Env var %s was overridden "
165 "externally, saving previously-loaded value %s" ),
166 var.GetKey(), var.GetSettingsValue() );
167 value = var.GetSettingsValue();
171 wxLogTrace( traceEnvVars,
172 wxS(
"COMMON_SETTINGS: Env var %s skipping save "
180 wxS(
"COMMON_SETTINGS: Saving env var %s = %s" ),
181 var.GetKey(), value);
183 std::string key( var.GetKey().Trim(
true ).Trim(
false ).ToUTF8() );
184 ret[ std::move( key ) ] = value;
189 [&](
const nlohmann::json& aJson )
191 if( !aJson.is_object() )
194 for(
const auto& entry : aJson.items() )
196 wxString key = wxString( entry.key().c_str(), wxConvUTF8 ).Trim(
true ).Trim(
false );
197 wxString val = entry.value().get<wxString>().Trim(
true ).Trim(
false );
199 if( m_Env.vars.count( key ) )
201 if( m_Env.vars[key].GetDefinedExternally() )
204 wxS(
"COMMON_SETTINGS: %s is defined externally" ),
206 m_Env.vars[key].SetDefinedInSettings();
207 m_Env.vars[key].SetSettingsValue( val );
213 wxS(
"COMMON_SETTINGS: Updating %s: %s -> %s"),
214 key, m_Env.vars[key].GetValue(), val );
215 m_Env.vars[key].SetValue( val );
221 wxS(
"COMMON_SETTINGS: Loaded new var: %s = %s" ),
226 m_Env.vars[key].SetDefinedInSettings();
227 m_Env.vars[key].SetSettingsValue( val );
231 envVarsParam->SetClearUnknownKeys();
233 m_params.emplace_back(
new PARAM<bool>(
"input.focus_follow_sch_pcb",
234 &m_Input.focus_follow_sch_pcb,
false ) );
236 m_params.emplace_back(
new PARAM<bool>(
"input.auto_pan", &m_Input.auto_pan,
false ) );
238 m_params.emplace_back(
new PARAM<int>(
"input.auto_pan_acceleration",
239 &m_Input.auto_pan_acceleration, 5 ) );
241 m_params.emplace_back(
new PARAM<bool>(
"input.center_on_zoom",
242 &m_Input.center_on_zoom,
true ) );
244 m_params.emplace_back(
new PARAM<bool>(
"input.immediate_actions",
245 &m_Input.immediate_actions,
true ) );
247 m_params.emplace_back(
new PARAM<bool>(
"input.warp_mouse_on_move",
248 &m_Input.warp_mouse_on_move,
true ) );
250 m_params.emplace_back(
new PARAM<bool>(
"input.horizontal_pan",
251 &m_Input.horizontal_pan,
false ) );
253 m_params.emplace_back(
new PARAM<bool>(
"input.hotkey_feedback",
254 &m_Input.hotkey_feedback,
true ) );
256 m_params.emplace_back(
new PARAM<bool>(
"input.zoom_acceleration",
257 &m_Input.zoom_acceleration,
false ) );
260 int default_zoom_speed = 5;
262 int default_zoom_speed = 1;
265 m_params.emplace_back(
new PARAM<int>(
"input.zoom_speed",
266 &m_Input.zoom_speed, default_zoom_speed ) );
268 m_params.emplace_back(
new PARAM<bool>(
"input.zoom_speed_auto",
269 &m_Input.zoom_speed_auto,
true ) );
271 m_params.emplace_back(
new PARAM<int>(
"input.scroll_modifier_zoom",
272 &m_Input.scroll_modifier_zoom, 0 ) );
274 m_params.emplace_back(
new PARAM<int>(
"input.scroll_modifier_pan_h",
275 &m_Input.scroll_modifier_pan_h, WXK_CONTROL ) );
277 m_params.emplace_back(
new PARAM<int>(
"input.scroll_modifier_pan_v",
278 &m_Input.scroll_modifier_pan_v, WXK_SHIFT ) );
280 m_params.emplace_back(
new PARAM<int>(
"input.motion_pan_modifier",
281 &m_Input.motion_pan_modifier, 0 ) );
283 m_params.emplace_back(
new PARAM<bool>(
"input.reverse_scroll_zoom",
284 &m_Input.reverse_scroll_zoom,
false ) );
286 m_params.emplace_back(
new PARAM<bool>(
"input.reverse_scroll_pan_h",
287 &m_Input.reverse_scroll_pan_h,
false ) );
301 m_params.emplace_back(
new PARAM<int>(
"spacemouse.rotate_speed",
302 &m_SpaceMouse.rotate_speed, 5, 1, 10 ) );
304 m_params.emplace_back(
new PARAM<int>(
"spacemouse.pan_speed",
305 &m_SpaceMouse.pan_speed, 5, 1, 10 ) );
307 m_params.emplace_back(
new PARAM<bool>(
"spacemouse.reverse_rotate",
308 &m_SpaceMouse.reverse_rotate,
false ) );
310 m_params.emplace_back(
new PARAM<bool>(
"spacemouse.reverse_pan_x",
311 &m_SpaceMouse.reverse_pan_x,
false ) );
313 m_params.emplace_back(
new PARAM<bool>(
"spacemouse.reverse_pan_y",
314 &m_SpaceMouse.reverse_pan_y,
false ) );
316 m_params.emplace_back(
new PARAM<bool>(
"spacemouse.reverse_zoom",
317 &m_SpaceMouse.reverse_zoom,
false ) );
319 m_params.emplace_back(
new PARAM<int>(
"graphics.canvas_type",
322 m_params.emplace_back(
new PARAM<int>(
"graphics.antialiasing_mode",
323 &m_Graphics.aa_mode, 2, 0, 2 ) );
325 m_params.emplace_back(
new PARAM<bool>(
"system.local_history_enabled",
326 &m_System.local_history_enabled,
true ) );
327 m_params.emplace_back(
new PARAM<int>(
"system.local_history_debounce",
328 &m_System.local_history_debounce, 5, 0, 100000 ) );
332 &m_System.text_editor, wxS(
"/usr/bin/open -e" ) ) );
335 &m_System.text_editor, wxS(
"" ) ) );
338#if defined( __WINDOWS__ )
340 &m_System.file_explorer, wxS(
"explorer.exe /n,/select,%F" ) ) );
343 &m_System.file_explorer, wxS(
"" ) ) );
346 m_params.emplace_back(
new PARAM<int>(
"system.file_history_size",
347 &m_System.file_history_size, 9 ) );
350 &m_System.language, wxS(
"Default" ) ) );
353 &m_System.pdf_viewer_name, wxS(
"" ) ) );
355 m_params.emplace_back(
new PARAM<bool>(
"system.use_system_pdf_viewer",
356 &m_System.use_system_pdf_viewer,
true ) );
359 &m_System.working_dir, wxS(
"" ) ) );
361 m_params.emplace_back(
new PARAM<int>(
"system.clear_3d_cache_interval",
362 &m_System.clear_3d_cache_interval, 30 ) );
364 m_params.emplace_back(
new PARAM<bool>(
"do_not_show_again.zone_fill_warning",
365 &m_DoNotShowAgain.zone_fill_warning,
false ) );
367 m_params.emplace_back(
new PARAM<bool>(
"do_not_show_again.env_var_overwrite_warning",
368 &m_DoNotShowAgain.env_var_overwrite_warning,
false ) );
370 m_params.emplace_back(
new PARAM<bool>(
"do_not_show_again.scaled_3d_models_warning",
371 &m_DoNotShowAgain.scaled_3d_models_warning,
false ) );
373 m_params.emplace_back(
new PARAM<bool>(
"do_not_show_again.data_collection_prompt",
374 &m_DoNotShowAgain.data_collection_prompt,
false ) );
376 m_params.emplace_back(
new PARAM<bool>(
"do_not_show_again.update_check_prompt",
377 &m_DoNotShowAgain.update_check_prompt,
false ) );
379 m_params.emplace_back(
new PARAM<bool>(
"session.remember_open_files",
380 &m_Session.remember_open_files,
false ) );
383 &m_Session.pinned_symbol_libs, {} ) );
386 &m_Session.pinned_fp_libs, {} ) );
389 &m_Session.pinned_design_block_libs, {} ) );
391 m_params.emplace_back(
new PARAM<int>(
"package_manager.sash_pos",
392 &m_PackageManager.sash_pos, 380 ) );
395 [&]() -> nlohmann::json
397 nlohmann::json ret = {};
399 for(
const GIT_REPOSITORY& repo : m_Git.repositories )
401 nlohmann::json repoJson = {};
403 repoJson[
"name"] = repo.name;
404 repoJson[
"path"] = repo.path;
405 repoJson[
"authType"] = repo.authType;
406 repoJson[
"username"] = repo.username;
407 repoJson[
"ssh_path"] = repo.ssh_path;
408 repoJson[
"active"] = repo.active;
410 ret.push_back( repoJson );
415 [&](
const nlohmann::json& aJson )
417 if( !aJson.is_array() )
420 m_Git.repositories.clear();
422 for(
const auto& repoJson : aJson )
426 repo.name = repoJson[
"name"].get<wxString>();
427 repo.path = repoJson[
"path"].get<wxString>();
428 repo.authType = repoJson[
"authType"].get<wxString>();
429 repo.username = repoJson[
"username"].get<wxString>();
430 repo.ssh_path = repoJson[
"ssh_path"].get<wxString>();
431 repo.active = repoJson[
"active"].get<
bool>();
432 repo.checkValid =
true;
434 m_Git.repositories.push_back( repo );
440 &m_Git.authorName, wxS(
"" ) ) );
443 &m_Git.authorEmail, wxS(
"" ) ) );
445 m_params.emplace_back(
new PARAM<bool>(
"git.useDefaultAuthor",
446 &m_Git.useDefaultAuthor,
true ) );
448 m_params.emplace_back(
new PARAM<bool>(
"git.enableGit",
449 &m_Git.enableGit,
true ) );
451 m_params.emplace_back(
new PARAM<int>(
"git.updatInterval",
452 &m_Git.updatInterval, 5 ) );
455 &m_Api.python_interpreter, wxS(
"" ) ) );
457 m_params.emplace_back(
new PARAM<bool>(
"api.enable_server",
458 &m_Api.enable_server,
false ) );
461 [&]() -> nlohmann::json
463 nlohmann::json ret = nlohmann::json::object();
465 for( const auto& dlg : m_csInternals->m_dialogControlValues )
466 ret[ dlg.first ] = dlg.second;
470 [&](
const nlohmann::json& aVal )
472 m_csInternals->m_dialogControlValues.clear();
474 if( !aVal.is_object() )
477 for( auto& [dlgKey, dlgVal] : aVal.items() )
479 if( !dlgVal.is_object() )
482 for( auto& [ctrlKey, ctrlVal] : dlgVal.items() )
483 m_csInternals->m_dialogControlValues[ dlgKey ][ ctrlKey ] = ctrlVal;
486 nlohmann::json::object() ) );
619 const nlohmann::json::json_pointer v3_pointer_eeschema(
"/netclass_panel/eeschema_shown_columns"_json_pointer );
620 wxString eeSchemaColumnList_old =
m_internals->at( v3_pointer_eeschema );
622 wxStringTokenizer eeSchemaShownTokens( eeSchemaColumnList_old,
" \t\r\n" );
623 wxString eeSchemaColumnList_new;
625 while( eeSchemaShownTokens.HasMoreTokens() )
628 eeSchemaShownTokens.GetNextToken().ToLong( &colNumber );
630 if( colNumber >= 10 )
633 eeSchemaColumnList_new += wxString::Format( wxT(
"%ld " ), colNumber );
636 eeSchemaColumnList_new.Trim(
true );
637 eeSchemaColumnList_new.Trim(
false );
639 m_internals->at( v3_pointer_eeschema ) = eeSchemaColumnList_new.ToUTF8();
642 const nlohmann::json::json_pointer v3_pointer_pcbnew(
"/netclass_panel/pcbnew_shown_columns"_json_pointer );
643 wxString pcbnewColumnList_old =
m_internals->at( v3_pointer_pcbnew );
645 wxStringTokenizer pcbnewShownTokens( pcbnewColumnList_old,
" \t\r\n" );
646 wxString pcbnewColumnList_new;
648 while( pcbnewShownTokens.HasMoreTokens() )
651 pcbnewShownTokens.GetNextToken().ToLong( &colNumber );
653 if( colNumber >= 10 )
656 pcbnewColumnList_new += wxString::Format( wxT(
"%ld " ), colNumber );
659 pcbnewColumnList_new.Trim(
true );
660 pcbnewColumnList_new.Trim(
false );
662 m_internals->at( v3_pointer_pcbnew ) = pcbnewColumnList_new.ToUTF8();
666 wxLogTrace(
traceSettings, wxT(
"COMMON_SETTINGS::Migrate 3->4: /netclass_panel/shown_columns not found" ) );