KiCad PCB EDA Suite
Loading...
Searching...
No Matches
kicad_settings.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2020 Jon Evans <[email protected]>
5 * Copyright (C) 2020, 2024 KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software: you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation, either version 3 of the License, or (at your
10 * option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License along
18 * with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20#include <wx/aui/framemanager.h> // ensure class wxAuiPaneInfo is defined for other includes
21
23#include <nlohmann/json.hpp>
25#include <settings/parameters.h>
26
27
29const int kicadSchemaVersion = 0;
30
31
32const nlohmann::json PCM_DEFAULT_REPOSITORIES = nlohmann::json::array( {
33 nlohmann::json( {
34 { "name", "KiCad official repository" },
36 } )
37} );
38
39
41 APP_SETTINGS_BASE( "kicad", kicadSchemaVersion ), m_LeftWinWidth( 200 )
42{
43 m_params.emplace_back( new PARAM<int>( "appearance.left_frame_width", &m_LeftWinWidth, 200 ) );
44
45 m_params.emplace_back(
46 new PARAM_LIST<wxString>( "system.open_projects", &m_OpenProjects, {} ) );
47
48 m_params.emplace_back( new PARAM<wxString>( "system.last_design_block_lib_dir",
50
51 m_params.emplace_back(
52 new PARAM<wxString>( "system.last_update_check_time", &m_lastUpdateCheckTime, "" ) );
53
54 m_params.emplace_back(
55 new PARAM<wxString>( "system.last_received_update", &m_lastReceivedUpdate, "" ) );
56
57 m_params.emplace_back( new PARAM<bool>( "system.check_for_kicad_updates", &m_KiCadUpdateCheck,
58 true ) );
59
60 m_params.emplace_back( new PARAM<wxPoint>( "template.window.pos", &m_TemplateWindowPos,
61 wxDefaultPosition ) );
62
63 m_params.emplace_back( new PARAM<wxSize>( "template.window.size", &m_TemplateWindowSize, wxDefaultSize ) );
64
65 m_params.emplace_back( new PARAM_LAMBDA<nlohmann::json>(
66 "pcm.repositories",
67 [&]() -> nlohmann::json
68 {
69 nlohmann::json js = nlohmann::json::array();
70
71 for( const auto& pair : m_PcmRepositories )
72 {
73 js.push_back( nlohmann::json( { { "name", pair.first.ToUTF8() },
74 { "url", pair.second.ToUTF8() } } ) );
75 }
76
77 return js;
78 },
79 [&]( const nlohmann::json aObj )
80 {
81 m_PcmRepositories.clear();
82
83 if( !aObj.is_array() )
84 return;
85
86 for( const auto& entry : aObj )
87 {
88 if( entry.empty() || !entry.is_object() )
89 continue;
90
91 m_PcmRepositories.emplace_back(
92 std::make_pair( wxString( entry["name"].get<std::string>() ),
93 wxString( entry["url"].get<std::string>() ) ) );
94 }
95 },
97
98 m_params.emplace_back(
99 new PARAM<wxString>( "pcm.last_download_dir", &m_PcmLastDownloadDir, "" ) );
100
101 m_params.emplace_back( new PARAM<bool>( "pcm.check_for_updates", &m_PcmUpdateCheck, true ) );
102
103 m_params.emplace_back( new PARAM<bool>( "pcm.lib_auto_add", &m_PcmLibAutoAdd, true ) );
104
105 m_params.emplace_back( new PARAM<bool>( "pcm.lib_auto_remove", &m_PcmLibAutoRemove, true ) );
106
107 m_params.emplace_back( new PARAM<wxString>( "pcm.lib_prefix", &m_PcmLibPrefix,
108 wxS( "PCM_" ) ) );
109}
110
111
112bool KICAD_SETTINGS::MigrateFromLegacy( wxConfigBase* aCfg )
113{
114 bool ret = APP_SETTINGS_BASE::MigrateFromLegacy( aCfg );
115
116 ret &= fromLegacy<int>( aCfg, "LeftWinWidth", "appearance.left_frame_width" );
117
118 // Override the size parameters to ensure the new PCM button is always shown.
119 // This will make the window take the default size instead of the migrated one.
120 Set( "window.size_x", 0 );
121 Set( "window.size_y", 0 );
122
123 return ret;
124}
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:92
virtual bool MigrateFromLegacy(wxConfigBase *aCfg) override
Migrates from wxConfig to JSON-based configuration.
void Set(const std::string &aPath, ValueType aVal)
Stores a value into the JSON document Will throw an exception if ValueType isn't something that the l...
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)
wxString m_lastDesignBlockLibDir
wxSize m_TemplateWindowSize
virtual bool MigrateFromLegacy(wxConfigBase *aLegacyConfig) override
Migrates from wxConfig to JSON-based configuration.
wxString m_PcmLibPrefix
wxPoint m_TemplateWindowPos
wxString m_lastUpdateCheckTime
wxString m_PcmLastDownloadDir
std::vector< wxString > m_OpenProjects
std::vector< std::pair< wxString, wxString > > m_PcmRepositories
wxString m_lastReceivedUpdate
Like a normal param, but with custom getter and setter functions.
Definition: parameters.h:295
const nlohmann::json PCM_DEFAULT_REPOSITORIES
const int kicadSchemaVersion
! Update the schema version whenever a migration is required
#define PCM_DEFAULT_REPOSITORY_URL