21#ifndef _JSON_SETTINGS_H
22#define _JSON_SETTINGS_H
52#define traceSettings wxT( "KICAD_SETTINGS" )
72 JSON_SETTINGS( aFilename, aLocation, aSchemaVersion, true, true, true )
76 bool aCreateIfMissing,
bool aCreateIfDefault,
bool aWriteFile );
82 wxString GetFullFilename()
const;
84 void SetFilename(
const wxString& aFilename ) { m_filename = aFilename; }
92 void SetReadOnly(
bool aReadOnly ) { m_writeFile = !aReadOnly; }
99 nlohmann::json& At(
const std::string& aPath );
100 bool Contains(
const std::string& aPath )
const;
114 virtual bool Store();
121 virtual bool LoadFromFile(
const wxString& aDirectory =
"" );
128 virtual bool SaveToFile(
const wxString& aDirectory =
"",
bool aForce =
false );
133 void ResetToDefaults();
141 std::optional<nlohmann::json> GetJson(
const std::string& aPath )
const;
150 template<
typename ValueType>
151 std::optional<ValueType> Get(
const std::string& aPath )
const;
160 template<
typename ValueType>
161 void Set(
const std::string& aPath, ValueType aVal );
180 virtual bool MigrateFromLegacy( wxConfigBase* aLegacyConfig );
200 m_manager = aManager;
209 static bool SetIfPresent(
const nlohmann::json& aObj,
const std::string& aPath,
218 static bool SetIfPresent(
const nlohmann::json& aObj,
const std::string& aPath,
bool& aTarget );
226 static bool SetIfPresent(
const nlohmann::json& aObj,
const std::string& aPath,
int& aTarget );
234 static bool SetIfPresent(
const nlohmann::json& aObj,
const std::string& aPath ,
235 unsigned int& aTarget );
237 const std::string FormatAsString();
239 bool LoadFromRawFile(
const wxString& aPath );
251 void registerMigration(
int aOldSchemaVersion,
int aNewSchemaVersion,
252 std::function<
bool(
void)> aMigrator );
261 template<
typename ValueType>
262 bool fromLegacy( wxConfigBase* aConfig,
const std::string& aKey,
const std::string& aDest );
270 bool fromLegacyString( wxConfigBase* aConfig,
const std::string& aKey,
271 const std::string& aDest );
279 bool fromLegacyColor( wxConfigBase* aConfig,
const std::string& aKey,
280 const std::string& aDest );
284 return wxT(
"json" );
289 return wxEmptyString;
299 template<
typename ResultType>
300 static ResultType fetchOrDefault(
const nlohmann::json& aJson,
const std::string& aKey,
301 ResultType aDefault = ResultType() );
355template<>
KICOMMON_API void JSON_SETTINGS::Set<wxString>(
const std::string& aPath, wxString aVal );
363extern template std::optional<bool> JSON_SETTINGS::Get<bool>(
const std::string& aPath )
const;
364extern template std::optional<double> JSON_SETTINGS::Get<double>(
const std::string& aPath )
const;
365extern template std::optional<float> JSON_SETTINGS::Get<float>(
const std::string& aPath )
const;
366extern template std::optional<int> JSON_SETTINGS::Get<int>(
const std::string& aPath )
const;
367extern template std::optional<unsigned int> JSON_SETTINGS::Get<unsigned int>(
const std::string& aPath )
const;
368extern template std::optional<unsigned long long> JSON_SETTINGS::Get<unsigned long long>(
const std::string& aPath )
const;
369extern template std::optional<std::string> JSON_SETTINGS::Get<std::string>(
const std::string& aPath )
const;
370extern template std::optional<nlohmann::json> JSON_SETTINGS::Get<nlohmann::json>(
const std::string& aPath )
const;
371extern template std::optional<KIGFX::COLOR4D> JSON_SETTINGS::Get<KIGFX::COLOR4D>(
const std::string& aPath )
const;
372extern template std::optional<BOM_FIELD> JSON_SETTINGS::Get<BOM_FIELD>(
const std::string& aPath )
const;
373extern template std::optional<BOM_PRESET> JSON_SETTINGS::Get<BOM_PRESET>(
const std::string& aPath )
const;
374extern template std::optional<BOM_FMT_PRESET> JSON_SETTINGS::Get<BOM_FMT_PRESET>(
const std::string& aPath )
const;
375extern template std::optional<GRID> JSON_SETTINGS::Get<GRID>(
const std::string& aPath )
const;
376extern template std::optional<wxPoint> JSON_SETTINGS::Get<wxPoint>(
const std::string& aPath )
const;
377extern template std::optional<wxSize> JSON_SETTINGS::Get<wxSize>(
const std::string& aPath )
const;
378extern template std::optional<wxRect> JSON_SETTINGS::Get<wxRect>(
const std::string& aPath )
const;
379extern template std::optional<wxAuiPaneInfo> JSON_SETTINGS::Get<wxAuiPaneInfo>(
const std::string& aPath )
const;
KICAD_PLUGIN_EXPORT SCENEGRAPH * Load(char const *aFileName)
reads a model file and creates a generic display structure
virtual wxString getFileExt() const
wxString m_filename
The filename (not including path) of this settings file (inicode)
SETTINGS_MANAGER * m_manager
A pointer to the settings manager managing this file (may be null)
SETTINGS_LOC GetLocation() const
std::vector< NESTED_SETTINGS * > m_nested_settings
Nested settings files that live inside this one, if any.
bool m_modified
True if the JSON data store has been written to since the last file write.
bool m_createIfDefault
Whether or not the backing store file should be created if all parameters are still at their default ...
void SetLocation(SETTINGS_LOC aLocation)
bool m_writeFile
Whether or not the backing store file should be written.
void SetManager(SETTINGS_MANAGER *aManager)
void SetReadOnly(bool aReadOnly)
bool m_createIfMissing
Whether or not the backing store file should be created it if doesn't exist.
std::optional< ValueType > Get(const std::string &aPath) const
Fetches a value from within the JSON document.
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)
JSON_SETTINGS(const wxString &aFilename, SETTINGS_LOC aLocation, int aSchemaVersion)
bool m_deleteLegacyAfterMigration
Whether or not to delete legacy file after migration.
std::unique_ptr< JSON_SETTINGS_INTERNALS > m_internals
void SetFilename(const wxString &aFilename)
SETTINGS_LOC m_location
The location of this settings file (.
virtual wxString getLegacyFileExt() const
bool m_resetParamsIfMissing
Whether or not to set parameters to their default value if missing from JSON on Load()
void SetLegacyFilename(const wxString &aFilename)
std::map< int, std::pair< int, std::function< bool()> > > m_migrators
A map of starting schema version to a pair of <ending version, migrator function>
int m_schemaVersion
Version of this settings schema.
wxString m_legacy_filename
The filename of the wxConfig legacy file (if different from m_filename)
wxString GetFilename() const
NESTED_SETTINGS is a JSON_SETTINGS that lives inside a JSON_SETTINGS.
KICOMMON_API void to_json(nlohmann::json &aJson, const wxString &aString)
@ PROJECT
The settings directory inside a project folder.
@ USER
The main config directory (e.g. ~/.config/kicad/)
@ COLORS
The color scheme directory (e.g. ~/.config/kicad/colors/)
@ NESTED
Not stored in a file, but inside another JSON_SETTINGS.
@ NONE
No directory prepended, full path in filename (used for PROJECT_FILE)
KICOMMON_API void from_json(const nlohmann::json &aJson, wxString &aString)
The Cairo implementation of the graphics abstraction layer.
Common grid settings, available to every frame.