KiCad PCB EDA Suite
COLOR_SETTINGS Class Reference

Color settings are a bit different than most of the settings objects in that there can be more than one of them loaded at once. More...

#include <color_settings.h>

Inheritance diagram for COLOR_SETTINGS:
JSON_SETTINGS

Public Member Functions

 COLOR_SETTINGS (std::string aFilename="user")
 
virtual ~COLOR_SETTINGS ()
 
bool MigrateFromLegacy (wxConfigBase *aCfg) override
 Migrates from wxConfig to JSON-based configuration. More...
 
bool Migrate () override
 Migrates the schema of this settings from the version in the file to the latest version. More...
 
COLOR4D GetColor (int aLayer) const
 
COLOR4D GetDefaultColor (int aLayer)
 
void SetColor (int aLayer, COLOR4D aColor)
 
const wxString & GetName () const
 
void SetName (const wxString &aName)
 
bool GetOverrideSchItemColors () const
 
void SetOverrideSchItemColors (bool aFlag)
 
std::string GetFilename () const
 
SETTINGS_LOC GetLocation () const
 
void SetLegacyFilename (const std::string &aFilename)
 
virtual void Load ()
 Updates the parameters of this object based on the current JSON document contents. More...
 
virtual void 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...
 
virtual void LoadFromFile (const std::string &aDirectory)
 Loads the backing file from disk and then calls Load() More...
 
virtual void SaveToFile (const std::string &aDirectory)
 Calls Store() and then writes the contents of the JSON document to a file. More...
 
void ResetToDefaults ()
 Resets all parameters to default values. More...
 
OPT< nlohmann::jsonGetJson (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 (std::string aPath) const
 Fetches a value from within the JSON document. More...
 
template<>
OPT< wxString > Get (std::string aPath) const
 
template<typename ValueType >
void Set (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 (std::string aPath, wxString aVal)
 
template<>
void Set (std::string aPath, wxString aVal)
 
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 nlohmann::json::json_pointer PointerFromString (std::string aPath)
 Builds a JSON pointer based on a given string. More...
 

Public Attributes

std::vector< COLOR4Dm_Palette
 m_Pallete stores a list of colors that are used, in order, when a list of colors needs to be generated for an application. More...
 

Protected Member Functions

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...
 

Protected Attributes

std::string m_filename
 The filename (not including path) of this settings file. More...
 
std::string 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_writeFile
 Whether or not the backing store file should be written. 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...
 

Private Member Functions

bool migrateSchema0to1 ()
 

Private Attributes

wxString m_displayName
 
bool m_overrideSchItemColors
 
std::unordered_map< int, COLOR4Dm_colors
 Map of all layer colors. More...
 
std::unordered_map< int, COLOR4Dm_defaultColors
 

Detailed Description

Color settings are a bit different than most of the settings objects in that there can be more than one of them loaded at once.

Each COLOR_SETTINGS object corresponds to a single color scheme file on disk. The default color scheme is called "default" and will be created on first run.

When users change color settings, they have the option of modifying the default scheme or saving their changes to a new color scheme file.

Each COLOR_SETTINGS defines all the settings used across all parts of KiCad, but it's not necessary for the underlying theme file to contain all of them. The color settings cascade, so if a user chooses a non-default scheme for a certain application, and that non-default scheme file is missing some color definitions, those will fall back to those from the "default" scheme (which is either loaded from disk or created if missing)

Each application (eeschema, gerbview, pcbnew) can have a different active color scheme selected. The "child applications" (library editors) inherit from either eeschema or pcbnew.

Definition at line 53 of file color_settings.h.

Constructor & Destructor Documentation

◆ COLOR_SETTINGS()

COLOR_SETTINGS::COLOR_SETTINGS ( std::string  aFilename = "user")
explicit

Definition at line 34 of file color_settings.cpp.

34  :
35  JSON_SETTINGS( std::move( aFilename ), SETTINGS_LOC::COLORS, colorsSchemaVersion ),
37 {
38 
39  m_params.emplace_back( new PARAM<wxString>( "meta.name", &m_displayName, "KiCad Default" ) );
40 
41  std::vector<COLOR4D> default_palette = {
42  COLOR4D( RED ),
43  COLOR4D( YELLOW ),
45  COLOR4D( LIGHTRED ),
46  COLOR4D( CYAN ),
47  COLOR4D( GREEN ),
48  COLOR4D( BLUE ),
49  COLOR4D( DARKGRAY ),
50  COLOR4D( MAGENTA ),
51  COLOR4D( LIGHTGRAY ),
52  COLOR4D( MAGENTA ),
53  COLOR4D( RED ),
54  COLOR4D( BROWN ),
55  COLOR4D( LIGHTGRAY ),
56  COLOR4D( BLUE ),
57  COLOR4D( GREEN )
58  };
59 
60  // TODO(JE) in actual usage, how long does the default palette need to be?
61  m_params.emplace_back( new PARAM_LIST<COLOR4D>( "palette", &m_Palette, default_palette ) );
62 
63  m_params.emplace_back( new PARAM<bool>( "schematic.override_item_colors",
64  &m_overrideSchItemColors, false ) );
65 
66 #define CLR( x, y, z ) m_params.emplace_back( new COLOR_MAP_PARAM( x, y, z, &m_colors ) )
67 
68  CLR( "schematic.background", LAYER_SCHEMATIC_BACKGROUND, COLOR4D( WHITE ) );
69  CLR( "schematic.brightened", LAYER_BRIGHTENED, COLOR4D( PUREMAGENTA ) );
70  CLR( "schematic.bus", LAYER_BUS, COLOR4D( BLUE ) );
71  CLR( "schematic.bus_junction", LAYER_BUS_JUNCTION, COLOR4D( BLUE ) );
72  CLR( "schematic.component_body", LAYER_DEVICE_BACKGROUND, COLOR4D( LIGHTYELLOW ) );
73  CLR( "schematic.component_outline", LAYER_DEVICE, COLOR4D( RED ) );
74  CLR( "schematic.cursor", LAYER_SCHEMATIC_CURSOR, COLOR4D( BLACK ) );
75  CLR( "schematic.erc_error", LAYER_ERC_ERR, COLOR4D( PURERED ).WithAlpha( 0.8 ) );
76  CLR( "schematic.erc_warning", LAYER_ERC_WARN, COLOR4D( PUREGREEN ).WithAlpha( 0.8 ) );
77  CLR( "schematic.fields", LAYER_FIELDS, COLOR4D( MAGENTA ) );
78  CLR( "schematic.grid", LAYER_SCHEMATIC_GRID, COLOR4D( DARKGRAY ) );
79  CLR( "schematic.grid_axes", LAYER_SCHEMATIC_GRID_AXES, COLOR4D( BLUE ) );
80  CLR( "schematic.hidden", LAYER_HIDDEN, COLOR4D( LIGHTGRAY ) );
81  CLR( "schematic.junction", LAYER_JUNCTION, COLOR4D( GREEN ) );
82  CLR( "schematic.label_global", LAYER_GLOBLABEL, COLOR4D( RED ) );
83  CLR( "schematic.label_hier", LAYER_HIERLABEL, COLOR4D( BROWN ) );
84  CLR( "schematic.label_local", LAYER_LOCLABEL, COLOR4D( BLACK ) );
85  CLR( "schematic.net_name", LAYER_NETNAM, COLOR4D( DARKGRAY ) );
86  CLR( "schematic.no_connect", LAYER_NOCONNECT, COLOR4D( BLUE ) );
87  CLR( "schematic.note", LAYER_NOTES, COLOR4D( LIGHTBLUE ) );
88  CLR( "schematic.pin", LAYER_PIN, COLOR4D( RED ) );
89  CLR( "schematic.pin_name", LAYER_PINNAM, COLOR4D( CYAN ) );
90  CLR( "schematic.pin_number", LAYER_PINNUM, COLOR4D( RED ) );
91  CLR( "schematic.reference", LAYER_REFERENCEPART, COLOR4D( CYAN ) );
92  // Macs look better with a lighter shadow
93 #ifdef __WXMAC__
94  CLR( "schematic.shadow", LAYER_SELECTION_SHADOWS, COLOR4D( .78, .92, 1.0, 0.8 ) );
95 #else
96  CLR( "schematic.shadow", LAYER_SELECTION_SHADOWS, COLOR4D( .4, .7, 1.0, 0.8 ) );
97 #endif
98  CLR( "schematic.sheet", LAYER_SHEET, COLOR4D( MAGENTA ) );
99  CLR( "schematic.sheet_background", LAYER_SHEET_BACKGROUND, COLOR4D( WHITE ).WithAlpha( 0.0 ) );
100  CLR( "schematic.sheet_filename", LAYER_SHEETFILENAME, COLOR4D( BROWN ) );
101  CLR( "schematic.sheet_fields", LAYER_SHEETFIELDS, COLOR4D( MAGENTA ) );
102  CLR( "schematic.sheet_label", LAYER_SHEETLABEL, COLOR4D( CYAN ) );
103  CLR( "schematic.sheet_name", LAYER_SHEETNAME, COLOR4D( CYAN ) );
104  CLR( "schematic.value", LAYER_VALUEPART, COLOR4D( CYAN ) );
105  CLR( "schematic.wire", LAYER_WIRE, COLOR4D( GREEN ) );
106  CLR( "schematic.worksheet", LAYER_SCHEMATIC_WORKSHEET, COLOR4D( RED ) );
107 
108  CLR( "gerbview.axes", LAYER_GERBVIEW_AXES, COLOR4D( BLUE ) );
109  CLR( "gerbview.background", LAYER_GERBVIEW_BACKGROUND, COLOR4D( BLACK ) );
110  CLR( "gerbview.dcodes", LAYER_DCODES, COLOR4D( WHITE ) );
111  CLR( "gerbview.grid", LAYER_GERBVIEW_GRID, COLOR4D( MAGENTA ) );
112  CLR( "gerbview.negative_objects", LAYER_NEGATIVE_OBJECTS, COLOR4D( DARKGRAY ) );
113  CLR( "gerbview.worksheet", LAYER_GERBVIEW_WORKSHEET, COLOR4D( BLUE ) );
114 
115  // TODO(JE) New default scheme for GerbView
116  for( int i = 0, id = GERBVIEW_LAYER_ID_START;
118  {
119  CLR( "gerbview.layers." + std::to_string( i ), id,
120  default_palette[ i % default_palette.size() ] );
121  }
122 
123  CLR( "board.anchor", LAYER_ANCHOR, COLOR4D( BLUE ) );
124  CLR( "board.aux_items", LAYER_AUX_ITEMS, COLOR4D( WHITE ) );
125  CLR( "board.background", LAYER_PCB_BACKGROUND, COLOR4D( BLACK ) );
126  CLR( "board.cursor", LAYER_CURSOR, COLOR4D( WHITE ) );
127  CLR( "board.drc_error", LAYER_DRC_ERROR, COLOR4D( PURERED ) );
128  CLR( "board.drc_warning", LAYER_DRC_WARNING, COLOR4D( PUREYELLOW ) );
129  CLR( "board.footprint_text_back", LAYER_MOD_TEXT_BK, COLOR4D( BLUE ) );
130  CLR( "board.footprint_text_front", LAYER_MOD_TEXT_FR, COLOR4D( LIGHTGRAY ) );
131  CLR( "board.footprint_text_invisible", LAYER_MOD_TEXT_INVISIBLE, COLOR4D( LIGHTGRAY ) );
132  CLR( "board.grid", LAYER_GRID, COLOR4D( DARKGRAY ) );
133  CLR( "board.grid_axes", LAYER_GRID_AXES, COLOR4D( LIGHTGRAY ) );
134  CLR( "board.no_connect", LAYER_NO_CONNECTS, COLOR4D( BLUE ) );
135  CLR( "board.pad_back", LAYER_PAD_BK, COLOR4D( GREEN ) );
136  CLR( "board.pad_front", LAYER_PAD_FR, COLOR4D( RED ) );
137  CLR( "board.pad_plated_hole", LAYER_PADS_PLATEDHOLES, COLOR4D( YELLOW ) );
138  CLR( "board.pad_through_hole", LAYER_PADS_TH, COLOR4D( YELLOW ) );
139  CLR( "board.plated_hole", LAYER_NON_PLATEDHOLES, COLOR4D( YELLOW ) );
140  CLR( "board.ratsnest", LAYER_RATSNEST, COLOR4D( WHITE ) );
141  CLR( "board.select_overlay", LAYER_SELECT_OVERLAY, COLOR4D( DARKRED ) );
142  CLR( "board.through_via", LAYER_VIA_THROUGH, COLOR4D( LIGHTGRAY ) );
143  CLR( "board.via", LAYER_VIAS, COLOR4D( BLACK ) );
144  CLR( "board.via_blind_buried", LAYER_VIA_BBLIND, COLOR4D( BROWN ) );
145  CLR( "board.via_hole", LAYER_VIAS_HOLES, COLOR4D( WHITE ) );
146  CLR( "board.via_micro", LAYER_VIA_MICROVIA, COLOR4D( CYAN ) );
147  CLR( "board.via_through", LAYER_VIA_THROUGH, COLOR4D( LIGHTGRAY ) );
148  CLR( "board.worksheet", LAYER_WORKSHEET, COLOR4D( DARKRED ) );
149 
150  CLR( "board.copper.f", F_Cu, COLOR4D( RED ) );
151  CLR( "board.copper.in1", In1_Cu, COLOR4D( YELLOW ) );
152  CLR( "board.copper.in2", In2_Cu, COLOR4D( LIGHTMAGENTA ) );
153  CLR( "board.copper.in3", In3_Cu, COLOR4D( LIGHTRED ) );
154  CLR( "board.copper.in4", In4_Cu, COLOR4D( CYAN ) );
155  CLR( "board.copper.in5", In5_Cu, COLOR4D( GREEN ) );
156  CLR( "board.copper.in6", In6_Cu, COLOR4D( BLUE ) );
157  CLR( "board.copper.in7", In7_Cu, COLOR4D( DARKGRAY ) );
158  CLR( "board.copper.in8", In8_Cu, COLOR4D( MAGENTA ) );
159  CLR( "board.copper.in9", In9_Cu, COLOR4D( LIGHTGRAY ) );
160  CLR( "board.copper.in10", In10_Cu, COLOR4D( MAGENTA ) );
161  CLR( "board.copper.in11", In11_Cu, COLOR4D( RED ) );
162  CLR( "board.copper.in12", In12_Cu, COLOR4D( BROWN ) );
163  CLR( "board.copper.in13", In13_Cu, COLOR4D( LIGHTGRAY ) );
164  CLR( "board.copper.in14", In14_Cu, COLOR4D( BLUE ) );
165  CLR( "board.copper.in15", In15_Cu, COLOR4D( GREEN ) );
166  CLR( "board.copper.in16", In16_Cu, COLOR4D( RED ) );
167  CLR( "board.copper.in17", In17_Cu, COLOR4D( YELLOW ) );
168  CLR( "board.copper.in18", In18_Cu, COLOR4D( LIGHTMAGENTA ) );
169  CLR( "board.copper.in19", In19_Cu, COLOR4D( LIGHTRED ) );
170  CLR( "board.copper.in20", In20_Cu, COLOR4D( CYAN ) );
171  CLR( "board.copper.in21", In21_Cu, COLOR4D( GREEN ) );
172  CLR( "board.copper.in22", In22_Cu, COLOR4D( BLUE ) );
173  CLR( "board.copper.in23", In23_Cu, COLOR4D( DARKGRAY ) );
174  CLR( "board.copper.in24", In24_Cu, COLOR4D( MAGENTA ) );
175  CLR( "board.copper.in25", In25_Cu, COLOR4D( LIGHTGRAY ) );
176  CLR( "board.copper.in26", In26_Cu, COLOR4D( MAGENTA ) );
177  CLR( "board.copper.in27", In27_Cu, COLOR4D( RED ) );
178  CLR( "board.copper.in28", In28_Cu, COLOR4D( BROWN ) );
179  CLR( "board.copper.in29", In29_Cu, COLOR4D( LIGHTGRAY ) );
180  CLR( "board.copper.in30", In30_Cu, COLOR4D( BLUE ) );
181  CLR( "board.copper.b", B_Cu, COLOR4D( GREEN ) );
182 
183  CLR( "board.b_adhes", B_Adhes, COLOR4D( BLUE ) );
184  CLR( "board.f_adhes", F_Adhes, COLOR4D( MAGENTA ) );
185  CLR( "board.b_paste", B_Paste, COLOR4D( LIGHTCYAN ) );
186  CLR( "board.f_paste", F_Paste, COLOR4D( RED ) );
187  CLR( "board.b_silks", B_SilkS, COLOR4D( MAGENTA ) );
188  CLR( "board.f_silks", F_SilkS, COLOR4D( CYAN ) );
189  CLR( "board.b_mask", B_Mask, COLOR4D( BROWN ) );
190  CLR( "board.f_mask", F_Mask, COLOR4D( MAGENTA ) );
191  CLR( "board.dwgs_user", Dwgs_User, COLOR4D( LIGHTGRAY ) );
192  CLR( "board.cmts_user", Cmts_User, COLOR4D( BLUE ) );
193  CLR( "board.eco1_user", Eco1_User, COLOR4D( GREEN ) );
194  CLR( "board.eco2_user", Eco2_User, COLOR4D( YELLOW ) );
195  CLR( "board.edge_cuts", Edge_Cuts, COLOR4D( YELLOW ) );
196  CLR( "board.margin", Margin, COLOR4D( LIGHTMAGENTA ) );
197  CLR( "board.b_crtyd", B_CrtYd, COLOR4D( DARKGRAY ) );
198  CLR( "board.f_crtyd", F_CrtYd, COLOR4D( LIGHTGRAY ) );
199  CLR( "board.b_fab", B_Fab, COLOR4D( BLUE ) );
200  CLR( "board.f_fab", F_Fab, COLOR4D( DARKGRAY ) );
201 
202  // Colors for 3D viewer, which are used as defaults unless overridden by the board
203  CLR( "3d_viewer.background_bottom", LAYER_3D_BACKGROUND_BOTTOM, COLOR4D( 0.4, 0.4, 0.5, 1.0 ) );
204  CLR( "3d_viewer.background_top", LAYER_3D_BACKGROUND_TOP, COLOR4D( 0.8, 0.8, 0.9, 1.0 ) );
205  CLR( "3d_viewer.board", LAYER_3D_BOARD, COLOR4D( 0.2, 0.17, 0.09, 1.0 ) );
206  CLR( "3d_viewer.copper", LAYER_3D_COPPER, COLOR4D( 0.7, 0.61, 0.0, 1.0 ) );
207  CLR( "3d_viewer.silkscreen_bottom", LAYER_3D_SILKSCREEN_BOTTOM, COLOR4D( 0.9, 0.9, 0.9, 1.0 ) );
208  CLR( "3d_viewer.silkscreen_top", LAYER_3D_SILKSCREEN_TOP, COLOR4D( 0.9, 0.9, 0.9, 1.0 ) );
209  CLR( "3d_viewer.soldermask", LAYER_3D_SOLDERMASK, COLOR4D( 0.08, 0.2, 0.14, 1.0 ) );
210  CLR( "3d_viewer.solderpaste", LAYER_3D_SOLDERPASTE, COLOR4D( 0.5, 0.5, 0.5, 1.0 ) );
211 }
Definition: colors.h:57
to draw blind/buried vias
show a marker on pads with no nets
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)
multilayer pads, usually with holes
handle color for not plated holes (holes, not pads)
anchor of items having an anchor point (texts, footprints)
Definition: colors.h:61
bool m_overrideSchItemColors
to draw via holes (pad holes do not use this layer)
const int colorsSchemaVersion
! Update the schema version whenever a migration is required
wxString m_displayName
Definition: colors.h:54
The color scheme directory (e.g. ~/.config/kicad/colors/)
Definition: colors.h:72
Auxiliary items (guides, rule, etc)
#define GERBER_DRAWLAYERS_COUNT
#define CLR(x, y, z)
to draw usual through hole vias
Definition: colors.h:59
JSON_SETTINGS(const std::string &aFilename, SETTINGS_LOC aLocation, int aSchemaVersion, nlohmann::json aDefaultJson=nlohmann::json({}))
Definition: json_settings.h:47
Definition: colors.h:60
layer for drc markers with SEVERITY_WARNING
std::vector< COLOR4D > m_Palette
m_Pallete stores a list of colors that are used, in order, when a list of colors needs to be generate...
smd pads, front layer
Definition: colors.h:58
currently selected items overlay
Definition: colors.h:49
Definition: colors.h:45
Definition: colors.h:68
layer for drc markers with SEVERITY_ERROR
COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:40
Definition: colors.h:62

References B_Adhes, B_CrtYd, B_Cu, B_Fab, B_Mask, B_Paste, B_SilkS, BLACK, BLUE, BROWN, CLR, Cmts_User, COLORS, CYAN, DARKGRAY, DARKRED, Dwgs_User, Eco1_User, Eco2_User, Edge_Cuts, F_Adhes, F_CrtYd, F_Cu, F_Fab, F_Mask, F_Paste, F_SilkS, GERBER_DRAWLAYERS_COUNT, GERBVIEW_LAYER_ID_START, GREEN, In10_Cu, In11_Cu, In12_Cu, In13_Cu, In14_Cu, In15_Cu, In16_Cu, In17_Cu, In18_Cu, In19_Cu, In1_Cu, In20_Cu, In21_Cu, In22_Cu, In23_Cu, In24_Cu, In25_Cu, In26_Cu, In27_Cu, In28_Cu, In29_Cu, In2_Cu, In30_Cu, In3_Cu, In4_Cu, In5_Cu, In6_Cu, In7_Cu, In8_Cu, In9_Cu, LAYER_3D_BACKGROUND_BOTTOM, LAYER_3D_BACKGROUND_TOP, LAYER_3D_BOARD, LAYER_3D_COPPER, LAYER_3D_SILKSCREEN_BOTTOM, LAYER_3D_SILKSCREEN_TOP, LAYER_3D_SOLDERMASK, LAYER_3D_SOLDERPASTE, LAYER_ANCHOR, LAYER_AUX_ITEMS, LAYER_BRIGHTENED, LAYER_BUS, LAYER_BUS_JUNCTION, LAYER_CURSOR, LAYER_DCODES, LAYER_DEVICE, LAYER_DEVICE_BACKGROUND, LAYER_DRC_ERROR, LAYER_DRC_WARNING, LAYER_ERC_ERR, LAYER_ERC_WARN, LAYER_FIELDS, LAYER_GERBVIEW_AXES, LAYER_GERBVIEW_BACKGROUND, LAYER_GERBVIEW_GRID, LAYER_GERBVIEW_WORKSHEET, LAYER_GLOBLABEL, LAYER_GRID, LAYER_GRID_AXES, LAYER_HIDDEN, LAYER_HIERLABEL, LAYER_JUNCTION, LAYER_LOCLABEL, LAYER_MOD_TEXT_BK, LAYER_MOD_TEXT_FR, LAYER_MOD_TEXT_INVISIBLE, LAYER_NEGATIVE_OBJECTS, LAYER_NETNAM, LAYER_NO_CONNECTS, LAYER_NOCONNECT, LAYER_NON_PLATEDHOLES, LAYER_NOTES, LAYER_PAD_BK, LAYER_PAD_FR, LAYER_PADS_PLATEDHOLES, LAYER_PADS_TH, LAYER_PCB_BACKGROUND, LAYER_PIN, LAYER_PINNAM, LAYER_PINNUM, LAYER_RATSNEST, LAYER_REFERENCEPART, LAYER_SCHEMATIC_BACKGROUND, LAYER_SCHEMATIC_CURSOR, LAYER_SCHEMATIC_GRID, LAYER_SCHEMATIC_GRID_AXES, LAYER_SCHEMATIC_WORKSHEET, LAYER_SELECT_OVERLAY, LAYER_SELECTION_SHADOWS, LAYER_SHEET, LAYER_SHEET_BACKGROUND, LAYER_SHEETFIELDS, LAYER_SHEETFILENAME, LAYER_SHEETLABEL, LAYER_SHEETNAME, LAYER_VALUEPART, LAYER_VIA_BBLIND, LAYER_VIA_MICROVIA, LAYER_VIA_THROUGH, LAYER_VIAS, LAYER_VIAS_HOLES, LAYER_WIRE, LAYER_WORKSHEET, LIGHTBLUE, LIGHTCYAN, LIGHTGRAY, LIGHTMAGENTA, LIGHTRED, LIGHTYELLOW, m_displayName, m_overrideSchItemColors, m_Palette, JSON_SETTINGS::m_params, MAGENTA, Margin, PUREGREEN, PUREMAGENTA, PURERED, PUREYELLOW, RED, WHITE, and YELLOW.

◆ ~COLOR_SETTINGS()

virtual COLOR_SETTINGS::~COLOR_SETTINGS ( )
inlinevirtual

Definition at line 65 of file color_settings.h.

65 {}

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 407 of file json_settings.cpp.

408 {
409  wxLogTrace( traceSettings, "AddNestedSettings %s", aSettings->GetFilename() );
410  m_nested_settings.push_back( aSettings );
411 }
std::vector< NESTED_SETTINGS * > m_nested_settings
Nested settings files that live inside this one, if any.
std::string GetFilename() const
Definition: json_settings.h:57
const char * traceSettings
Flag to enable settings tracing.

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

Referenced by NESTED_SETTINGS::NESTED_SETTINGS().

◆ 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 319 of file json_settings.cpp.

321 {
322  ValueType val;
323 
324  if( aConfig->Read( aKey, &val ) )
325  {
326  try
327  {
328  ( *this )[PointerFromString( aDest )] = val;
329  }
330  catch( ... )
331  {
332  wxASSERT_MSG( false, wxT( "Could not write value in fromLegacy!" ) );
333  return false;
334  }
335 
336  return true;
337  }
338 
339  return false;
340 }
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 379 of file json_settings.cpp.

381 {
382  wxString str;
383 
384  if( aConfig->Read( aKey, &str ) )
385  {
387  color.SetFromWxString( str );
388 
389  try
390  {
391  nlohmann::json js = nlohmann::json::array( { color.r, color.g, color.b, color.a } );
392  ( *this )[PointerFromString( aDest )] = js;
393  }
394  catch( ... )
395  {
396  wxASSERT_MSG( false, wxT( "Could not write value in fromLegacyColor!" ) );
397  return false;
398  }
399 
400  return true;
401  }
402 
403  return false;
404 }
int color
Definition: DXF_plotter.cpp:61
nlohmann::json json
Definition: gerbview.cpp:40
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:40

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 355 of file json_settings.cpp.

357 {
358  wxString str;
359 
360  if( aConfig->Read( aKey, &str ) )
361  {
362  try
363  {
364  ( *this )[PointerFromString( aDest )] = str.ToUTF8();
365  }
366  catch( ... )
367  {
368  wxASSERT_MSG( false, wxT( "Could not write value in fromLegacyString!" ) );
369  return false;
370  }
371 
372  return true;
373  }
374 
375  return false;
376 }
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(), LIBEDIT_SETTINGS::MigrateFromLegacy(), COMMON_SETTINGS::MigrateFromLegacy(), APP_SETTINGS_BASE::MigrateFromLegacy(), PCB_CALCULATOR_SETTINGS::MigrateFromLegacy(), EESCHEMA_SETTINGS::MigrateFromLegacy(), PCBNEW_SETTINGS::MigrateFromLegacy(), and APP_SETTINGS_BASE::migrateWindowConfig().

◆ Get() [1/2]

template<typename ValueType >
OPT<ValueType> JSON_SETTINGS::Get ( 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 107 of file json_settings.h.

108  {
109  if( OPT<nlohmann::json> ret = GetJson( std::move( aPath ) ) )
110  {
111  try
112  {
113  return ret->get<ValueType>();
114  }
115  catch( ... )
116  {
117  }
118  }
119 
120  return NULLOPT;
121  }
const auto NULLOPT
Definition: optional.h:9
OPT< nlohmann::json > GetJson(std::string aPath) const
Fetches a JSON object that is a subset of this JSON_SETTINGS object, using a path of the form "key1....
boost::optional< T > OPT
Definition: optional.h:7

References JSON_SETTINGS::GetJson(), and NULLOPT.

Referenced by PARAM< ValueType >::Load(), COLOR_MAP_PARAM::Load(), PARAM_LAMBDA< ValueType >::Load(), and PARAM_SCALED< ValueType >::Load().

◆ Get() [2/2]

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

Definition at line 432 of file json_settings.cpp.

433 {
434  if( OPT<nlohmann::json> opt_json = GetJson( std::move( aPath ) ) )
435  return wxString( opt_json->get<std::string>().c_str(), wxConvUTF8 );
436 
437  return NULLOPT;
438 }
const auto NULLOPT
Definition: optional.h:9
OPT< nlohmann::json > GetJson(std::string aPath) const
Fetches a JSON object that is a subset of this JSON_SETTINGS object, using a path of the form "key1....
boost::optional< T > OPT
Definition: optional.h:7

References JSON_SETTINGS::GetJson(), and NULLOPT.

◆ GetColor()

COLOR4D COLOR_SETTINGS::GetColor ( int  aLayer) const

Definition at line 287 of file color_settings.cpp.

288 {
289  if( m_colors.count( aLayer ) )
290  return m_colors.at( aLayer );
291 
292  return COLOR4D::UNSPECIFIED;
293 }
std::unordered_map< int, COLOR4D > m_colors
Map of all layer colors.

References m_colors.

Referenced by LIB_EDIT_FRAME::CommonSettingsChanged(), PANEL_COLOR_SETTINGS::createSwatch(), PANEL_MODEDIT_COLOR_SETTINGS::createSwatches(), PANEL_PCBNEW_COLOR_SETTINGS::createSwatches(), GRID_CELL_LAYER_RENDERER::Draw(), PCB_LAYER_WIDGET::getBackgroundLayerColor(), BRDITEMS_PLOTTER::getColor(), FOOTPRINT_VIEWER_FRAME::GetGridColor(), BOARD_ADAPTER::GetItemColor(), PCB_LAYER_SELECTOR::getLayerColor(), PCB_LAYER_BOX_SELECTOR::getLayerColor(), SCH_BASE_FRAME::GetLayerColor(), BOARD_ADAPTER::GetLayerColor(), KIGFX::WS_RENDER_SETTINGS::LoadColors(), KIGFX::GERBVIEW_RENDER_SETTINGS::LoadColors(), KIGFX::SCH_RENDER_SETTINGS::LoadColors(), KIGFX::PCB_RENDER_SETTINGS::LoadColors(), PANEL_COLOR_SETTINGS::OnThemeChanged(), BRDITEMS_PLOTTER::PlotDimension(), PlotStandardLayer(), PCB_EDIT_FRAME::PrepareLayerIndicator(), SCH_PRINTOUT::PrintPage(), PCB_LAYER_WIDGET::ReFill(), PCB_LAYER_WIDGET::ReFillRender(), PANEL_EESCHEMA_COLOR_SETTINGS::saveCurrentTheme(), PANEL_COLOR_SETTINGS::saveCurrentTheme(), ZONE_SETTINGS::SetupLayersList(), PANEL_COLOR_SETTINGS::ShowColorContextMenu(), LIB_EDIT_FRAME::SwitchCanvas(), PCB_LAYER_WIDGET::SyncLayerColors(), PANEL_EESCHEMA_SETTINGS::TransferDataToWindow(), DIALOG_SCH_SHEET_PROPS::TransferDataToWindow(), PANEL_COLOR_SETTINGS::updateColor(), PCB_DRAW_PANEL_GAL::UpdateColors(), and PANEL_EESCHEMA_COLOR_SETTINGS::validateSave().

◆ GetDefaultColor()

COLOR4D COLOR_SETTINGS::GetDefaultColor ( int  aLayer)

Definition at line 296 of file color_settings.cpp.

297 {
298  if( !m_defaultColors.count( aLayer ) )
299  {
300  COLOR_MAP_PARAM* p = nullptr;
301 
302  for( PARAM_BASE* param : m_params )
303  {
304  COLOR_MAP_PARAM* cmp = dynamic_cast<COLOR_MAP_PARAM*>( param );
305 
306  if( cmp && cmp->GetKey() == aLayer )
307  p = cmp;
308  }
309 
310  if( p )
311  m_defaultColors[aLayer] = p->GetDefault();
312  else
313  m_defaultColors[aLayer] = COLOR4D::UNSPECIFIED;
314  }
315 
316  return m_defaultColors.at( aLayer );;
317 }
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)
COLOR4D GetDefault() const
std::unordered_map< int, COLOR4D > m_defaultColors

References COLOR_MAP_PARAM::GetDefault(), m_defaultColors, and JSON_SETTINGS::m_params.

Referenced by PANEL_COLOR_SETTINGS::createSwatch(), PANEL_COLOR_SETTINGS::OnBtnResetClicked(), PCB_LAYER_WIDGET::ReFill(), and PCB_LAYER_WIDGET::ReFillRender().

◆ GetFilename()

◆ GetJson()

OPT< nlohmann::json > JSON_SETTINGS::GetJson ( 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 264 of file json_settings.cpp.

265 {
266  nlohmann::json::json_pointer ptr = PointerFromString( std::move( aPath ) );
267 
268  if( this->contains( ptr ) )
269  {
270  try
271  {
272  return OPT<nlohmann::json>{ this->at( ptr ) };
273  }
274  catch( ... )
275  {
276  }
277  }
278 
279  return OPT<nlohmann::json>{};
280 }
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 JSON_SETTINGS::PointerFromString().

Referenced by JSON_SETTINGS::Get(), PARAM_LAMBDA< ValueType >::Load(), PARAM_LIST< Type >::Load(), and PARAM_MAP< Value >::Load().

◆ GetLocation()

SETTINGS_LOC JSON_SETTINGS::GetLocation ( ) const
inlineinherited

Definition at line 59 of file json_settings.h.

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

References JSON_SETTINGS::m_location.

Referenced by SETTINGS_MANAGER::GetPathForSettingsFile().

◆ GetName()

const wxString& COLOR_SETTINGS::GetName ( void  ) const
inline

◆ GetOverrideSchItemColors()

◆ Load()

void JSON_SETTINGS::Load ( )
virtualinherited

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

Definition at line 67 of file json_settings.cpp.

68 {
69  for( auto param : m_params )
70  {
71  try
72  {
73  param->Load( this );
74  }
75  catch( ... )
76  {
77  // Skip unreadable parameters in file:
78 #ifdef DEBUG
79  wxLogMessage( wxString::Format( "param '%s' load err", param->GetJsonPath().c_str() ) );
80 #endif
81  }
82  }
83 }
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205

References Format(), and JSON_SETTINGS::m_params.

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

◆ LoadFromFile()

void JSON_SETTINGS::LoadFromFile ( const std::string &  aDirectory)
virtualinherited

Loads the backing file from disk and then calls Load()

Parameters
aDirectoryis the path to the file

Reimplemented in NESTED_SETTINGS.

Definition at line 86 of file json_settings.cpp.

87 {
88  // First, load all params to default values
89  clear();
90  Load();
91 
92  bool migrated = false;
93  bool legacy_migrated = false;
94  LOCALE_IO locale;
95 
96  auto migrateFromLegacy = [&] ( wxFileName& aPath ) {
97  wxConfigBase::DontCreateOnDemand();
98  auto cfg = std::make_unique<wxFileConfig>( wxT( "" ), wxT( "" ), aPath.GetFullPath() );
99 
100  // If migrate fails or is not implemented, fall back to built-in defaults that were
101  // already loaded above
102  if( !MigrateFromLegacy( cfg.get() ) )
103  {
104  wxLogTrace( traceSettings,
105  "%s: migrated; not all settings were found in legacy file", m_filename );
106  }
107  else
108  {
109  wxLogTrace( traceSettings, "%s: migrated from legacy format", m_filename );
110  }
111 
112  // Either way, we want to clean up the old file afterwards
113  legacy_migrated = true;
114  };
115 
116  wxFileName path( aDirectory, m_filename, "json" );
117 
118  if( !path.Exists() )
119  {
120  // Case 1: legacy migration, no .json extension yet
121  path.ClearExt();
122 
123  if( path.Exists() )
124  {
125  migrateFromLegacy( path );
126  }
127  // Case 2: legacy filename is different from new one
128  else if( !m_legacy_filename.empty() )
129  {
130  path.SetName( m_legacy_filename );
131 
132  if( path.Exists() )
133  migrateFromLegacy( path );
134  }
135  }
136  else
137  {
138  try
139  {
140  std::ifstream in( path.GetFullPath().ToStdString() );
141  in >> *this;
142 
143  // If parse succeeds, check if schema migration is required
144  int filever = -1;
145 
146  try
147  {
148  filever = at( PointerFromString( "meta.version" ) ).get<int>();
149  }
150  catch( ... )
151  {
152  wxLogTrace( traceSettings, "%s: file version could not be read!", m_filename );
153  }
154 
155  if( filever >= 0 && filever < m_schemaVersion )
156  {
157  wxLogTrace( traceSettings, "%s: attempting migration from version %d to %d",
158  m_filename, filever, m_schemaVersion );
159 
160  if( Migrate() )
161  {
162  migrated = true;
163  }
164  else
165  {
166  wxLogTrace( traceSettings, "%s: migration failed!", m_filename );
167  }
168  }
169  else if( filever > m_schemaVersion )
170  {
171  wxLogTrace( traceSettings,
172  "%s: warning: file version %d is newer than latest (%d)", m_filename,
173  filever, m_schemaVersion );
174  }
175  }
176  catch( nlohmann::json::parse_error& error )
177  {
178  wxLogTrace(
179  traceSettings, "Parse error reading %s: %s", path.GetFullPath(), error.what() );
180  wxLogTrace( traceSettings, "Attempting migration in case file is in legacy format" );
181  migrateFromLegacy( path );
182  }
183  }
184 
185  // Now that we have new data in the JSON structure, load the params again
186  Load();
187 
188  // And finally load any nested settings
189  for( auto settings : m_nested_settings )
190  settings->LoadFromFile();
191 
192  wxLogTrace( traceSettings, "Loaded %s with schema %d", GetFilename(), m_schemaVersion );
193 
194  // If we migrated, clean up the legacy file (with no extension)
195  if( legacy_migrated || migrated )
196  {
197  if( legacy_migrated && !wxRemoveFile( path.GetFullPath() ) )
198  {
199  wxLogTrace(
200  traceSettings, "Warning: could not remove legacy file %s", path.GetFullPath() );
201  }
202 
203  // And write-out immediately so that we don't lose data if the program later crashes.
204  SaveToFile( aDirectory );
205  }
206 }
std::string m_filename
The filename (not including path) of this settings file.
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
Definition: common.h:214
virtual bool Migrate()
Migrates the schema of this settings from the version in the file to the latest version.
std::string m_legacy_filename
The filename of the wxConfig legacy file (if different from m_filename)
std::vector< NESTED_SETTINGS * > m_nested_settings
Nested settings files that live inside this one, if any.
std::string GetFilename() const
Definition: json_settings.h:57
virtual void SaveToFile(const std::string &aDirectory)
Calls Store() and then writes the contents of the JSON document to a file.
const char * traceSettings
Flag to enable settings tracing.
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.
virtual bool MigrateFromLegacy(wxConfigBase *aLegacyConfig)
Migrates from wxConfig to JSON-based configuration.
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 JSON_SETTINGS::GetFilename(), JSON_SETTINGS::Load(), JSON_SETTINGS::m_filename, JSON_SETTINGS::m_legacy_filename, JSON_SETTINGS::m_nested_settings, JSON_SETTINGS::m_schemaVersion, JSON_SETTINGS::Migrate(), JSON_SETTINGS::MigrateFromLegacy(), JSON_SETTINGS::PointerFromString(), JSON_SETTINGS::SaveToFile(), and traceSettings.

Referenced by SETTINGS_MANAGER::SaveColorSettings().

◆ Migrate()

bool COLOR_SETTINGS::Migrate ( )
overridevirtual

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

Reimplemented from JSON_SETTINGS.

Definition at line 220 of file color_settings.cpp.

221 {
222  bool ret = true;
223  int filever = at( PointerFromString( "meta.version" ) ).get<int>();
224 
225  if( filever == 0 )
226  {
227  ret &= migrateSchema0to1();
228 
229  if( ret )
230  {
231  ( *this )[PointerFromString( "meta.version" )] = 1;
232  }
233  }
234 
235  return ret;
236 }
static nlohmann::json::json_pointer PointerFromString(std::string aPath)
Builds a JSON pointer based on a given string.

References migrateSchema0to1(), and JSON_SETTINGS::PointerFromString().

◆ MigrateFromLegacy()

bool COLOR_SETTINGS::MigrateFromLegacy ( wxConfigBase *  aLegacyConfig)
overridevirtual

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 from JSON_SETTINGS.

Definition at line 214 of file color_settings.cpp.

215 {
216  return false;
217 }

◆ migrateSchema0to1()

bool COLOR_SETTINGS::migrateSchema0to1 ( )
private

Schema version 0 to 1:

  • Footprint editor settings are split out into a new file called "ThemeName (Footprints)"
  • fpedit namespace is removed from the schema

Definition at line 239 of file color_settings.cpp.

240 {
248  if( !m_manager )
249  {
250  wxLogTrace( traceSettings, "Error: COLOR_SETTINGS migration cannot run unmanaged!" );
251  return false;
252  }
253 
254  nlohmann::json::json_pointer board( "/board" );
255  nlohmann::json::json_pointer fpedit( "/fpedit" );
256 
257  if( !contains( fpedit ) )
258  {
259  wxLogTrace( traceSettings, "migrateSchema0to1: %s doesn't have fpedit settings; skipping.",
260  m_filename );
261  return true;
262  }
263 
264  wxString filename = m_filename + wxT( "_footprints" );
265 
266  COLOR_SETTINGS* fpsettings = m_manager->AddNewColorSettings( filename );
267 
268  // Start out with a clone
269  nlohmann::json::json_pointer root( "" );
270  ( *fpsettings )[root] = at( root );
271 
272  // Footprint editor now just looks at the "board" namespace
273  ( *fpsettings )[board] = fpsettings->at( fpedit );
274 
275  fpsettings->erase( "fpedit" );
276  fpsettings->Load();
277  fpsettings->SetName( fpsettings->GetName() + _( " (Footprints)" ) );
278  m_manager->Save( fpsettings );
279 
280  // Now we can get rid of our own copy
281  erase( "fpedit" );
282 
283  return true;
284 }
std::string m_filename
The filename (not including path) of this settings file.
const wxString & GetName() const
COLOR_SETTINGS * AddNewColorSettings(const wxString &aFilename)
Registers a new color settings object with the given filename.
void SetName(const wxString &aName)
#define _(s)
Definition: 3d_actions.cpp:33
Color settings are a bit different than most of the settings objects in that there can be more than o...
SETTINGS_MANAGER * m_manager
A pointer to the settings manager managing this file (may be null)
const char * traceSettings
Flag to enable settings tracing.
virtual void Load()
Updates the parameters of this object based on the current JSON document contents.

References _, SETTINGS_MANAGER::AddNewColorSettings(), GetName(), JSON_SETTINGS::Load(), JSON_SETTINGS::m_filename, JSON_SETTINGS::m_manager, SETTINGS_MANAGER::Save(), SetName(), and traceSettings.

Referenced by Migrate().

◆ 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 298 of file json_settings.cpp.

299 {
300  std::replace( aPath.begin(), aPath.end(), '.', '/' );
301  aPath.insert( 0, "/" );
302 
303  nlohmann::json::json_pointer p;
304 
305  try
306  {
307  p = nlohmann::json::json_pointer( aPath );
308  }
309  catch( ... )
310  {
311  wxASSERT_MSG( false, wxT( "Invalid pointer path in PointerFromString!" ) );
312  }
313 
314  return p;
315 }

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

◆ 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 414 of file json_settings.cpp.

415 {
416  auto it = std::find_if( m_nested_settings.begin(), m_nested_settings.end(),
417  [&aSettings]( const JSON_SETTINGS* aPtr ) {
418  return aPtr == aSettings;
419  } );
420 
421  if( it != m_nested_settings.end() )
422  {
423  wxLogTrace( traceSettings, "Flush and release %s", ( *it )->GetFilename() );
424  ( *it )->SaveToFile();
425  m_nested_settings.erase( it );
426  }
427 }
std::vector< NESTED_SETTINGS * > m_nested_settings
Nested settings files that live inside this one, if any.
const char * traceSettings
Flag to enable settings tracing.

References JSON_SETTINGS::m_nested_settings, and traceSettings.

Referenced by NESTED_SETTINGS::~NESTED_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 216 of file json_settings.cpp.

217 {
218  for( auto param : m_params )
219  param->SetDefault();
220 }
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().

◆ SaveToFile()

void JSON_SETTINGS::SaveToFile ( const std::string &  aDirectory)
virtualinherited

Calls Store() and then writes the contents of the JSON document to a file.

Parameters
aDirectoryis the directory to save to, including trailing separator

Reimplemented in NESTED_SETTINGS.

Definition at line 223 of file json_settings.cpp.

224 {
225  if( !m_writeFile )
226  return;
227 
228  wxLogTrace( traceSettings, "Saving %s", m_filename );
229 
230  wxFileName path( aDirectory, m_filename, "json" );
231 
232  if( !m_createIfMissing && !path.FileExists() )
233  return;
234 
235  if( !path.DirExists() && !path.Mkdir() )
236  {
237  wxLogTrace( traceSettings, "Warning: could not create path %s, can't save %s",
238  path.GetPath(), m_filename );
239  return;
240  }
241 
242  for( auto settings : m_nested_settings )
243  settings->SaveToFile();
244 
245  Store();
246 
248 
249  try
250  {
251  std::ofstream file( path.GetFullPath().ToStdString() );
252  file << std::setw( 2 ) << *this << std::endl;
253  }
254  catch( const std::exception& e )
255  {
256  wxLogTrace( traceSettings, "Warning: could not save %s: %s", m_filename, e.what() );
257  }
258  catch( ... )
259  {
260  }
261 }
std::string m_filename
The filename (not including path) of this settings file.
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
Definition: common.h:214
bool m_createIfMissing
Whether or not the backing store file should be created it if doesn't exist.
std::vector< NESTED_SETTINGS * > m_nested_settings
Nested settings files that live inside this one, if any.
virtual void Store()
Stores the current parameters into the JSON document represented by this object Note: this doesn't do...
static LIB_PART * dummy()
Used to draw a dummy shape when a LIB_PART is not found in library.
const char * traceSettings
Flag to enable settings tracing.
bool m_writeFile
Whether or not the backing store file should be written.

References dummy(), JSON_SETTINGS::m_createIfMissing, JSON_SETTINGS::m_filename, JSON_SETTINGS::m_nested_settings, JSON_SETTINGS::m_writeFile, JSON_SETTINGS::Store(), and traceSettings.

Referenced by JSON_SETTINGS::LoadFromFile(), PANEL_COLOR_SETTINGS::OnThemeChanged(), and SETTINGS_MANAGER::SaveColorSettings().

◆ Set() [1/3]

template<typename ValueType >
void JSON_SETTINGS::Set ( 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 131 of file json_settings.h.

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

References JSON_SETTINGS::PointerFromString().

Referenced by PARAM< ValueType >::Store(), COLOR_MAP_PARAM::Store(), PARAM_LAMBDA< ValueType >::Store(), PARAM_SCALED< ValueType >::Store(), PARAM_LIST< Type >::Store(), and PARAM_MAP< Value >::Store().

◆ Set() [2/3]

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

◆ Set() [3/3]

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

Definition at line 441 of file json_settings.cpp.

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

References JSON_SETTINGS::PointerFromString().

◆ SetColor()

◆ SetLegacyFilename()

void JSON_SETTINGS::SetLegacyFilename ( const std::string &  aFilename)
inlineinherited

Definition at line 61 of file json_settings.h.

61 { m_legacy_filename = aFilename; }
std::string m_legacy_filename
The filename of the wxConfig legacy file (if different from m_filename)

References JSON_SETTINGS::m_legacy_filename.

Referenced by LIBEDIT_SETTINGS::LIBEDIT_SETTINGS().

◆ SetManager()

void JSON_SETTINGS::SetManager ( SETTINGS_MANAGER aManager)
inlineinherited

Definition at line 171 of file json_settings.h.

172  {
173  m_manager = aManager;
174  }
SETTINGS_MANAGER * m_manager
A pointer to the settings manager managing this file (may be null)

References JSON_SETTINGS::m_manager.

◆ SetName()

void COLOR_SETTINGS::SetName ( const wxString &  aName)
inline

◆ SetOverrideSchItemColors()

◆ Store()

void 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.

Definition at line 209 of file json_settings.cpp.

210 {
211  for( auto param : m_params )
212  param->Store( this );
213 }
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)

References JSON_SETTINGS::m_params.

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

Member Data Documentation

◆ m_colors

std::unordered_map<int, COLOR4D> COLOR_SETTINGS::m_colors
private

Map of all layer colors.

The key needs to be a valid layer ID, see layers_id_colors_and_visibility.h

Definition at line 94 of file color_settings.h.

Referenced by GetColor(), and SetColor().

◆ 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 229 of file json_settings.h.

Referenced by JSON_SETTINGS::SaveToFile().

◆ m_defaultColors

std::unordered_map<int, COLOR4D> COLOR_SETTINGS::m_defaultColors
private

Definition at line 96 of file color_settings.h.

Referenced by GetDefaultColor().

◆ m_displayName

wxString COLOR_SETTINGS::m_displayName
private

Definition at line 86 of file color_settings.h.

Referenced by COLOR_SETTINGS(), GetName(), and SetName().

◆ m_filename

std::string JSON_SETTINGS::m_filename
protectedinherited

◆ m_legacy_filename

std::string JSON_SETTINGS::m_legacy_filename
protectedinherited

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

Definition at line 217 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 220 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 238 of file json_settings.h.

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

◆ 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 226 of file json_settings.h.

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

◆ m_overrideSchItemColors

bool COLOR_SETTINGS::m_overrideSchItemColors
private

◆ m_Palette

std::vector<COLOR4D> COLOR_SETTINGS::m_Palette

m_Pallete stores a list of colors that are used, in order, when a list of colors needs to be generated for an application.

For example, layer colors in GerbView, or default layer colors in PcbNew.

Definition at line 61 of file color_settings.h.

Referenced by COLOR_SETTINGS(), and KIGFX::GERBVIEW_RENDER_SETTINGS::LoadColors().

◆ m_params

◆ 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 241 of file json_settings.h.

◆ m_schemaVersion

int JSON_SETTINGS::m_schemaVersion
protectedinherited

◆ m_writeFile

bool JSON_SETTINGS::m_writeFile
protectedinherited

Whether or not the backing store file should be written.

Definition at line 232 of file json_settings.h.

Referenced by JSON_SETTINGS::SaveToFile().


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