KiCad PCB EDA Suite
NET_SETTINGS Class Reference

NET_SETTINGS stores various net-related settings in a project context. More...

#include <net_settings.h>

Inheritance diagram for NET_SETTINGS:
NESTED_SETTINGS JSON_SETTINGS

Public Member Functions

 NET_SETTINGS (JSON_SETTINGS *aParent, const std::string &aPath)
 
virtual ~NET_SETTINGS ()
 
const wxString & GetNetclassName (const wxString &aNetName) const
 
void ResolveNetClassAssignments (bool aRebuildFromScratch=false)
 Explodes the list of netclass assignments to include atomic members of composite labels (buses). More...
 
bool LoadFromFile (const wxString &aDirectory="") override
 Loads the JSON document from the parent and then calls Load() More...
 
bool SaveToFile (const wxString &aDirectory="", bool aForce=false) override
 Calls Store() and then saves the JSON document contents into the parent JSON_SETTINGS. More...
 
void SetParent (JSON_SETTINGS *aParent)
 
JSON_SETTINGSGetParent ()
 
wxString GetFilename () const
 
wxString GetFullFilename () const
 
void SetFilename (const wxString &aFilename)
 
SETTINGS_LOC GetLocation () const
 
void SetLegacyFilename (const wxString &aFilename)
 
bool IsReadOnly () const
 
void SetReadOnly (bool aReadOnly)
 
virtual void Load ()
 Updates the parameters of this object based on the current JSON document contents. More...
 
virtual bool Store ()
 Stores the current parameters into the JSON document represented by this object Note: this doesn't do any writing to disk; that's handled by SETTINGS_MANAGER. More...
 
void ResetToDefaults ()
 Resets all parameters to default values. More...
 
OPT< nlohmann::jsonGetJson (const std::string &aPath) const
 Fetches a JSON object that is a subset of this JSON_SETTINGS object, using a path of the form "key1.key2.key3" to refer to nested objects. More...
 
template<typename ValueType >
OPT< ValueType > Get (const std::string &aPath) const
 Fetches a value from within the JSON document. More...
 
template<>
OPT< wxString > Get (const std::string &aPath) const
 
template<typename ValueType >
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 library can handle. More...
 
template<>
void Set (const std::string &aPath, wxString aVal)
 
template<>
void Set (const std::string &aPath, wxString aVal)
 
bool Migrate ()
 Migrates the schema of this settings from the version in the file to the latest version. More...
 
virtual bool MigrateFromLegacy (wxConfigBase *aLegacyConfig)
 Migrates from wxConfig to JSON-based configuration. More...
 
void AddNestedSettings (NESTED_SETTINGS *aSettings)
 Transfers ownership of a given NESTED_SETTINGS to this object. More...
 
void ReleaseNestedSettings (NESTED_SETTINGS *aSettings)
 Saves and frees a nested settings object, if it exists within this one. More...
 
void SetManager (SETTINGS_MANAGER *aManager)
 

Static Public Member Functions

static bool ParseBusVector (const wxString &aBus, wxString *aName, std::vector< wxString > *aMemberList)
 Parses a bus vector (e.g. More...
 
static bool ParseBusGroup (wxString aGroup, wxString *name, std::vector< wxString > *aMemberList)
 Parses a bus group label into the name and a list of components. More...
 
static nlohmann::json::json_pointer PointerFromString (std::string aPath)
 Builds a JSON pointer based on a given string. More...
 
static bool SetIfPresent (const nlohmann::json &aObj, const std::string &aPath, wxString &aTarget)
 Sets the given string if the given key/path is present. More...
 
static bool SetIfPresent (const nlohmann::json &aObj, const std::string &aPath, bool &aTarget)
 Sets the given bool if the given key/path is present. More...
 
static bool SetIfPresent (const nlohmann::json &aObj, const std::string &aPath, int &aTarget)
 Sets the given int if the given key/path is present. More...
 
static bool SetIfPresent (const nlohmann::json &aObj, const std::string &aPath, unsigned int &aTarget)
 Sets the given unsigned int if the given key/path is present. More...
 

Public Attributes

NETCLASSES m_NetClasses
 
std::map< wxString, wxString > m_NetClassAssignments
 
std::map< wxString, KIGFX::COLOR4Dm_PcbNetColors
 A map of fully-qualified net names to colors used in the board context. More...
 

Protected Member Functions

void registerMigration (int aOldSchemaVersion, int aNewSchemaVersion, std::function< bool(void)> aMigrator)
 Registers a migration from one schema version to another. More...
 
template<typename ValueType >
bool fromLegacy (wxConfigBase *aConfig, const std::string &aKey, const std::string &aDest)
 Translates a legacy wxConfig value to a given JSON pointer value. More...
 
bool fromLegacyString (wxConfigBase *aConfig, const std::string &aKey, const std::string &aDest)
 Translates a legacy wxConfig string value to a given JSON pointer value. More...
 
bool fromLegacyColor (wxConfigBase *aConfig, const std::string &aKey, const std::string &aDest)
 Translates a legacy COLOR4D stored in a wxConfig string to a given JSON pointer value. More...
 
virtual wxString getFileExt () const
 
virtual wxString getLegacyFileExt () const
 

Protected Attributes

JSON_SETTINGSm_parent
 A pointer to the parent object to load and store from. More...
 
std::string m_path
 The path (in pointer format) of where to store this document in the parent. More...
 
wxString m_filename
 The filename (not including path) of this settings file (inicode) More...
 
wxString m_legacy_filename
 The filename of the wxConfig legacy file (if different from m_filename) More...
 
SETTINGS_LOC m_location
 The location of this settings file (. More...
 
std::vector< PARAM_BASE * > m_params
 The list of parameters (owned by this object) More...
 
std::vector< NESTED_SETTINGS * > m_nested_settings
 Nested settings files that live inside this one, if any. More...
 
bool m_createIfMissing
 Whether or not the backing store file should be created it if doesn't exist. More...
 
bool m_createIfDefault
 Whether or not the backing store file should be created if all parameters are still at their default values. More...
 
bool m_writeFile
 Whether or not the backing store file should be written. More...
 
bool m_deleteLegacyAfterMigration
 Whether or not to delete legacy file after migration. More...
 
bool m_resetParamsIfMissing
 Whether or not to set parameters to their default value if missing from JSON on Load() More...
 
int m_schemaVersion
 Version of this settings schema. More...
 
SETTINGS_MANAGERm_manager
 A pointer to the settings manager managing this file (may be null) More...
 
std::vector< nlohmann::json::json_pointer > m_preserved_paths
 A list of JSON pointers that are preserved during a read-update-write to disk. More...
 
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> More...
 

Detailed Description

NET_SETTINGS stores various net-related settings in a project context.

These settings are accessible and editable from both the schematic and PCB editors.

Definition at line 31 of file net_settings.h.

Constructor & Destructor Documentation

◆ NET_SETTINGS()

NET_SETTINGS::NET_SETTINGS ( JSON_SETTINGS aParent,
const std::string &  aPath 
)

Definition at line 37 of file net_settings.cpp.

37  :
38  NESTED_SETTINGS( "net_settings", netSettingsSchemaVersion, aParent, aPath ),
39  m_NetClasses()
40 {
41  m_params.emplace_back( new PARAM_LAMBDA<nlohmann::json>( "classes",
42  [&]() -> nlohmann::json
43  {
44  nlohmann::json ret = nlohmann::json::array();
45 
46  NETCLASSPTR netclass = m_NetClasses.GetDefault();
48 
49  for( unsigned int idx = 0; idx <= m_NetClasses.GetCount(); idx++ )
50  {
51  if( idx > 0 )
52  {
53  netclass = nc->second;
54  ++nc;
55  }
56 
57  // Note: we're in common/, but we do happen to know which of these fields
58  // are used in which units system.
59  nlohmann::json netclassJson = {
60  { "name", netclass->GetName().ToUTF8() },
61  { "wire_width", SchIu2Mils( netclass->GetWireWidth() ) },
62  { "bus_width", SchIu2Mils( netclass->GetBusWidth() ) },
63  { "line_style", netclass->GetLineStyle() },
64  { "schematic_color", netclass->GetSchematicColor() },
65  { "pcb_color", netclass->GetPcbColor() }
66  };
67 
68 
69  if( netclass->HasClearance() )
70  netclassJson.push_back( { "clearance", PcbIu2Millimeter( netclass->GetClearance() ) } );
71 
72  if( netclass->HasTrackWidth() )
73  netclassJson.push_back( { "track_width", PcbIu2Millimeter( netclass->GetTrackWidth() ) } );
74 
75  if( netclass->HasViaDiameter() )
76  netclassJson.push_back( { "via_diameter", PcbIu2Millimeter( netclass->GetViaDiameter() ) } );
77 
78  if( netclass->HasViaDrill() )
79  netclassJson.push_back( { "via_drill", PcbIu2Millimeter( netclass->GetViaDrill() ) } );
80 
81  if( netclass->HasuViaDiameter() )
82  netclassJson.push_back( { "microvia_diameter", PcbIu2Millimeter( netclass->GetuViaDiameter() ) } );
83 
84  if( netclass->HasuViaDrill() )
85  netclassJson.push_back( { "microvia_drill", PcbIu2Millimeter( netclass->GetuViaDrill() ) } );
86 
87  if( netclass->HasDiffPairWidth() )
88  netclassJson.push_back( { "diff_pair_width", PcbIu2Millimeter( netclass->GetDiffPairWidth() ) } );
89 
90  if( netclass->HasDiffPairGap() )
91  netclassJson.push_back( { "diff_pair_gap", PcbIu2Millimeter( netclass->GetDiffPairGap() ) } );
92 
93  if( netclass->HasDiffPairViaGap() )
94  netclassJson.push_back( { "diff_pair_via_gap", PcbIu2Millimeter( netclass->GetDiffPairViaGap() ) } );
95 
96  if( idx > 0 ) // No need to store members of Default netclass
97  {
98  nlohmann::json membersJson = nlohmann::json::array();
99 
100  for( const wxString& member : *netclass )
101  {
102  if( !member.empty() )
103  membersJson.push_back( member );
104  }
105 
106  netclassJson["nets"] = membersJson;
107  }
108 
109  ret.push_back( netclassJson );
110  }
111 
112  return ret;
113  },
114  [&]( const nlohmann::json& aJson )
115  {
116  if( !aJson.is_array() )
117  return;
118 
120  m_NetClassAssignments.clear();
121  NETCLASSPTR netclass;
122  NETCLASSPTR defaultClass = m_NetClasses.GetDefault();
123 
124  auto getInSchematicUnits =
125  []( const nlohmann::json& aObj, const std::string& aKey, int aDefault )
126  {
127  if( aObj.contains( aKey ) && aObj[aKey].is_number() )
128  return SchMils2iu( aObj[aKey].get<double>() );
129  else
130  return aDefault;
131  };
132 
133  for( const nlohmann::json& entry : aJson )
134  {
135  if( !entry.is_object() || !entry.contains( "name" ) )
136  continue;
137 
138  wxString name = entry["name"];
139 
140  if( name == defaultClass->GetName() )
141  netclass = defaultClass;
142  else
143  netclass = std::make_shared<NETCLASS>( name );
144 
145  if( auto value = getInPcbUnits( entry, "clearance" ) )
146  netclass->SetClearance( *value );
147 
148  if( auto value = getInPcbUnits( entry, "track_width" ) )
149  netclass->SetTrackWidth( *value );
150 
151  if( auto value = getInPcbUnits( entry, "via_diameter" ) )
152  netclass->SetViaDiameter( *value );
153 
154  if( auto value = getInPcbUnits( entry, "via_drill" ) )
155  netclass->SetViaDrill( *value );
156 
157  if( auto value = getInPcbUnits( entry, "microvia_diameter" ) )
158  netclass->SetuViaDiameter( *value );
159 
160  if( auto value = getInPcbUnits( entry, "microvia_drill" ) )
161  netclass->SetuViaDrill( *value );
162 
163  if( auto value = getInPcbUnits( entry, "diff_pair_width" ) )
164  netclass->SetDiffPairWidth( *value );
165 
166  if( auto value = getInPcbUnits( entry, "diff_pair_gap" ) )
167  netclass->SetDiffPairGap( *value );
168 
169  if( auto value = getInPcbUnits( entry, "diff_pair_via_gap" ) )
170  netclass->SetDiffPairViaGap( *value );
171 
172  netclass->SetWireWidth( getInSchematicUnits( entry, "wire_width",
173  netclass->GetWireWidth() ) );
174  netclass->SetBusWidth( getInSchematicUnits( entry, "bus_width",
175  netclass->GetWireWidth() ) );
176 
177  if( entry.contains( "line_style" ) && entry["line_style"].is_number() )
178  netclass->SetLineStyle( entry["line_style"].get<int>() );
179 
180  if( entry.contains( "nets" ) && entry["nets"].is_array() )
181  {
182  for( const auto& net : entry["nets"].items() )
183  netclass->Add( net.value().get<wxString>() );
184  }
185 
186  if( entry.contains( "pcb_color" ) && entry["pcb_color"].is_string() )
187  netclass->SetPcbColor( entry["pcb_color"].get<KIGFX::COLOR4D>() );
188 
189  if( entry.contains( "schematic_color" ) && entry["schematic_color"].is_string() )
190  netclass->SetSchematicColor( entry["schematic_color"].get<KIGFX::COLOR4D>() );
191 
192  if( netclass != defaultClass )
193  m_NetClasses.Add( netclass );
194 
195  for( const wxString& net : *netclass )
196  m_NetClassAssignments[ net ] = netclass->GetName();
197  }
198 
200  },
201  {} ) );
202 
203  m_params.emplace_back( new PARAM_LAMBDA<nlohmann::json>( "net_colors",
204  [&]() -> nlohmann::json
205  {
206  nlohmann::json ret = {};
207 
208  for( const auto& pair : m_PcbNetColors )
209  {
210  std::string key( pair.first.ToUTF8() );
211  ret[key] = pair.second;
212  }
213 
214  return ret;
215  },
216  [&]( const nlohmann::json& aJson )
217  {
218  if( !aJson.is_object() )
219  return;
220 
221  m_PcbNetColors.clear();
222 
223  for( const auto& pair : aJson.items() )
224  {
225  wxString key( pair.key().c_str(), wxConvUTF8 );
226  m_PcbNetColors[key] = pair.value().get<KIGFX::COLOR4D>();
227  }
228  },
229  {} ) );
230 }
std::map< wxString, wxString > m_NetClassAssignments
Definition: net_settings.h:43
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)
std::map< wxString, KIGFX::COLOR4D > m_PcbNetColors
A map of fully-qualified net names to colors used in the board context.
Definition: net_settings.h:51
nlohmann::json json
Definition: gerbview.cpp:39
NETCLASS_MAP::const_iterator const_iterator
Definition: netclass.h:249
iterator begin()
Definition: netclass.h:246
NETCLASSES m_NetClasses
Definition: net_settings.h:39
void ResolveNetClassAssignments(bool aRebuildFromScratch=false)
Explodes the list of netclass assignments to include atomic members of composite labels (buses).
constexpr double SchIu2Mils(int iu)
bool Add(const NETCLASSPTR &aNetclass)
Function Add takes aNetclass and puts it into this NETCLASSES container.
Definition: netclass.cpp:90
void Clear()
Function Clear destroys any contained NETCLASS instances except the Default one, and clears any membe...
Definition: netclass.h:239
const char * name
Definition: DXF_plotter.cpp:59
NESTED_SETTINGS(const std::string &aName, int aSchemaVersion, JSON_SETTINGS *aParent, const std::string &aPath)
unsigned GetCount() const
Function GetCount.
Definition: netclass.h:257
NETCLASSPTR GetDefault() const
Function GetDefault.
Definition: netclass.h:266
static OPT< int > getInPcbUnits(const nlohmann::json &aObj, const std::string &aKey, OPT< int > aDefault=OPT< int >())
constexpr int SchMils2iu(int mils)
const int netSettingsSchemaVersion
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:100

References NETCLASSES::Add(), NETCLASSES::begin(), NETCLASSES::Clear(), NETCLASSES::GetCount(), NETCLASSES::GetDefault(), getInPcbUnits(), m_NetClassAssignments, m_NetClasses, JSON_SETTINGS::m_params, m_PcbNetColors, name, ResolveNetClassAssignments(), SchIu2Mils(), and SchMils2iu().

◆ ~NET_SETTINGS()

NET_SETTINGS::~NET_SETTINGS ( )
virtual

Definition at line 233 of file net_settings.cpp.

234 {
235  // Release early before destroying members
236  if( m_parent )
237  {
239  m_parent = nullptr;
240  }
241 }
JSON_SETTINGS * m_parent
A pointer to the parent object to load and store from.
void ReleaseNestedSettings(NESTED_SETTINGS *aSettings)
Saves and frees a nested settings object, if it exists within this one.

References NESTED_SETTINGS::m_parent, and JSON_SETTINGS::ReleaseNestedSettings().

Member Function Documentation

◆ AddNestedSettings()

void JSON_SETTINGS::AddNestedSettings ( NESTED_SETTINGS aSettings)
inherited

Transfers ownership of a given NESTED_SETTINGS to this object.

Can be used to construct a NESTED_SETTINGS without the parent object needing to know about the implementation of the nested object;

Parameters
aSettingsis the settings object to take ownership of
aTargetis a pointer to update to the passed in settings

Definition at line 656 of file json_settings.cpp.

657 {
658  wxLogTrace( traceSettings, "AddNestedSettings %s", aSettings->GetFilename() );
659  m_nested_settings.push_back( aSettings );
660 }
wxString GetFilename() const
Definition: json_settings.h:64
std::vector< NESTED_SETTINGS * > m_nested_settings
Nested settings files that live inside this one, if any.
const wxChar *const traceSettings
Flag to enable debug output of settings operations and management.

References JSON_SETTINGS::GetFilename(), JSON_SETTINGS::m_nested_settings, and traceSettings.

Referenced by NESTED_SETTINGS::SetParent().

◆ fromLegacy()

template<typename ValueType >
template bool JSON_SETTINGS::fromLegacy< bool > ( wxConfigBase *  aConfig,
const std::string &  aKey,
const std::string &  aDest 
)
protectedinherited

Translates a legacy wxConfig value to a given JSON pointer value.

Template Parameters
ValueTypeis the basic type of the value
Parameters
aConfigis the legacy config to read from
aKeyis the key (within the current path) to read
aDestis a string that will form a JSON pointer (key1.key2.key3) to write to

Definition at line 568 of file json_settings.cpp.

570 {
571  ValueType val;
572 
573  if( aConfig->Read( aKey, &val ) )
574  {
575  try
576  {
577  ( *this )[PointerFromString( aDest )] = val;
578  }
579  catch( ... )
580  {
581  wxASSERT_MSG( false, wxT( "Could not write value in fromLegacy!" ) );
582  return false;
583  }
584 
585  return true;
586  }
587 
588  return false;
589 }
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References JSON_SETTINGS::PointerFromString().

◆ fromLegacyColor()

bool JSON_SETTINGS::fromLegacyColor ( wxConfigBase *  aConfig,
const std::string &  aKey,
const std::string &  aDest 
)
protectedinherited

Translates a legacy COLOR4D stored in a wxConfig string to a given JSON pointer value.

Parameters
aConfigis the legacy config to read from
aKeyis the key (within the current path) to read
aDestis a string that will form a JSON pointer (key1.key2.key3) to write to

Definition at line 628 of file json_settings.cpp.

630 {
631  wxString str;
632 
633  if( aConfig->Read( aKey, &str ) )
634  {
636  color.SetFromWxString( str );
637 
638  try
639  {
640  nlohmann::json js = nlohmann::json::array( { color.r, color.g, color.b, color.a } );
641  ( *this )[PointerFromString( aDest )] = js;
642  }
643  catch( ... )
644  {
645  wxASSERT_MSG( false, wxT( "Could not write value in fromLegacyColor!" ) );
646  return false;
647  }
648 
649  return true;
650  }
651 
652  return false;
653 }
int color
Definition: DXF_plotter.cpp:60
nlohmann::json json
Definition: gerbview.cpp:39
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:100

References color, and JSON_SETTINGS::PointerFromString().

Referenced by APP_SETTINGS_BASE::migrateWindowConfig().

◆ fromLegacyString()

bool JSON_SETTINGS::fromLegacyString ( wxConfigBase *  aConfig,
const std::string &  aKey,
const std::string &  aDest 
)
protectedinherited

Translates a legacy wxConfig string value to a given JSON pointer value.

Parameters
aConfigis the legacy config to read from
aKeyis the key (within the current path) to read
aDestis a string that will form a JSON pointer (key1.key2.key3) to write to

Definition at line 604 of file json_settings.cpp.

606 {
607  wxString str;
608 
609  if( aConfig->Read( aKey, &str ) )
610  {
611  try
612  {
613  ( *this )[PointerFromString( aDest )] = str.ToUTF8();
614  }
615  catch( ... )
616  {
617  wxASSERT_MSG( false, wxT( "Could not write value in fromLegacyString!" ) );
618  return false;
619  }
620 
621  return true;
622  }
623 
624  return false;
625 }
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References JSON_SETTINGS::PointerFromString().

Referenced by BITMAP2CMP_SETTINGS::MigrateFromLegacy(), FOOTPRINT_EDITOR_SETTINGS::MigrateFromLegacy(), GERBVIEW_SETTINGS::MigrateFromLegacy(), SYMBOL_EDITOR_SETTINGS::MigrateFromLegacy(), PROJECT_FILE::MigrateFromLegacy(), COMMON_SETTINGS::MigrateFromLegacy(), PCB_CALCULATOR_SETTINGS::MigrateFromLegacy(), APP_SETTINGS_BASE::MigrateFromLegacy(), EESCHEMA_SETTINGS::MigrateFromLegacy(), PCBNEW_SETTINGS::MigrateFromLegacy(), and APP_SETTINGS_BASE::migrateWindowConfig().

◆ Get() [1/2]

template<typename ValueType >
OPT<ValueType> JSON_SETTINGS::Get ( const std::string &  aPath) const
inlineinherited

Fetches a value from within the JSON document.

Will return an empty optional if the value is not found or a mismatching type.

Template Parameters
ValueTypeis the type to cast to
Parameters
aPathis the path within the document to retrieve
Returns
a value from within this document

Definition at line 124 of file json_settings.h.

125  {
126  if( OPT<nlohmann::json> ret = GetJson( aPath ) )
127  {
128  try
129  {
130  return ret->get<ValueType>();
131  }
132  catch( ... )
133  {
134  }
135  }
136 
137  return NULLOPT;
138  }
OPT< nlohmann::json > GetJson(const std::string &aPath) const
Fetches a JSON object that is a subset of this JSON_SETTINGS object, using a path of the form "key1....
const auto NULLOPT
Definition: optional.h:9
boost::optional< T > OPT
Definition: optional.h:7

References JSON_SETTINGS::GetJson(), and NULLOPT.

Referenced by PARAM< wxString >::Load(), COLOR_MAP_PARAM::Load(), PARAM_ENUM< EnumType >::Load(), PARAM_LAMBDA< nlohmann::json >::Load(), PARAM_SCALED< ValueType >::Load(), BOARD_DESIGN_SETTINGS::LoadFromFile(), PARAM< wxString >::MatchesFile(), COLOR_MAP_PARAM::MatchesFile(), PARAM_PATH::MatchesFile(), PARAM_ENUM< EnumType >::MatchesFile(), PARAM_LAMBDA< nlohmann::json >::MatchesFile(), and PARAM_SCALED< ValueType >::MatchesFile().

◆ Get() [2/2]

OPT< wxString > JSON_SETTINGS::Get ( const std::string &  aPath) const
inherited

Definition at line 686 of file json_settings.cpp.

687 {
688  if( OPT<nlohmann::json> opt_json = GetJson( aPath ) )
689  return wxString( opt_json->get<std::string>().c_str(), wxConvUTF8 );
690 
691  return NULLOPT;
692 }
OPT< nlohmann::json > GetJson(const std::string &aPath) const
Fetches a JSON object that is a subset of this JSON_SETTINGS object, using a path of the form "key1....
const auto NULLOPT
Definition: optional.h:9
boost::optional< T > OPT
Definition: optional.h:7

References JSON_SETTINGS::GetJson(), and NULLOPT.

◆ getFileExt()

virtual wxString JSON_SETTINGS::getFileExt ( ) const
inlineprotectedvirtualinherited

Reimplemented in PROJECT_FILE, and PROJECT_LOCAL_SETTINGS.

Definition at line 274 of file json_settings.h.

275  {
276  return wxT( "json" );
277  }

Referenced by JSON_SETTINGS::GetFullFilename(), JSON_SETTINGS::LoadFromFile(), and JSON_SETTINGS::SaveToFile().

◆ GetFilename()

◆ GetFullFilename()

wxString JSON_SETTINGS::GetFullFilename ( ) const
inherited

Definition at line 79 of file json_settings.cpp.

80 {
81  return wxString( m_filename + "." + getFileExt() );
82 }
wxString m_filename
The filename (not including path) of this settings file (inicode)
virtual wxString getFileExt() const

References JSON_SETTINGS::getFileExt(), and JSON_SETTINGS::m_filename.

Referenced by JSON_SETTINGS::JSON_SETTINGS(), NESTED_SETTINGS::LoadFromFile(), JSON_SETTINGS::LoadFromFile(), and JSON_SETTINGS::SaveToFile().

◆ GetJson()

OPT< nlohmann::json > JSON_SETTINGS::GetJson ( const std::string &  aPath) const
inherited

Fetches a JSON object that is a subset of this JSON_SETTINGS object, using a path of the form "key1.key2.key3" to refer to nested objects.

Parameters
aPathis a string containing one or more keys separated by '.'
Returns
a JSON object from within this one

Definition at line 417 of file json_settings.cpp.

418 {
419  nlohmann::json::json_pointer ptr = PointerFromString( aPath );
420 
421  if( this->contains( ptr ) )
422  {
423  try
424  {
425  return OPT<nlohmann::json>{ this->at( ptr ) };
426  }
427  catch( ... )
428  {
429  }
430  }
431 
432  return OPT<nlohmann::json>{};
433 }
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
Definition: kicad_algo.h:81
boost::optional< T > OPT
Definition: optional.h:7
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References alg::contains(), and JSON_SETTINGS::PointerFromString().

Referenced by JSON_SETTINGS::Get(), PARAM_LAMBDA< nlohmann::json >::Load(), PARAM_LIST< wxString >::Load(), PARAM_MAP< Value >::Load(), PARAM_WXSTRING_MAP::Load(), PARAM_LAMBDA< nlohmann::json >::MatchesFile(), PARAM_LIST< wxString >::MatchesFile(), PARAM_PATH_LIST::MatchesFile(), PARAM_MAP< Value >::MatchesFile(), and PARAM_WXSTRING_MAP::MatchesFile().

◆ getLegacyFileExt()

virtual wxString JSON_SETTINGS::getLegacyFileExt ( ) const
inlineprotectedvirtualinherited

Reimplemented in PROJECT_FILE, and PROJECT_LOCAL_SETTINGS.

Definition at line 279 of file json_settings.h.

280  {
281  return wxEmptyString;
282  }

Referenced by JSON_SETTINGS::LoadFromFile().

◆ GetLocation()

SETTINGS_LOC JSON_SETTINGS::GetLocation ( ) const
inlineinherited

Definition at line 70 of file json_settings.h.

70 { return m_location; }
SETTINGS_LOC m_location
The location of this settings file (.

References JSON_SETTINGS::m_location.

Referenced by SETTINGS_MANAGER::GetPathForSettingsFile().

◆ GetNetclassName()

const wxString & NET_SETTINGS::GetNetclassName ( const wxString &  aNetName) const

Definition at line 244 of file net_settings.cpp.

245 {
246  static wxString defaultNetname = NETCLASS::Default;
247 
248  auto it = m_NetClassAssignments.find( aNetName );
249 
250  if( it == m_NetClassAssignments.end() )
251  return defaultNetname;
252  else
253  return it->second;
254 }
std::map< wxString, wxString > m_NetClassAssignments
Definition: net_settings.h:43
static const char Default[]
the name of the default NETCLASS
Definition: netclass.h:80

References NETCLASS::Default, and m_NetClassAssignments.

Referenced by SCH_EDITOR_CONTROL::AssignNetclass(), SCH_ITEM::NetClass(), and BOARD::SynchronizeNetsAndNetClasses().

◆ GetParent()

JSON_SETTINGS* NESTED_SETTINGS::GetParent ( void  )
inlineinherited

Definition at line 54 of file nested_settings.h.

55  {
56  return m_parent;
57  }
JSON_SETTINGS * m_parent
A pointer to the parent object to load and store from.

References NESTED_SETTINGS::m_parent.

Referenced by BOARD_DESIGN_SETTINGS::LoadFromFile().

◆ IsReadOnly()

bool JSON_SETTINGS::IsReadOnly ( ) const
inlineinherited

◆ Load()

void JSON_SETTINGS::Load ( )
virtualinherited

Updates the parameters of this object based on the current JSON document contents.

Definition at line 85 of file json_settings.cpp.

86 {
87  for( auto param : m_params )
88  {
89  try
90  {
91  param->Load( this, m_resetParamsIfMissing );
92  }
93  catch( ... )
94  {
95  // Skip unreadable parameters in file
96  wxLogTrace( traceSettings, "param '%s' load err", param->GetJsonPath().c_str() );
97  }
98  }
99 }
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)
bool m_resetParamsIfMissing
Whether or not to set parameters to their default value if missing from JSON on Load()
const wxChar *const traceSettings
Flag to enable debug output of settings operations and management.

References JSON_SETTINGS::m_params, JSON_SETTINGS::m_resetParamsIfMissing, and traceSettings.

Referenced by COLOR_SETTINGS::CreateBuiltinColorSettings(), NESTED_SETTINGS::LoadFromFile(), JSON_SETTINGS::LoadFromFile(), BOARD_DESIGN_SETTINGS::LoadFromFile(), COLOR_SETTINGS::migrateSchema0to1(), and SETTINGS_MANAGER::SaveColorSettings().

◆ LoadFromFile()

bool NESTED_SETTINGS::LoadFromFile ( const wxString &  aDirectory = "")
overridevirtualinherited

Loads the JSON document from the parent and then calls Load()

Parameters
aDirectory

Reimplemented from JSON_SETTINGS.

Definition at line 42 of file nested_settings.cpp.

43 {
44  clear();
45  bool success = false;
46 
47  if( m_parent )
48  {
49  nlohmann::json::json_pointer ptr = PointerFromString( m_path );
50 
51  if( m_parent->contains( ptr ) )
52  {
53  try
54  {
55  update( ( *m_parent )[ptr] );
56 
57  wxLogTrace( traceSettings, "Loaded NESTED_SETTINGS %s with schema %d",
59 
60  success = true;
61  }
62  catch( ... )
63  {
64  wxLogTrace( traceSettings, "NESTED_SETTINGS %s: Could not load from %s at %s",
66  }
67  }
68  }
69 
70  if( success )
71  {
72  int filever = -1;
73 
74  if( count( PointerFromString( "meta.version" ) ) )
75  {
76  try
77  {
78  filever = at( PointerFromString( "meta.version" ) ).get<int>();
79  }
80  catch( ... )
81  {
82  wxLogTrace( traceSettings, "%s: nested settings version could not be read!",
83  m_filename );
84  success = false;
85  }
86  }
87  else
88  {
89  success = false;
90  }
91 
92  if( filever >= 0 && filever < m_schemaVersion )
93  {
94  wxLogTrace( traceSettings, "%s: attempting migration from version %d to %d",
95  m_filename, filever, m_schemaVersion );
96 
97  if( !Migrate() )
98  {
99  wxLogTrace( traceSettings, "%s: migration failed!", GetFullFilename() );
100  success = false;
101  }
102  }
103  else if( filever > m_schemaVersion )
104  {
105  wxLogTrace( traceSettings,
106  "%s: warning: nested settings version %d is newer than latest (%d)",
107  m_filename, filever, m_schemaVersion );
108  }
109  }
110 
111  Load();
112 
113  return success;
114 }
wxString GetFilename() const
Definition: json_settings.h:64
wxString GetFullFilename() const
wxString m_filename
The filename (not including path) of this settings file (inicode)
bool Migrate()
Migrates the schema of this settings from the version in the file to the latest version.
JSON_SETTINGS * m_parent
A pointer to the parent object to load and store from.
std::string m_path
The path (in pointer format) of where to store this document in the parent.
const wxChar *const traceSettings
Flag to enable debug output of settings operations and management.
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.
int m_schemaVersion
Version of this settings schema.
virtual void Load()
Updates the parameters of this object based on the current JSON document contents.

References MULTIVECTOR< T, FIRST_TYPE_VAL, LAST_TYPE_VAL >::clear(), JSON_SETTINGS::GetFilename(), JSON_SETTINGS::GetFullFilename(), JSON_SETTINGS::Load(), JSON_SETTINGS::m_filename, NESTED_SETTINGS::m_parent, NESTED_SETTINGS::m_path, JSON_SETTINGS::m_schemaVersion, JSON_SETTINGS::Migrate(), JSON_SETTINGS::PointerFromString(), and traceSettings.

Referenced by BOARD_DESIGN_SETTINGS::LoadFromFile(), DIALOG_SCHEMATIC_SETUP::OnAuxiliaryAction(), PNS::ROUTING_SETTINGS::ROUTING_SETTINGS(), NESTED_SETTINGS::SetParent(), and SCHEMATIC::SetProject().

◆ Migrate()

bool JSON_SETTINGS::Migrate ( )
inherited

Migrates the schema of this settings from the version in the file to the latest version.

Schema migration doesn't need to be used every time a setting is added! This is intended to be more of an "escape hatch" in the event that we decide to move settings around or make other changes to a settings file format that can't simply be handled by loading a new default

Returns
true if migration was successful

Definition at line 445 of file json_settings.cpp.

446 {
447  int filever = at( PointerFromString( "meta.version" ) ).get<int>();
448 
449  while( filever < m_schemaVersion )
450  {
451  if( !m_migrators.count( filever ) )
452  {
453  wxLogTrace( traceSettings, "Migrator missing for %s version %d!",
454  typeid( *this ).name(), filever );
455  return false;
456  }
457 
458  std::pair<int, std::function<bool()>> pair = m_migrators.at( filever );
459 
460  if( pair.second() )
461  {
462  wxLogTrace( traceSettings, "Migrated %s from %d to %d", typeid( *this ).name(),
463  filever, pair.first );
464  filever = pair.first;
465  ( *this )[PointerFromString( "meta.version" )] = filever;
466  }
467  else
468  {
469  wxLogTrace( traceSettings, "Migration failed for %s from %d to %d",
470  typeid( *this ).name(), filever, pair.first );
471  return false;
472  }
473  }
474 
475  return true;
476 }
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>
const wxChar *const traceSettings
Flag to enable debug output of settings operations and management.
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.
int m_schemaVersion
Version of this settings schema.

References JSON_SETTINGS::m_migrators, JSON_SETTINGS::m_schemaVersion, JSON_SETTINGS::PointerFromString(), and traceSettings.

Referenced by NESTED_SETTINGS::LoadFromFile(), and JSON_SETTINGS::LoadFromFile().

◆ MigrateFromLegacy()

bool JSON_SETTINGS::MigrateFromLegacy ( wxConfigBase *  aLegacyConfig)
virtualinherited

Migrates from wxConfig to JSON-based configuration.

Should be implemented by any subclasses of JSON_SETTINGS that map to a legacy (wxConfig-based) config file.

Parameters
aLegacyConfigis a wxConfigBase holding a loaded configuration to migrate
Returns
true if migration was successful

Reimplemented in PCBNEW_SETTINGS, EESCHEMA_SETTINGS, APP_SETTINGS_BASE, PCB_CALCULATOR_SETTINGS, COMMON_SETTINGS, EDA_3D_VIEWER_SETTINGS, PROJECT_FILE, COLOR_SETTINGS, PROJECT_LOCAL_SETTINGS, SYMBOL_EDITOR_SETTINGS, GERBVIEW_SETTINGS, FOOTPRINT_EDITOR_SETTINGS, CVPCB_SETTINGS, BITMAP2CMP_SETTINGS, PL_EDITOR_SETTINGS, and KICAD_SETTINGS.

Definition at line 479 of file json_settings.cpp.

480 {
481  wxLogTrace( traceSettings,
482  "MigrateFromLegacy() not implemented for %s", typeid( *this ).name() );
483  return false;
484 }
const wxChar *const traceSettings
Flag to enable debug output of settings operations and management.

References traceSettings.

Referenced by JSON_SETTINGS::LoadFromFile().

◆ ParseBusGroup()

bool NET_SETTINGS::ParseBusGroup ( wxString  aGroup,
wxString *  name,
std::vector< wxString > *  aMemberList 
)
static

Parses a bus group label into the name and a list of components.

Parameters
aGroupis the input label, e.g. "USB{DP DM}"
nameis the output group name, e.g. "USB"
aMemberListis a list of member strings, e.g. "DP", "DM"
Returns
true if aGroup was successfully parsed

Definition at line 398 of file net_settings.cpp.

400 {
401  size_t groupLen = aGroup.length();
402  size_t i = 0;
403  wxString prefix;
404  wxString suffix;
405  wxString tmp;
406  int braceNesting = 0;
407 
408  prefix.reserve( groupLen );
409 
410  // Parse prefix
411  //
412  for( ; i < groupLen; ++i )
413  {
414  if( aGroup[i] == '{' )
415  {
416  if( i > 0 && isSuperSub( aGroup[i-1] ) )
417  braceNesting++;
418  else
419  break;
420  }
421  else if( aGroup[i] == '}' )
422  {
423  braceNesting--;
424  }
425 
426  if( aGroup[i] == ' ' || aGroup[i] == '[' || aGroup[i] == ']' )
427  return false;
428 
429  prefix += aGroup[i];
430  }
431 
432  if( braceNesting != 0 )
433  return false;
434 
435  if( aName )
436  *aName = prefix;
437 
438  // Parse members
439  //
440  i++; // '{' character
441 
442  if( i >= groupLen )
443  return false;
444 
445  for( ; i < groupLen; ++i )
446  {
447  if( aGroup[i] == '{' )
448  {
449  if( i > 0 && isSuperSub( aGroup[i-1] ) )
450  braceNesting++;
451  else
452  return false;
453  }
454  else if( aGroup[i] == '}' )
455  {
456  if( braceNesting )
457  braceNesting--;
458  else
459  {
460  if( aMemberList )
461  aMemberList->push_back( tmp );
462 
463  return true;
464  }
465  }
466 
467  if( aGroup[i] == ' ' )
468  {
469  if( aMemberList )
470  aMemberList->push_back( tmp );
471 
472  tmp.Clear();
473  continue;
474  }
475 
476  tmp += aGroup[i];
477  }
478 
479  return false;
480 }
static bool isSuperSub(wxChar c)

References isSuperSub().

Referenced by SCH_CONNECTION::AppendInfoToMsgPanel(), SCH_CONNECTION::ConfigureFromLabel(), SCH_CONNECTION::IsBusLabel(), SCH_NETNAME_VALIDATOR::IsValid(), and ResolveNetClassAssignments().

◆ ParseBusVector()

bool NET_SETTINGS::ParseBusVector ( const wxString &  aBus,
wxString *  aName,
std::vector< wxString > *  aMemberList 
)
static

Parses a bus vector (e.g.

A[7..0]) into name, begin, and end. Ensures that begin and end are positive and that end > begin.

Parameters
aBusis a bus vector label string
aNameout is the bus name, e.g. "A"
aMemberListis a list of member strings, e.g. "A7", "A6", and so on
Returns
true if aBus was successfully parsed

Definition at line 263 of file net_settings.cpp.

265 {
266  auto isDigit = []( wxChar c )
267  {
268  static wxString digits( wxT( "0123456789" ) );
269  return digits.Contains( c );
270  };
271 
272  size_t busLen = aBus.length();
273  size_t i = 0;
274  wxString prefix;
275  wxString suffix;
276  wxString tmp;
277  long begin = 0;
278  long end = 0;
279  int braceNesting = 0;
280 
281  prefix.reserve( busLen );
282 
283  // Parse prefix
284  //
285  for( ; i < busLen; ++i )
286  {
287  if( aBus[i] == '{' )
288  {
289  if( i > 0 && isSuperSub( aBus[i-1] ) )
290  braceNesting++;
291  else
292  return false;
293  }
294  else if( aBus[i] == '}' )
295  {
296  braceNesting--;
297  }
298 
299  if( aBus[i] == ' ' || aBus[i] == ']' )
300  return false;
301 
302  if( aBus[i] == '[' )
303  break;
304 
305  prefix += aBus[i];
306  }
307 
308  // Parse start number
309  //
310  i++; // '[' character
311 
312  if( i >= busLen )
313  return false;
314 
315  for( ; i < busLen; ++i )
316  {
317  if( aBus[i] == '.' && i + 1 < busLen && aBus[i+1] == '.' )
318  {
319  tmp.ToLong( &begin );
320  i += 2;
321  break;
322  }
323 
324  if( !isDigit( aBus[i] ) )
325  return false;
326 
327  tmp += aBus[i];
328  }
329 
330  // Parse end number
331  //
332  tmp = wxEmptyString;
333 
334  if( i >= busLen )
335  return false;
336 
337  for( ; i < busLen; ++i )
338  {
339  if( aBus[i] == ']' )
340  {
341  tmp.ToLong( &end );
342  ++i;
343  break;
344  }
345 
346  if( !isDigit( aBus[i] ) )
347  return false;
348 
349  tmp += aBus[i];
350  }
351 
352  // Parse suffix
353  //
354  for( ; i < busLen; ++i )
355  {
356  if( aBus[i] == '}' )
357  {
358  braceNesting--;
359  suffix += aBus[i];
360  }
361  else if( aBus[i] == '~' )
362  {
363  suffix += aBus[i];
364  }
365  else
366  {
367  return false;
368  }
369  }
370 
371  if( braceNesting != 0 )
372  return false;
373 
374  if( begin == end )
375  return false;
376  else if( begin > end )
377  std::swap( begin, end );
378 
379  if( aName )
380  *aName = prefix;
381 
382  if( aMemberList )
383  {
384  for( long idx = begin; idx <= end; ++idx )
385  {
386  wxString str = prefix;
387  str << idx;
388  str << suffix;
389 
390  aMemberList->emplace_back( str );
391  }
392  }
393 
394  return true;
395 }
bool isDigit(char cc)
Definition: dsnlexer.cpp:434
static bool isSuperSub(wxChar c)

References isDigit(), and isSuperSub().

Referenced by SCH_CONNECTION::ConfigureFromLabel(), SCH_CONNECTION::IsBusLabel(), SCH_NETNAME_VALIDATOR::IsValid(), ResolveNetClassAssignments(), and SCH_EAGLE_PLUGIN::translateEagleBusName().

◆ PointerFromString()

nlohmann::json::json_pointer JSON_SETTINGS::PointerFromString ( std::string  aPath)
staticinherited

Builds a JSON pointer based on a given string.

Parameters
aPathis the path in the form "key1.key2.key3"
Returns
a JSON pointer that can be used to index into a JSON object

Definition at line 487 of file json_settings.cpp.

488 {
489  std::replace( aPath.begin(), aPath.end(), '.', '/' );
490  aPath.insert( 0, "/" );
491 
492  nlohmann::json::json_pointer p;
493 
494  try
495  {
496  p = nlohmann::json::json_pointer( aPath );
497  }
498  catch( ... )
499  {
500  wxASSERT_MSG( false, wxT( "Invalid pointer path in PointerFromString!" ) );
501  }
502 
503  return p;
504 }

Referenced by JSON_SETTINGS::fromLegacy(), JSON_SETTINGS::fromLegacyColor(), JSON_SETTINGS::fromLegacyString(), JSON_SETTINGS::GetJson(), JSON_SETTINGS::JSON_SETTINGS(), NESTED_SETTINGS::LoadFromFile(), JSON_SETTINGS::LoadFromFile(), BOARD_DESIGN_SETTINGS::LoadFromFile(), JSON_SETTINGS::Migrate(), APP_SETTINGS_BASE::migrateFindReplace(), FOOTPRINT_EDITOR_SETTINGS::MigrateFromLegacy(), GERBVIEW_SETTINGS::MigrateFromLegacy(), PROJECT_FILE::MigrateFromLegacy(), EDA_3D_VIEWER_SETTINGS::MigrateFromLegacy(), COMMON_SETTINGS::MigrateFromLegacy(), PCB_CALCULATOR_SETTINGS::MigrateFromLegacy(), APP_SETTINGS_BASE::MigrateFromLegacy(), EESCHEMA_SETTINGS::MigrateFromLegacy(), PCBNEW_SETTINGS::MigrateFromLegacy(), SETTINGS_MANAGER::SaveColorSettings(), NESTED_SETTINGS::SaveToFile(), PROJECT_LOCAL_SETTINGS::SaveToFile(), PROJECT_FILE::SaveToFile(), JSON_SETTINGS::Set(), and JSON_SETTINGS::SetIfPresent().

◆ registerMigration()

void JSON_SETTINGS::registerMigration ( int  aOldSchemaVersion,
int  aNewSchemaVersion,
std::function< bool(void)>  aMigrator 
)
protectedinherited

Registers a migration from one schema version to another.

If the schema version in the file loaded from disk is less than the schema version of the JSON_SETTINGS class, migration functions will be called one after the other until the data is up-to-date.

Parameters
aOldSchemaVersionis the starting schema version for this migration
aNewSchemaVersionis the ending schema version for this migration
aMigratoris a function that performs the migration and returns true if successful

Definition at line 436 of file json_settings.cpp.

438 {
439  wxASSERT( aNewSchemaVersion > aOldSchemaVersion );
440  wxASSERT( aNewSchemaVersion <= m_schemaVersion );
441  m_migrators[aOldSchemaVersion] = std::make_pair( aNewSchemaVersion, aMigrator );
442 }
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.

References JSON_SETTINGS::m_migrators, and JSON_SETTINGS::m_schemaVersion.

Referenced by BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS(), COLOR_SETTINGS::COLOR_SETTINGS(), COMMON_SETTINGS::COMMON_SETTINGS(), FOOTPRINT_EDITOR_SETTINGS::FOOTPRINT_EDITOR_SETTINGS(), and PROJECT_LOCAL_SETTINGS::PROJECT_LOCAL_SETTINGS().

◆ ReleaseNestedSettings()

void JSON_SETTINGS::ReleaseNestedSettings ( NESTED_SETTINGS aSettings)
inherited

Saves and frees a nested settings object, if it exists within this one.

Parameters
aSettingsis a pointer to a NESTED_SETTINGS that has already been added to this one

Definition at line 663 of file json_settings.cpp.

664 {
665  if( !aSettings )
666  return;
667 
668  auto it = std::find_if( m_nested_settings.begin(), m_nested_settings.end(),
669  [&aSettings]( const JSON_SETTINGS* aPtr ) {
670  return aPtr == aSettings;
671  } );
672 
673  if( it != m_nested_settings.end() )
674  {
675  wxLogTrace( traceSettings, "Flush and release %s", ( *it )->GetFilename() );
676  ( *it )->SaveToFile();
677  m_nested_settings.erase( it );
678  }
679 
680  aSettings->SetParent( nullptr );
681 }
std::vector< NESTED_SETTINGS * > m_nested_settings
Nested settings files that live inside this one, if any.
const wxChar *const traceSettings
Flag to enable debug output of settings operations and management.
void SetParent(JSON_SETTINGS *aParent)

References JSON_SETTINGS::m_nested_settings, NESTED_SETTINGS::SetParent(), and traceSettings.

Referenced by BOARD::ClearProject(), BOARD_DESIGN_SETTINGS::~BOARD_DESIGN_SETTINGS(), ERC_SETTINGS::~ERC_SETTINGS(), NESTED_SETTINGS::~NESTED_SETTINGS(), ~NET_SETTINGS(), and SCHEMATIC_SETTINGS::~SCHEMATIC_SETTINGS().

◆ ResetToDefaults()

void JSON_SETTINGS::ResetToDefaults ( )
inherited

Resets all parameters to default values.

Does NOT write to file or update underlying JSON.

Definition at line 311 of file json_settings.cpp.

312 {
313  for( auto param : m_params )
314  param->SetDefault();
315 }
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)

References JSON_SETTINGS::m_params.

Referenced by EDA_3D_VIEWER::Process_Special_Functions(), PANEL_COMMON_SETTINGS::ResetPanel(), and PANEL_MOUSE_SETTINGS::ResetPanel().

◆ ResolveNetClassAssignments()

void NET_SETTINGS::ResolveNetClassAssignments ( bool  aRebuildFromScratch = false)

Explodes the list of netclass assignments to include atomic members of composite labels (buses).

Parameters
aRebuildFromScratchindicates the assignments should be rebuilt from the netclass membership lists before resolving.

Definition at line 483 of file net_settings.cpp.

484 {
485  std::map<wxString, wxString> baseList;
486 
487  if( aRebuildFromScratch )
488  {
489  for( const std::pair<const wxString, NETCLASSPTR>& netclass : m_NetClasses )
490  {
491  for( const wxString& net : *netclass.second )
492  baseList[ net ] = netclass.second->GetName();
493  }
494  }
495  else
496  {
497  baseList = m_NetClassAssignments;
498  }
499 
500  m_NetClassAssignments.clear();
501 
502  for( const auto& ii : baseList )
503  {
504  m_NetClassAssignments[ ii.first ] = ii.second;
505 
506  wxString unescaped = UnescapeString( ii.first );
507  wxString prefix;
508  std::vector<wxString> members;
509 
510  if( ParseBusVector( unescaped, &prefix, &members ) )
511  {
512  prefix = wxEmptyString;
513  }
514  else if( ParseBusGroup( unescaped, &prefix, &members ) )
515  {
516  if( !prefix.IsEmpty() )
517  prefix += wxT( "." );
518  }
519 
520  for( wxString& member : members )
521  m_NetClassAssignments[ prefix + member ] = ii.second;
522  }
523 }
std::map< wxString, wxString > m_NetClassAssignments
Definition: net_settings.h:43
static bool ParseBusGroup(wxString aGroup, wxString *name, std::vector< wxString > *aMemberList)
Parses a bus group label into the name and a list of components.
NETCLASSES m_NetClasses
Definition: net_settings.h:39
wxString UnescapeString(const wxString &aSource)
Definition: string.cpp:152
static bool ParseBusVector(const wxString &aBus, wxString *aName, std::vector< wxString > *aMemberList)
Parses a bus vector (e.g.

References m_NetClassAssignments, m_NetClasses, ParseBusGroup(), ParseBusVector(), and UnescapeString().

Referenced by SCH_EDITOR_CONTROL::AssignNetclass(), SCH_EDIT_FRAME::KiwayMailIn(), NET_SETTINGS(), PCB_EDIT_FRAME::OpenProjectFiles(), PCB_EDIT_FRAME::ShowBoardSetupDialog(), and SCH_EDIT_FRAME::ShowSchematicSetupDialog().

◆ SaveToFile()

bool NESTED_SETTINGS::SaveToFile ( const wxString &  aDirectory = "",
bool  aForce = false 
)
overridevirtualinherited

Calls Store() and then saves the JSON document contents into the parent JSON_SETTINGS.

Parameters
aDirectoryis ignored
Returns
true if the document contents were updated

Reimplemented from JSON_SETTINGS.

Definition at line 117 of file nested_settings.cpp.

118 {
119  if( !m_parent )
120  return false;
121 
122  bool modified = Store();
123 
124  try
125  {
126  nlohmann::json patch =
127  nlohmann::json::diff( *this, ( *m_parent )[PointerFromString( m_path )] );
128  modified |= !patch.empty();
129  }
130  catch( ... )
131  {
132  modified = true;
133  }
134 
135  if( !modified && !aForce )
136  return false;
137 
138  try
139  {
140  ( *m_parent )[PointerFromString( m_path ) ].update( *this );
141 
142  wxLogTrace( traceSettings, "Stored NESTED_SETTINGS %s with schema %d",
144  }
145  catch( ... )
146  {
147  wxLogTrace( traceSettings, "NESTED_SETTINGS %s: Could not store to %s at %s",
149  }
150 
151  return modified;
152 }
virtual bool Store()
Stores the current parameters into the JSON document represented by this object Note: this doesn't do...
wxString GetFilename() const
Definition: json_settings.h:64
nlohmann::json json
Definition: gerbview.cpp:39
wxString m_filename
The filename (not including path) of this settings file (inicode)
JSON_SETTINGS * m_parent
A pointer to the parent object to load and store from.
std::string m_path
The path (in pointer format) of where to store this document in the parent.
const wxChar *const traceSettings
Flag to enable debug output of settings operations and management.
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.
int m_schemaVersion
Version of this settings schema.

References JSON_SETTINGS::GetFilename(), JSON_SETTINGS::m_filename, NESTED_SETTINGS::m_parent, NESTED_SETTINGS::m_path, JSON_SETTINGS::m_schemaVersion, JSON_SETTINGS::PointerFromString(), JSON_SETTINGS::Store(), and traceSettings.

◆ Set() [1/3]

template<typename ValueType >
void JSON_SETTINGS::Set ( const std::string &  aPath,
ValueType  aVal 
)
inlineinherited

Stores a value into the JSON document Will throw an exception if ValueType isn't something that the library can handle.

Template Parameters
ValueTypeis the type to store
Parameters
aPathis a path to store in the form "key1.key2.key3"
aValis the value to store

Definition at line 148 of file json_settings.h.

149  {
150  ( *this )[PointerFromString( aPath ) ] = aVal;
151  }
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References JSON_SETTINGS::PointerFromString().

Referenced by COLOR_MAP_PARAM::Store(), PARAM< wxString >::Store(), PARAM_PATH::Store(), PARAM_ENUM< EnumType >::Store(), PARAM_LAMBDA< nlohmann::json >::Store(), PARAM_SCALED< ValueType >::Store(), PARAM_LIST< wxString >::Store(), PARAM_PATH_LIST::Store(), PARAM_MAP< Value >::Store(), and PARAM_WXSTRING_MAP::Store().

◆ Set() [2/3]

template<>
void JSON_SETTINGS::Set ( const std::string &  aPath,
wxString  aVal 
)
inherited

◆ Set() [3/3]

template<>
void JSON_SETTINGS::Set ( const std::string &  aPath,
wxString  aVal 
)
inherited

Definition at line 695 of file json_settings.cpp.

696 {
697  ( *this )[PointerFromString( std::move( aPath ) ) ] = aVal.ToUTF8();
698 }
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References JSON_SETTINGS::PointerFromString().

◆ SetFilename()

void JSON_SETTINGS::SetFilename ( const wxString &  aFilename)
inlineinherited

Definition at line 68 of file json_settings.h.

68 { m_filename = aFilename; }
wxString m_filename
The filename (not including path) of this settings file (inicode)

References JSON_SETTINGS::m_filename.

Referenced by SETTINGS_MANAGER::SaveProjectAs().

◆ SetIfPresent() [1/4]

bool JSON_SETTINGS::SetIfPresent ( const nlohmann::json aObj,
const std::string &  aPath,
wxString &  aTarget 
)
staticinherited

Sets the given string if the given key/path is present.

Parameters
aObjis the source object
aTargetis the storage destination
Returns
True if set, false if not

Definition at line 507 of file json_settings.cpp.

509 {
510  nlohmann::json::json_pointer ptr = PointerFromString( aPath );
511 
512  if( aObj.contains( ptr ) && aObj.at( ptr ).is_string() )
513  {
514  aTarget = aObj.at( ptr ).get<wxString>();
515  return true;
516  }
517 
518  return false;
519 }
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References JSON_SETTINGS::PointerFromString().

Referenced by FOOTPRINT_EDITOR_SETTINGS::FOOTPRINT_EDITOR_SETTINGS(), and PROJECT_LOCAL_SETTINGS::PROJECT_LOCAL_SETTINGS().

◆ SetIfPresent() [2/4]

bool JSON_SETTINGS::SetIfPresent ( const nlohmann::json aObj,
const std::string &  aPath,
bool &  aTarget 
)
staticinherited

Sets the given bool if the given key/path is present.

Parameters
aObjis the source object
aTargetis the storage destination
Returns
True if set, false if not

Definition at line 522 of file json_settings.cpp.

524 {
525  nlohmann::json::json_pointer ptr = PointerFromString( aPath );
526 
527  if( aObj.contains( ptr ) && aObj.at( ptr ).is_boolean() )
528  {
529  aTarget = aObj.at( ptr ).get<bool>();
530  return true;
531  }
532 
533  return false;
534 }
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References JSON_SETTINGS::PointerFromString().

◆ SetIfPresent() [3/4]

bool JSON_SETTINGS::SetIfPresent ( const nlohmann::json aObj,
const std::string &  aPath,
int &  aTarget 
)
staticinherited

Sets the given int if the given key/path is present.

Parameters
aObjis the source object
aTargetis the storage destination
Returns
True if set, false if not

Definition at line 537 of file json_settings.cpp.

539 {
540  nlohmann::json::json_pointer ptr = PointerFromString( aPath );
541 
542  if( aObj.contains( ptr ) && aObj.at( ptr ).is_number_integer() )
543  {
544  aTarget = aObj.at( ptr ).get<int>();
545  return true;
546  }
547 
548  return false;
549 }
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References JSON_SETTINGS::PointerFromString().

◆ SetIfPresent() [4/4]

bool JSON_SETTINGS::SetIfPresent ( const nlohmann::json aObj,
const std::string &  aPath,
unsigned int &  aTarget 
)
staticinherited

Sets the given unsigned int if the given key/path is present.

Parameters
aObjis the source object
aTargetis the storage destination
Returns
True if set, false if not

Definition at line 552 of file json_settings.cpp.

554 {
555  nlohmann::json::json_pointer ptr = PointerFromString( aPath );
556 
557  if( aObj.contains( ptr ) && aObj.at( ptr ).is_number_unsigned() )
558  {
559  aTarget = aObj.at( ptr ).get<unsigned int>();
560  return true;
561  }
562 
563  return false;
564 }
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References JSON_SETTINGS::PointerFromString().

◆ SetLegacyFilename()

void JSON_SETTINGS::SetLegacyFilename ( const wxString &  aFilename)
inlineinherited

Definition at line 72 of file json_settings.h.

72 { m_legacy_filename = aFilename; }
wxString m_legacy_filename
The filename of the wxConfig legacy file (if different from m_filename)

References JSON_SETTINGS::m_legacy_filename.

Referenced by SYMBOL_EDITOR_SETTINGS::SYMBOL_EDITOR_SETTINGS().

◆ SetManager()

void JSON_SETTINGS::SetManager ( SETTINGS_MANAGER aManager)
inlineinherited

Definition at line 188 of file json_settings.h.

189  {
190  m_manager = aManager;
191  }
SETTINGS_MANAGER * m_manager
A pointer to the settings manager managing this file (may be null)

References JSON_SETTINGS::m_manager.

◆ SetParent()

void NESTED_SETTINGS::SetParent ( JSON_SETTINGS aParent)
inherited

Definition at line 155 of file nested_settings.cpp.

156 {
157  m_parent = aParent;
158 
159  if( m_parent )
160  {
161  m_parent->AddNestedSettings( this );
162 
163  // In case we were created after the parent's ctor
164  LoadFromFile();
165  }
166 }
bool LoadFromFile(const wxString &aDirectory="") override
Loads the JSON document from the parent and then calls Load()
void AddNestedSettings(NESTED_SETTINGS *aSettings)
Transfers ownership of a given NESTED_SETTINGS to this object.
JSON_SETTINGS * m_parent
A pointer to the parent object to load and store from.

References JSON_SETTINGS::AddNestedSettings(), NESTED_SETTINGS::LoadFromFile(), and NESTED_SETTINGS::m_parent.

Referenced by BOARD::ClearProject(), NESTED_SETTINGS::NESTED_SETTINGS(), JSON_SETTINGS::ReleaseNestedSettings(), and BOARD::SetProject().

◆ SetReadOnly()

void JSON_SETTINGS::SetReadOnly ( bool  aReadOnly)
inlineinherited

Definition at line 75 of file json_settings.h.

75 { m_writeFile = !aReadOnly; }
bool m_writeFile
Whether or not the backing store file should be written.

References JSON_SETTINGS::m_writeFile.

Referenced by PANEL_COLOR_SETTINGS::OnThemeChanged().

◆ Store()

bool JSON_SETTINGS::Store ( )
virtualinherited

Stores the current parameters into the JSON document represented by this object Note: this doesn't do any writing to disk; that's handled by SETTINGS_MANAGER.

Returns
true if any part of the JSON document was updated

Definition at line 297 of file json_settings.cpp.

298 {
299  bool modified = false;
300 
301  for( auto param : m_params )
302  {
303  modified |= !param->MatchesFile( this );
304  param->Store( this );
305  }
306 
307  return modified;
308 }
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)

References JSON_SETTINGS::m_params.

Referenced by PANEL_FP_EDITOR_COLOR_SETTINGS::PANEL_FP_EDITOR_COLOR_SETTINGS(), SETTINGS_MANAGER::SaveColorSettings(), NESTED_SETTINGS::SaveToFile(), and JSON_SETTINGS::SaveToFile().

Member Data Documentation

◆ m_createIfDefault

bool JSON_SETTINGS::m_createIfDefault
protectedinherited

Whether or not the backing store file should be created if all parameters are still at their default values.

Ignored if m_createIfMissing is false or m_writeFile is false.

Definition at line 306 of file json_settings.h.

Referenced by JSON_SETTINGS::SaveToFile().

◆ m_createIfMissing

bool JSON_SETTINGS::m_createIfMissing
protectedinherited

Whether or not the backing store file should be created it if doesn't exist.

Definition at line 300 of file json_settings.h.

Referenced by JSON_SETTINGS::SaveToFile().

◆ m_deleteLegacyAfterMigration

bool JSON_SETTINGS::m_deleteLegacyAfterMigration
protectedinherited

Whether or not to delete legacy file after migration.

Definition at line 312 of file json_settings.h.

Referenced by JSON_SETTINGS::LoadFromFile(), and PROJECT_FILE::PROJECT_FILE().

◆ m_filename

◆ m_legacy_filename

wxString JSON_SETTINGS::m_legacy_filename
protectedinherited

The filename of the wxConfig legacy file (if different from m_filename)

Definition at line 288 of file json_settings.h.

Referenced by JSON_SETTINGS::LoadFromFile(), and JSON_SETTINGS::SetLegacyFilename().

◆ m_location

SETTINGS_LOC JSON_SETTINGS::m_location
protectedinherited

The location of this settings file (.

See also
SETTINGS_LOC)

Definition at line 291 of file json_settings.h.

Referenced by JSON_SETTINGS::GetLocation().

◆ m_manager

SETTINGS_MANAGER* JSON_SETTINGS::m_manager
protectedinherited

A pointer to the settings manager managing this file (may be null)

Definition at line 321 of file json_settings.h.

Referenced by FOOTPRINT_EDITOR_SETTINGS::migrateSchema0to1(), COLOR_SETTINGS::migrateSchema0to1(), and JSON_SETTINGS::SetManager().

◆ m_migrators

std::map<int, std::pair<int, std::function<bool()> > > JSON_SETTINGS::m_migrators
protectedinherited

A map of starting schema version to a pair of <ending version, migrator function>

Definition at line 327 of file json_settings.h.

Referenced by JSON_SETTINGS::Migrate(), and JSON_SETTINGS::registerMigration().

◆ m_nested_settings

std::vector<NESTED_SETTINGS*> JSON_SETTINGS::m_nested_settings
protectedinherited

Nested settings files that live inside this one, if any.

Definition at line 297 of file json_settings.h.

Referenced by JSON_SETTINGS::AddNestedSettings(), JSON_SETTINGS::LoadFromFile(), JSON_SETTINGS::ReleaseNestedSettings(), and JSON_SETTINGS::SaveToFile().

◆ m_NetClassAssignments

◆ m_NetClasses

◆ m_params

◆ m_parent

◆ m_path

std::string NESTED_SETTINGS::m_path
protectedinherited

The path (in pointer format) of where to store this document in the parent.

Definition at line 65 of file nested_settings.h.

Referenced by NESTED_SETTINGS::LoadFromFile(), and NESTED_SETTINGS::SaveToFile().

◆ m_PcbNetColors

std::map<wxString, KIGFX::COLOR4D> NET_SETTINGS::m_PcbNetColors

A map of fully-qualified net names to colors used in the board context.

Since these color overrides are for the board, buses are not included here. Only nets that the user has assigned custom colors to will be in this list. Nets that no longer exist will be deleted during a netlist read in PcbNew.

Definition at line 51 of file net_settings.h.

Referenced by PCB_EDIT_FRAME::LoadProjectSettings(), NET_SETTINGS(), and PCB_EDIT_FRAME::SaveProjectSettings().

◆ m_preserved_paths

std::vector<nlohmann::json::json_pointer> JSON_SETTINGS::m_preserved_paths
protectedinherited

A list of JSON pointers that are preserved during a read-update-write to disk.

Definition at line 324 of file json_settings.h.

◆ m_resetParamsIfMissing

bool JSON_SETTINGS::m_resetParamsIfMissing
protectedinherited

Whether or not to set parameters to their default value if missing from JSON on Load()

Definition at line 315 of file json_settings.h.

Referenced by BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS(), and JSON_SETTINGS::Load().

◆ m_schemaVersion

int JSON_SETTINGS::m_schemaVersion
protectedinherited

◆ m_writeFile

bool JSON_SETTINGS::m_writeFile
protectedinherited

The documentation for this class was generated from the following files: