KiCad PCB EDA Suite
PARAM_MAP< Value > Class Template Reference

Represents a map of <std::string, Value>. More...

#include <parameters.h>

Inheritance diagram for PARAM_MAP< Value >:
PARAM_BASE

Public Member Functions

 PARAM_MAP (const std::string &aJsonPath, std::map< std::string, Value > *aPtr, std::initializer_list< std::pair< const std::string, Value >> aDefault, bool aReadOnly=false)
 
void Load (JSON_SETTINGS *aSettings, bool aResetIfMissing=true) const override
 Loads the value of this parameter from JSON to the underlying storage. More...
 
void Store (JSON_SETTINGS *aSettings) const override
 Stores the value of this parameter to the given JSON_SETTINGS object. More...
 
virtual void SetDefault () override
 
bool IsDefault () const override
 Checks whether or not this param has been changed from its default value. More...
 
bool MatchesFile (JSON_SETTINGS *aSettings) const override
 Checks whether the parameter in memory matches the one in a given JSON file. More...
 
const std::string & GetJsonPath ()
 

Protected Attributes

std::string m_path
 the string used to store the param in json files More...
 
bool m_readOnly
 ! True if the parameter pointer should never be overwritten More...
 

Private Attributes

std::map< std::string, Value > * m_ptr
 
std::map< std::string, Value > m_default
 

Detailed Description

template<typename Value>
class PARAM_MAP< Value >

Represents a map of <std::string, Value>.

The key parameter has to be a string in JSON.

The key must be stored in UTF-8 format, so any translated strings or strings provided by the user as a key must be converted to UTF-8 at the site where they are placed in the underlying map that this PARAM_MAP points to.

Values must also be in UTF-8, but if you use wxString as the value type, this conversion will be done automatically by the to_json and from_json helpers defined in json_settings.cpp

Template Parameters
Valueis the value type of the map

Definition at line 574 of file parameters.h.

Constructor & Destructor Documentation

◆ PARAM_MAP()

template<typename Value >
PARAM_MAP< Value >::PARAM_MAP ( const std::string &  aJsonPath,
std::map< std::string, Value > *  aPtr,
std::initializer_list< std::pair< const std::string, Value >>  aDefault,
bool  aReadOnly = false 
)
inline

Definition at line 577 of file parameters.h.

579  :
580  PARAM_BASE( aJsonPath, aReadOnly ),
581  m_ptr( aPtr ),
582  m_default( aDefault )
583  { }
std::map< std::string, Value > m_default
Definition: parameters.h:648
PARAM_BASE(std::string aJsonPath, bool aReadOnly)
Definition: parameters.h:35
std::map< std::string, Value > * m_ptr
Definition: parameters.h:646

Member Function Documentation

◆ GetJsonPath()

const std::string& PARAM_BASE::GetJsonPath ( )
inlineinherited
Returns
the path name of the parameter used to store it in the json file mainly usefull in error messages

Definition at line 74 of file parameters.h.

74 { return m_path; }
std::string m_path
the string used to store the param in json files
Definition: parameters.h:80

References PARAM_BASE::m_path.

◆ IsDefault()

template<typename Value >
bool PARAM_MAP< Value >::IsDefault ( ) const
inlineoverridevirtual

Checks whether or not this param has been changed from its default value.

Returns
true if the parameter in memory matches its default value

Implements PARAM_BASE.

Definition at line 619 of file parameters.h.

620  {
621  return *m_ptr == m_default;
622  }
std::map< std::string, Value > m_default
Definition: parameters.h:648
std::map< std::string, Value > * m_ptr
Definition: parameters.h:646

References PARAM_MAP< Value >::m_default, and PARAM_MAP< Value >::m_ptr.

◆ Load()

template<typename Value >
void PARAM_MAP< Value >::Load ( JSON_SETTINGS aSettings,
bool  aResetIfMissing = true 
) const
inlineoverridevirtual

Loads the value of this parameter from JSON to the underlying storage.

Parameters
aSettingsis the JSON_SETTINGS object to load from.
aResetIfMissingif true will set the parameter to its default value if load fails

Implements PARAM_BASE.

Definition at line 585 of file parameters.h.

586  {
587  if( m_readOnly )
588  return;
589 
590  if( OPT<nlohmann::json> js = aSettings->GetJson( m_path ) )
591  {
592  if( js->is_object() )
593  {
594  m_ptr->clear();
595 
596  for( const auto& el : js->items() )
597  ( *m_ptr )[ el.key() ] = el.value().get<Value>();
598  }
599  }
600  else if( aResetIfMissing )
601  *m_ptr = m_default;
602  }
std::map< std::string, Value > m_default
Definition: parameters.h:648
std::string m_path
the string used to store the param in json files
Definition: parameters.h:80
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....
std::map< std::string, Value > * m_ptr
Definition: parameters.h:646
bool m_readOnly
! True if the parameter pointer should never be overwritten
Definition: parameters.h:83
boost::optional< T > OPT
Definition: optional.h:7

References JSON_SETTINGS::GetJson(), PARAM_MAP< Value >::m_default, PARAM_BASE::m_path, PARAM_MAP< Value >::m_ptr, and PARAM_BASE::m_readOnly.

◆ MatchesFile()

template<typename Value >
bool PARAM_MAP< Value >::MatchesFile ( JSON_SETTINGS aSettings) const
inlineoverridevirtual

Checks whether the parameter in memory matches the one in a given JSON file.

Parameters
aSettingsis a JSON_SETTINGS to check the JSON file contents of
Returns
true if the parameter in memory matches its value in the file

Implements PARAM_BASE.

Definition at line 624 of file parameters.h.

625  {
626  if( OPT<nlohmann::json> js = aSettings->GetJson( m_path ) )
627  {
628  if( js->is_object() )
629  {
630  if( m_ptr->size() != js->size() )
631  return false;
632 
633  std::map<std::string, Value> val;
634 
635  for( const auto& el : js->items() )
636  val[ el.key() ] = el.value().get<Value>();
637 
638  return val == *m_ptr;
639  }
640  }
641 
642  return false;
643  }
std::string m_path
the string used to store the param in json files
Definition: parameters.h:80
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....
std::map< std::string, Value > * m_ptr
Definition: parameters.h:646
boost::optional< T > OPT
Definition: optional.h:7

References JSON_SETTINGS::GetJson(), PARAM_BASE::m_path, and PARAM_MAP< Value >::m_ptr.

◆ SetDefault()

template<typename Value >
virtual void PARAM_MAP< Value >::SetDefault ( )
inlineoverridevirtual

Implements PARAM_BASE.

Definition at line 614 of file parameters.h.

615  {
616  *m_ptr = m_default;
617  }
std::map< std::string, Value > m_default
Definition: parameters.h:648
std::map< std::string, Value > * m_ptr
Definition: parameters.h:646

References PARAM_MAP< Value >::m_default, and PARAM_MAP< Value >::m_ptr.

◆ Store()

template<typename Value >
void PARAM_MAP< Value >::Store ( JSON_SETTINGS aSettings) const
inlineoverridevirtual

Stores the value of this parameter to the given JSON_SETTINGS object.

Parameters
aSettingsis the JSON_SETTINGS object to store into.

Implements PARAM_BASE.

Definition at line 604 of file parameters.h.

605  {
606  nlohmann::json js( {} );
607 
608  for( const auto& el : *m_ptr )
609  js[ el.first ] = el.second;
610 
611  aSettings->Set<nlohmann::json>( m_path, js );
612  }
std::string m_path
the string used to store the param in json files
Definition: parameters.h:80
nlohmann::json json
Definition: gerbview.cpp:40
std::map< std::string, Value > * m_ptr
Definition: parameters.h:646
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...

References PARAM_BASE::m_path, PARAM_MAP< Value >::m_ptr, and JSON_SETTINGS::Set().

Member Data Documentation

◆ m_default

template<typename Value >
std::map<std::string, Value> PARAM_MAP< Value >::m_default
private

◆ m_path

◆ m_ptr

template<typename Value >
std::map<std::string, Value>* PARAM_MAP< Value >::m_ptr
private

◆ m_readOnly

bool PARAM_BASE::m_readOnly
protectedinherited

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