KiCad PCB EDA Suite
Loading...
Searching...
No Matches
color_settings.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2020 Jon Evans <[email protected]>
5 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software: you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation, either version 3 of the License, or (at your
10 * option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 */
20
21#include <layer_ids.h>
24#include <settings/parameters.h>
26#include <wx/log.h>
27#include <wx/translation.h>
28
30
31
33const int colorsSchemaVersion = 6;
34const wxString COLOR_SETTINGS::COLOR_BUILTIN_DEFAULT = "_builtin_default";
35const wxString COLOR_SETTINGS::COLOR_BUILTIN_CLASSIC = "_builtin_classic";
36
37
38COLOR_SETTINGS::COLOR_SETTINGS( const wxString& aFilename, bool aAbsolutePath ) :
41{
42 if( aAbsolutePath )
44
45 m_params.emplace_back( new PARAM<wxString>( "meta.name", &m_displayName,
46 wxS( "KiCad Default" ) ) );
47
48 m_params.emplace_back( new PARAM<bool>( "schematic.override_item_colors",
49 &m_overrideSchItemColors, false ) );
50
51#define EMPLACE_COLOR_PARAM( x, y ) \
52 wxASSERT( s_defaultTheme.count( y ) ); \
53 m_params.emplace_back( new COLOR_MAP_PARAM( x, y, s_defaultTheme.at( y ), &m_colors ) );
54
55 EMPLACE_COLOR_PARAM( "schematic.anchor", LAYER_SCHEMATIC_ANCHOR );
56 EMPLACE_COLOR_PARAM( "schematic.aux_items", LAYER_SCHEMATIC_AUX_ITEMS );
57 EMPLACE_COLOR_PARAM( "schematic.background", LAYER_SCHEMATIC_BACKGROUND );
58 EMPLACE_COLOR_PARAM( "schematic.hovered", LAYER_HOVERED );
59 EMPLACE_COLOR_PARAM( "schematic.brightened", LAYER_BRIGHTENED );
60 EMPLACE_COLOR_PARAM( "schematic.bus", LAYER_BUS );
61 EMPLACE_COLOR_PARAM( "schematic.bus_junction", LAYER_BUS_JUNCTION );
62 EMPLACE_COLOR_PARAM( "schematic.component_body", LAYER_DEVICE_BACKGROUND );
63 EMPLACE_COLOR_PARAM( "schematic.component_outline", LAYER_DEVICE );
64 EMPLACE_COLOR_PARAM( "schematic.cursor", LAYER_SCHEMATIC_CURSOR );
65 EMPLACE_COLOR_PARAM( "schematic.dnp_marker", LAYER_DNP_MARKER );
66 EMPLACE_COLOR_PARAM( "schematic.excluded_from_sim", LAYER_EXCLUDED_FROM_SIM );
67 EMPLACE_COLOR_PARAM( "schematic.erc_error", LAYER_ERC_ERR );
68 EMPLACE_COLOR_PARAM( "schematic.erc_warning", LAYER_ERC_WARN );
69 EMPLACE_COLOR_PARAM( "schematic.erc_exclusion", LAYER_ERC_EXCLUSION );
70 EMPLACE_COLOR_PARAM( "schematic.fields", LAYER_FIELDS );
71 EMPLACE_COLOR_PARAM( "schematic.grid", LAYER_SCHEMATIC_GRID );
72 EMPLACE_COLOR_PARAM( "schematic.grid_axes", LAYER_SCHEMATIC_GRID_AXES );
73 EMPLACE_COLOR_PARAM( "schematic.hidden", LAYER_HIDDEN );
74 EMPLACE_COLOR_PARAM( "schematic.junction", LAYER_JUNCTION );
75 EMPLACE_COLOR_PARAM( "schematic.label_global", LAYER_GLOBLABEL );
76 EMPLACE_COLOR_PARAM( "schematic.label_hier", LAYER_HIERLABEL );
77 EMPLACE_COLOR_PARAM( "schematic.label_local", LAYER_LOCLABEL );
78 EMPLACE_COLOR_PARAM( "schematic.netclass_flag", LAYER_NETCLASS_REFS );
79 EMPLACE_COLOR_PARAM( "schematic.drag_net_collision", LAYER_DRAG_NET_COLLISION );
80 EMPLACE_COLOR_PARAM( "schematic.rule_area", LAYER_RULE_AREAS );
81 EMPLACE_COLOR_PARAM( "schematic.no_connect", LAYER_NOCONNECT );
82 EMPLACE_COLOR_PARAM( "schematic.note", LAYER_NOTES );
83 EMPLACE_COLOR_PARAM( "schematic.private_note", LAYER_PRIVATE_NOTES );
84 EMPLACE_COLOR_PARAM( "schematic.note_background", LAYER_NOTES_BACKGROUND );
85 EMPLACE_COLOR_PARAM( "schematic.pin", LAYER_PIN );
86 EMPLACE_COLOR_PARAM( "schematic.pin_name", LAYER_PINNAM );
87 EMPLACE_COLOR_PARAM( "schematic.pin_number", LAYER_PINNUM );
88 EMPLACE_COLOR_PARAM( "schematic.reference", LAYER_REFERENCEPART );
89 EMPLACE_COLOR_PARAM( "schematic.shadow", LAYER_SELECTION_SHADOWS );
90 EMPLACE_COLOR_PARAM( "schematic.sheet", LAYER_SHEET );
91 EMPLACE_COLOR_PARAM( "schematic.sheet_background", LAYER_SHEET_BACKGROUND );
92 EMPLACE_COLOR_PARAM( "schematic.sheet_filename", LAYER_SHEETFILENAME );
93 EMPLACE_COLOR_PARAM( "schematic.sheet_fields", LAYER_SHEETFIELDS );
94 EMPLACE_COLOR_PARAM( "schematic.sheet_label", LAYER_SHEETLABEL );
95 EMPLACE_COLOR_PARAM( "schematic.sheet_name", LAYER_SHEETNAME );
96 EMPLACE_COLOR_PARAM( "schematic.value", LAYER_VALUEPART );
97 EMPLACE_COLOR_PARAM( "schematic.wire", LAYER_WIRE );
98 EMPLACE_COLOR_PARAM( "schematic.worksheet", LAYER_SCHEMATIC_DRAWINGSHEET );
99 EMPLACE_COLOR_PARAM( "schematic.page_limits", LAYER_SCHEMATIC_PAGE_LIMITS );
100 EMPLACE_COLOR_PARAM( "schematic.op_voltages", LAYER_OP_VOLTAGES );
101 EMPLACE_COLOR_PARAM( "schematic.op_currents", LAYER_OP_CURRENTS );
102
103 EMPLACE_COLOR_PARAM( "gerbview.axes", LAYER_GERBVIEW_AXES );
104 EMPLACE_COLOR_PARAM( "gerbview.background", LAYER_GERBVIEW_BACKGROUND );
105 EMPLACE_COLOR_PARAM( "gerbview.dcodes", LAYER_DCODES );
106 EMPLACE_COLOR_PARAM( "gerbview.grid", LAYER_GERBVIEW_GRID );
107 EMPLACE_COLOR_PARAM( "gerbview.negative_objects", LAYER_NEGATIVE_OBJECTS );
108 EMPLACE_COLOR_PARAM( "gerbview.worksheet", LAYER_GERBVIEW_DRAWINGSHEET );
109 EMPLACE_COLOR_PARAM( "gerbview.page_limits", LAYER_GERBVIEW_PAGE_LIMITS );
110
111 for( int i = 0, id = GERBVIEW_LAYER_ID_START;
113 {
114 if( !s_defaultTheme.count( id ) )
115 {
116 wxLogTrace( "colors", "Missing default color for gerbview layer %d", id );
117 continue;
118 }
119
120 m_params.emplace_back( new COLOR_MAP_PARAM( "gerbview.layers." + std::to_string( i ), id,
121 s_defaultTheme.at( id ), &m_colors ) );
122 }
123
124 EMPLACE_COLOR_PARAM( "board.anchor", LAYER_ANCHOR );
125 EMPLACE_COLOR_PARAM( "board.locked_shadow", LAYER_LOCKED_ITEM_SHADOW );
126 EMPLACE_COLOR_PARAM( "board.conflicts_shadow", LAYER_CONFLICTS_SHADOW );
127 EMPLACE_COLOR_PARAM( "board.constraint_shadow", LAYER_CONSTRAINT_SHADOW );
128 EMPLACE_COLOR_PARAM( "board.constraint_under", LAYER_CONSTRAINT_UNDER );
129 EMPLACE_COLOR_PARAM( "board.constraint_well", LAYER_CONSTRAINT_WELL );
130 EMPLACE_COLOR_PARAM( "board.constraint_over", LAYER_CONSTRAINT_OVER );
131 EMPLACE_COLOR_PARAM( "board.aux_items", LAYER_AUX_ITEMS );
132 EMPLACE_COLOR_PARAM( "board.background", LAYER_PCB_BACKGROUND );
133 EMPLACE_COLOR_PARAM( "board.cursor", LAYER_CURSOR );
134 EMPLACE_COLOR_PARAM( "board.drc_error", LAYER_DRC_ERROR );
135 EMPLACE_COLOR_PARAM( "board.drc_warning", LAYER_DRC_WARNING );
136 EMPLACE_COLOR_PARAM( "board.drc_exclusion", LAYER_DRC_EXCLUSION );
137 EMPLACE_COLOR_PARAM( "board.drc_highlighted", LAYER_DRC_HIGHLIGHTED );
138 EMPLACE_COLOR_PARAM( "board.grid", LAYER_GRID );
139 EMPLACE_COLOR_PARAM( "board.grid_axes", LAYER_GRID_AXES );
140 EMPLACE_COLOR_PARAM( "board.pad_plated_hole", LAYER_PAD_PLATEDHOLES );
141 EMPLACE_COLOR_PARAM( "board.plated_hole", LAYER_NON_PLATEDHOLES );
142 EMPLACE_COLOR_PARAM( "board.ratsnest", LAYER_RATSNEST );
143 EMPLACE_COLOR_PARAM( "board.via_hole", LAYER_VIA_HOLES );
144 EMPLACE_COLOR_PARAM( "board.via_hole_walls", LAYER_VIA_HOLEWALLS );
145 EMPLACE_COLOR_PARAM( "board.worksheet", LAYER_DRAWINGSHEET );
146 EMPLACE_COLOR_PARAM( "board.page_limits", LAYER_PAGE_LIMITS );
147 EMPLACE_COLOR_PARAM( "board.outline_area", LAYER_BOARD_OUTLINE_AREA );
148 EMPLACE_COLOR_PARAM( "board.track_net_names", NETNAMES_LAYER_ID_START );
149 EMPLACE_COLOR_PARAM( "board.pad_net_names", LAYER_PAD_NETNAMES );
150 EMPLACE_COLOR_PARAM( "board.via_net_names", LAYER_VIA_NETNAMES );
151 EMPLACE_COLOR_PARAM( "board.points", LAYER_POINTS );
152 EMPLACE_COLOR_PARAM( "board.subgrids", LAYER_SUBGRIDS );
153 EMPLACE_COLOR_PARAM( "board.via_stitching", LAYER_VIA_STITCHING );
154
155 EMPLACE_COLOR_PARAM( "board.copper.f", F_Cu );
156 EMPLACE_COLOR_PARAM( "board.copper.in1", In1_Cu );
157 EMPLACE_COLOR_PARAM( "board.copper.in2", In2_Cu );
158 EMPLACE_COLOR_PARAM( "board.copper.in3", In3_Cu );
159 EMPLACE_COLOR_PARAM( "board.copper.in4", In4_Cu );
160 EMPLACE_COLOR_PARAM( "board.copper.in5", In5_Cu );
161 EMPLACE_COLOR_PARAM( "board.copper.in6", In6_Cu );
162 EMPLACE_COLOR_PARAM( "board.copper.in7", In7_Cu );
163 EMPLACE_COLOR_PARAM( "board.copper.in8", In8_Cu );
164 EMPLACE_COLOR_PARAM( "board.copper.in9", In9_Cu );
165 EMPLACE_COLOR_PARAM( "board.copper.in10", In10_Cu );
166 EMPLACE_COLOR_PARAM( "board.copper.in11", In11_Cu );
167 EMPLACE_COLOR_PARAM( "board.copper.in12", In12_Cu );
168 EMPLACE_COLOR_PARAM( "board.copper.in13", In13_Cu );
169 EMPLACE_COLOR_PARAM( "board.copper.in14", In14_Cu );
170 EMPLACE_COLOR_PARAM( "board.copper.in15", In15_Cu );
171 EMPLACE_COLOR_PARAM( "board.copper.in16", In16_Cu );
172 EMPLACE_COLOR_PARAM( "board.copper.in17", In17_Cu );
173 EMPLACE_COLOR_PARAM( "board.copper.in18", In18_Cu );
174 EMPLACE_COLOR_PARAM( "board.copper.in19", In19_Cu );
175 EMPLACE_COLOR_PARAM( "board.copper.in20", In20_Cu );
176 EMPLACE_COLOR_PARAM( "board.copper.in21", In21_Cu );
177 EMPLACE_COLOR_PARAM( "board.copper.in22", In22_Cu );
178 EMPLACE_COLOR_PARAM( "board.copper.in23", In23_Cu );
179 EMPLACE_COLOR_PARAM( "board.copper.in24", In24_Cu );
180 EMPLACE_COLOR_PARAM( "board.copper.in25", In25_Cu );
181 EMPLACE_COLOR_PARAM( "board.copper.in26", In26_Cu );
182 EMPLACE_COLOR_PARAM( "board.copper.in27", In27_Cu );
183 EMPLACE_COLOR_PARAM( "board.copper.in28", In28_Cu );
184 EMPLACE_COLOR_PARAM( "board.copper.in29", In29_Cu );
185 EMPLACE_COLOR_PARAM( "board.copper.in30", In30_Cu );
186 EMPLACE_COLOR_PARAM( "board.copper.b", B_Cu );
187
188 EMPLACE_COLOR_PARAM( "board.b_adhes", B_Adhes );
189 EMPLACE_COLOR_PARAM( "board.f_adhes", F_Adhes );
190 EMPLACE_COLOR_PARAM( "board.b_paste", B_Paste );
191 EMPLACE_COLOR_PARAM( "board.f_paste", F_Paste );
192 EMPLACE_COLOR_PARAM( "board.b_silks", B_SilkS );
193 EMPLACE_COLOR_PARAM( "board.f_silks", F_SilkS );
194 EMPLACE_COLOR_PARAM( "board.b_mask", B_Mask );
195 EMPLACE_COLOR_PARAM( "board.f_mask", F_Mask );
196 EMPLACE_COLOR_PARAM( "board.dwgs_user", Dwgs_User );
197 EMPLACE_COLOR_PARAM( "board.cmts_user", Cmts_User );
198 EMPLACE_COLOR_PARAM( "board.eco1_user", Eco1_User );
199 EMPLACE_COLOR_PARAM( "board.eco2_user", Eco2_User );
200 EMPLACE_COLOR_PARAM( "board.edge_cuts", Edge_Cuts );
201 EMPLACE_COLOR_PARAM( "board.margin", Margin );
202 EMPLACE_COLOR_PARAM( "board.b_crtyd", B_CrtYd );
203 EMPLACE_COLOR_PARAM( "board.f_crtyd", F_CrtYd );
204 EMPLACE_COLOR_PARAM( "board.b_fab", B_Fab );
205 EMPLACE_COLOR_PARAM( "board.f_fab", F_Fab );
206 EMPLACE_COLOR_PARAM( "board.user_1", User_1 );
207 EMPLACE_COLOR_PARAM( "board.user_2", User_2 );
208 EMPLACE_COLOR_PARAM( "board.user_3", User_3 );
209 EMPLACE_COLOR_PARAM( "board.user_4", User_4 );
210 EMPLACE_COLOR_PARAM( "board.user_5", User_5 );
211 EMPLACE_COLOR_PARAM( "board.user_6", User_6 );
212 EMPLACE_COLOR_PARAM( "board.user_7", User_7 );
213 EMPLACE_COLOR_PARAM( "board.user_8", User_8 );
214 EMPLACE_COLOR_PARAM( "board.user_9", User_9 );
215 EMPLACE_COLOR_PARAM( "board.user_10", User_10 );
216 EMPLACE_COLOR_PARAM( "board.user_11", User_11 );
217 EMPLACE_COLOR_PARAM( "board.user_12", User_12 );
218 EMPLACE_COLOR_PARAM( "board.user_13", User_13 );
219 EMPLACE_COLOR_PARAM( "board.user_14", User_14 );
220 EMPLACE_COLOR_PARAM( "board.user_15", User_15 );
221 EMPLACE_COLOR_PARAM( "board.user_16", User_16 );
222 EMPLACE_COLOR_PARAM( "board.user_17", User_17 );
223 EMPLACE_COLOR_PARAM( "board.user_18", User_18 );
224 EMPLACE_COLOR_PARAM( "board.user_19", User_19 );
225 EMPLACE_COLOR_PARAM( "board.user_20", User_20 );
226 EMPLACE_COLOR_PARAM( "board.user_21", User_21 );
227 EMPLACE_COLOR_PARAM( "board.user_22", User_22 );
228 EMPLACE_COLOR_PARAM( "board.user_23", User_23 );
229 EMPLACE_COLOR_PARAM( "board.user_24", User_24 );
230 EMPLACE_COLOR_PARAM( "board.user_25", User_25 );
231 EMPLACE_COLOR_PARAM( "board.user_26", User_26 );
232 EMPLACE_COLOR_PARAM( "board.user_27", User_27 );
233 EMPLACE_COLOR_PARAM( "board.user_28", User_28 );
234 EMPLACE_COLOR_PARAM( "board.user_29", User_29 );
235 EMPLACE_COLOR_PARAM( "board.user_30", User_30 );
236 EMPLACE_COLOR_PARAM( "board.user_31", User_31 );
237 EMPLACE_COLOR_PARAM( "board.user_32", User_32 );
238 EMPLACE_COLOR_PARAM( "board.user_33", User_33 );
239 EMPLACE_COLOR_PARAM( "board.user_34", User_34 );
240 EMPLACE_COLOR_PARAM( "board.user_35", User_35 );
241 EMPLACE_COLOR_PARAM( "board.user_36", User_36 );
242 EMPLACE_COLOR_PARAM( "board.user_37", User_37 );
243 EMPLACE_COLOR_PARAM( "board.user_38", User_38 );
244 EMPLACE_COLOR_PARAM( "board.user_39", User_39 );
245 EMPLACE_COLOR_PARAM( "board.user_40", User_40 );
246 EMPLACE_COLOR_PARAM( "board.user_41", User_41 );
247 EMPLACE_COLOR_PARAM( "board.user_42", User_42 );
248 EMPLACE_COLOR_PARAM( "board.user_43", User_43 );
249 EMPLACE_COLOR_PARAM( "board.user_44", User_44 );
250 EMPLACE_COLOR_PARAM( "board.user_45", User_45 );
251
252 // Colors for 3D viewer, which are used as defaults unless overridden by the board
253 EMPLACE_COLOR_PARAM( "3d_viewer.background_bottom", LAYER_3D_BACKGROUND_BOTTOM );
254 EMPLACE_COLOR_PARAM( "3d_viewer.background_top", LAYER_3D_BACKGROUND_TOP );
255 EMPLACE_COLOR_PARAM( "3d_viewer.board", LAYER_3D_BOARD );
256 EMPLACE_COLOR_PARAM( "3d_viewer.copper", LAYER_3D_COPPER_TOP );
257 EMPLACE_COLOR_PARAM( "3d_viewer.silkscreen_bottom", LAYER_3D_SILKSCREEN_BOTTOM );
258 EMPLACE_COLOR_PARAM( "3d_viewer.silkscreen_top", LAYER_3D_SILKSCREEN_TOP );
259 EMPLACE_COLOR_PARAM( "3d_viewer.soldermask_bottom", LAYER_3D_SOLDERMASK_BOTTOM );
260 EMPLACE_COLOR_PARAM( "3d_viewer.soldermask_top", LAYER_3D_SOLDERMASK_TOP );
261 EMPLACE_COLOR_PARAM( "3d_viewer.solderpaste", LAYER_3D_SOLDERPASTE );
262 EMPLACE_COLOR_PARAM( "3d_viewer.adhesive", LAYER_3D_ADHESIVE );
263 EMPLACE_COLOR_PARAM( "3d_viewer.user_comments", LAYER_3D_USER_COMMENTS );
264 EMPLACE_COLOR_PARAM( "3d_viewer.user_drawings", LAYER_3D_USER_DRAWINGS );
265 EMPLACE_COLOR_PARAM( "3d_viewer.user_eco1", LAYER_3D_USER_ECO1 );
266 EMPLACE_COLOR_PARAM( "3d_viewer.user_eco2", LAYER_3D_USER_ECO2 );
267 EMPLACE_COLOR_PARAM( "3d_viewer.front_fab", LAYER_3D_F_FAB );
268 EMPLACE_COLOR_PARAM( "3d_viewer.back_fab", LAYER_3D_B_FAB );
269 EMPLACE_COLOR_PARAM( "3d_viewer.front_courtyard", LAYER_3D_F_COURTYARD );
270 EMPLACE_COLOR_PARAM( "3d_viewer.back_courtyard", LAYER_3D_B_COURTYARD );
271
272 for( int layer = LAYER_3D_USER_1; layer <= LAYER_3D_USER_45; ++layer )
273 {
274 int idx = layer - LAYER_3D_USER_1;
275 PCB_LAYER_ID pcb_layer = Map3DLayerToPCBLayer( layer );
276
277 m_params.emplace_back( new COLOR_MAP_PARAM( "3d_viewer.user_" + std::to_string( idx + 1 ),
278 layer, s_defaultTheme.at( pcb_layer ),
279 &m_colors ) );
280 }
281
282 m_params.emplace_back( new COLOR_MAP_PARAM( "3d_viewer.f_fab", LAYER_3D_F_FAB,
283 s_defaultTheme.at( F_Fab ), &m_colors ) );
284 m_params.emplace_back( new COLOR_MAP_PARAM( "3d_viewer.b_fab", LAYER_3D_B_FAB,
285 s_defaultTheme.at( B_Fab ), &m_colors ) );
286 m_params.emplace_back( new COLOR_MAP_PARAM( "3d_viewer.f_courtyard", LAYER_3D_F_COURTYARD,
287 s_defaultTheme.at( F_CrtYd ), &m_colors ) );
288 m_params.emplace_back( new COLOR_MAP_PARAM( "3d_viewer.b_courtyard", LAYER_3D_B_COURTYARD,
289 s_defaultTheme.at( B_CrtYd ), &m_colors ) );
290
291 registerMigration( 0, 1, std::bind( &COLOR_SETTINGS::migrateSchema0to1, this ) );
292
293 registerMigration( 1, 2,
294 [&]()
295 {
296 // Fix LAYER_VIA_HOLES color - before version 2, this setting had no effect
297 nlohmann::json::json_pointer ptr( "/board/via_hole" );
298
299 ( *m_internals )[ptr] = COLOR4D( 0.5, 0.4, 0, 0.8 ).ToCSSString();
300
301 return true;
302 } );
303
304 registerMigration( 2, 3,
305 [&]()
306 {
307 // We don't support opacity in some 3D colors but some versions of 5.99 let
308 // you set it.
309
310 for( std::string path : { "3d_viewer.background_top",
311 "3d_viewer.background_bottom",
312 "3d_viewer.copper",
313 "3d_viewer.silkscreen_top",
314 "3d_viewer.silkscreen_bottom",
315 "3d_viewer.solderpaste" } )
316 {
317 if( std::optional<COLOR4D> optval = Get<COLOR4D>( path ) )
318 Set( path, optval->WithAlpha( 1.0 ) );
319 }
320
321 return true;
322 } );
323
324 registerMigration( 3, 4,
325 [&]()
326 {
327 if( std::optional<COLOR4D> optval = Get<COLOR4D>( "board.grid" ) )
328 Set( "board.page_limits", *optval );
329
330 if( std::optional<COLOR4D> optval = Get<COLOR4D>( "schematic.grid" ) )
331 Set( "schematic.page_limits", *optval );
332
333 return true;
334 } );
335
336 // this bump shouldn't have happened; add a no-op migration to avoid future issues
337 registerMigration( 4, 5, []() { return true; } );
338
339 registerMigration( 5, 6,
340 [&]()
341 {
342 Set( "board.drc_highlighted", COLOR4D( PUREMAGENTA ) );
343 return true;
344 } );
345}
346
347
353
354
356{
357 m_filename = aOther.m_filename;
358
359 initFromOther( aOther );
360
361 return *this;
362}
363
364
366{
369 m_colors = aOther.m_colors;
371 m_writeFile = aOther.m_writeFile;
372
373 // Ensure default colors are present
374 for( PARAM_BASE* param : aOther.m_params )
375 {
376 if( COLOR_MAP_PARAM* cmp = dynamic_cast<COLOR_MAP_PARAM*>( param ) )
377 m_defaultColors[cmp->GetKey()] = cmp->GetDefault();
378 }
379}
380
381
382bool COLOR_SETTINGS::MigrateFromLegacy( wxConfigBase* aCfg )
383{
384 return false;
385}
386
387
389{
396
397 if( !m_manager )
398 {
399 wxLogTrace( traceSettings, wxT( "Error: COLOR_SETTINGS migration cannot run unmanaged!" ) );
400 return false;
401 }
402
403 if( !Contains( "fpedit" ) )
404 {
405 wxLogTrace( traceSettings,
406 wxT( "migrateSchema0to1: %s doesn't have fpedit settings; skipping." ),
407 m_filename );
408 return true;
409 }
410
411 wxString filename = GetFilename().BeforeLast( '.' ) + wxT( "_footprints" );
412
413 COLOR_SETTINGS* fpsettings = m_manager->AddNewColorSettings( filename );
414 fpsettings->SetLocation( GetLocation() );
415
416 // Start out with a clone
417 fpsettings->m_internals->CloneFrom( *m_internals );
418
419 // Footprint editor now just looks at the "board" namespace
420 fpsettings->Set( "board", fpsettings->At( "fpedit" ) );
421
422 fpsettings->Internals()->erase( "fpedit" );
423 fpsettings->Load();
424 fpsettings->SetName( fpsettings->GetName() + wxS( " " ) + _( "(Footprints)" ) );
425 m_manager->Save( fpsettings );
426
427 // Now we can get rid of our own copy
428 m_internals->erase( "fpedit" );
429
430 return true;
431}
432
433
435{
436 if( m_colors.count( aLayer ) )
437 return m_colors.at( aLayer );
438
440}
441
442
444{
445 if( !m_defaultColors.count( aLayer ) )
446 {
447 COLOR_MAP_PARAM* p = nullptr;
448
449 for( PARAM_BASE* param : m_params )
450 {
451 COLOR_MAP_PARAM* cmp = dynamic_cast<COLOR_MAP_PARAM*>( param );
452
453 if( cmp && cmp->GetKey() == aLayer )
454 p = cmp;
455 }
456
457 if( p )
458 m_defaultColors[aLayer] = p->GetDefault();
459 else if( IsCopperLayer( aLayer ) )
460 m_defaultColors[aLayer] = s_copperColors[aLayer % s_copperColors.size()];
461 else
462 m_defaultColors[aLayer] = s_userColors[aLayer % s_userColors.size()];
463 }
464
465 return m_defaultColors.at( aLayer );
466}
467
468
469void COLOR_SETTINGS::SetColor( int aLayer, const COLOR4D& aColor )
470{
471 m_colors[ aLayer ] = aColor;
472}
473
474
475std::vector<COLOR_SETTINGS*> COLOR_SETTINGS::CreateBuiltinColorSettings()
476{
478 defaultTheme->SetName( _( "KiCad Default" ) );
479 defaultTheme->m_writeFile = false;
480 defaultTheme->Load(); // We can just get the colors out of the param defaults for this one
481
483 classicTheme->SetName( _( "KiCad Classic" ) );
484 classicTheme->m_writeFile = false;
485
486 for( PARAM_BASE* param : classicTheme->m_params )
487 delete param;
488
489 classicTheme->m_params.clear(); // Disable load/store
490
491 for( const std::pair<int, COLOR4D> entry : s_classicTheme )
492 classicTheme->m_colors[entry.first] = entry.second;
493
494 std::vector<COLOR_SETTINGS*> ret;
495
496 ret.push_back( defaultTheme );
497 ret.push_back( classicTheme );
498
499 return ret;
500}
static const std::vector< COLOR4D > s_userColors
static const std::map< int, COLOR4D > s_defaultTheme
static const std::vector< COLOR4D > s_copperColors
static const std::map< int, COLOR4D > s_classicTheme
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
Definition color4d.h:400
COLOR4D GetDefault() const
int GetKey() const
void SetName(const wxString &aName)
std::unordered_map< int, COLOR4D > m_defaultColors
void initFromOther(const COLOR_SETTINGS &aOther)
void SetColor(int aLayer, const COLOR4D &aColor)
static std::vector< COLOR_SETTINGS * > CreateBuiltinColorSettings()
Constructs and returns a list of color settings objects based on the built-in color themes.
bool MigrateFromLegacy(wxConfigBase *aCfg) override
Migrates from wxConfig to JSON-based configuration.
static const wxString COLOR_BUILTIN_CLASSIC
static const wxString COLOR_BUILTIN_DEFAULT
COLOR4D GetColor(int aLayer) const
COLOR4D GetDefaultColor(int aLayer)
wxString m_displayName
COLOR_SETTINGS & operator=(const COLOR_SETTINGS &aOther)
std::unordered_map< int, COLOR4D > m_colors
Map of all layer colors.
COLOR_SETTINGS(const wxString &aFilename=wxT("user"), bool aAbsolutePath=false)
const wxString & GetName() const
void CloneFrom(const JSON_SETTINGS_INTERNALS &aOther)
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...
wxString m_filename
The filename (not including path) of this settings file (inicode)
SETTINGS_MANAGER * m_manager
A pointer to the settings manager managing this file (may be null)
bool Contains(const std::string &aPath) const
SETTINGS_LOC GetLocation() const
void SetLocation(SETTINGS_LOC aLocation)
bool m_writeFile
Whether or not the backing store file should be written.
virtual void Load()
Updates the parameters of this object based on the current JSON document contents.
std::optional< ValueType > Get(const std::string &aPath) const
Fetches a value from within the JSON document.
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)
void registerMigration(int aOldSchemaVersion, int aNewSchemaVersion, std::function< bool(void)> aMigrator)
Registers a migration from one schema version to another.
nlohmann::json & At(const std::string &aPath)
Wrappers for the underlying JSON API so that most consumers don't need json.hpp All of these function...
JSON_SETTINGS_INTERNALS * Internals()
JSON_SETTINGS(const wxString &aFilename, SETTINGS_LOC aLocation, int aSchemaVersion)
std::unique_ptr< JSON_SETTINGS_INTERNALS > m_internals
wxString GetFilename() const
A color representation with 4 components: red, green, blue, alpha.
Definition color4d.h:101
wxString ToCSSString() const
Definition color4d.cpp:146
@ PUREMAGENTA
Definition color4d.h:68
const int colorsSchemaVersion
! Update the schema version whenever a migration is required
#define EMPLACE_COLOR_PARAM(x, y)
#define _(s)
SETTINGS_LOC
@ COLORS
The color scheme directory (e.g. ~/.config/kicad/colors/)
@ NONE
No directory prepended, full path in filename (used for PROJECT_FILE)
#define traceSettings
PCB_LAYER_ID Map3DLayerToPCBLayer(int aLayer)
Definition layer_id.cpp:277
@ LAYER_PAD_NETNAMES
Definition layer_ids.h:198
@ NETNAMES_LAYER_ID_START
Definition layer_ids.h:190
@ LAYER_VIA_NETNAMES
Definition layer_ids.h:199
@ LAYER_GERBVIEW_DRAWINGSHEET
Definition layer_ids.h:556
@ GERBVIEW_LAYER_ID_START
Definition layer_ids.h:546
@ LAYER_GERBVIEW_BACKGROUND
Definition layer_ids.h:555
@ LAYER_DCODES
Definition layer_ids.h:551
@ LAYER_NEGATIVE_OBJECTS
Definition layer_ids.h:552
@ LAYER_GERBVIEW_PAGE_LIMITS
Definition layer_ids.h:557
@ LAYER_GERBVIEW_AXES
Definition layer_ids.h:554
@ LAYER_GERBVIEW_GRID
Definition layer_ids.h:553
@ LAYER_3D_USER_1
Definition layer_ids.h:593
@ LAYER_3D_SOLDERMASK_TOP
Definition layer_ids.h:582
@ LAYER_3D_ADHESIVE
Definition layer_ids.h:584
@ LAYER_3D_BACKGROUND_TOP
Definition layer_ids.h:575
@ LAYER_3D_USER_COMMENTS
Definition layer_ids.h:585
@ LAYER_3D_SOLDERMASK_BOTTOM
Definition layer_ids.h:581
@ LAYER_3D_BOARD
Definition layer_ids.h:576
@ LAYER_3D_USER_ECO1
Definition layer_ids.h:587
@ LAYER_3D_USER_ECO2
Definition layer_ids.h:588
@ LAYER_3D_B_FAB
Definition layer_ids.h:590
@ LAYER_3D_SILKSCREEN_TOP
Definition layer_ids.h:580
@ LAYER_3D_B_COURTYARD
Definition layer_ids.h:592
@ LAYER_3D_COPPER_TOP
Definition layer_ids.h:577
@ LAYER_3D_SOLDERPASTE
Definition layer_ids.h:583
@ LAYER_3D_USER_45
Definition layer_ids.h:637
@ LAYER_3D_USER_DRAWINGS
Definition layer_ids.h:586
@ LAYER_3D_BACKGROUND_BOTTOM
Definition layer_ids.h:574
@ LAYER_3D_SILKSCREEN_BOTTOM
Definition layer_ids.h:579
@ LAYER_3D_F_COURTYARD
Definition layer_ids.h:591
@ LAYER_3D_F_FAB
Definition layer_ids.h:589
bool IsCopperLayer(int aLayerId)
Test whether a layer is a copper layer.
Definition layer_ids.h:703
@ LAYER_GRID
Definition layer_ids.h:250
@ LAYER_POINTS
PCB reference/manual snap points visibility.
Definition layer_ids.h:317
@ LAYER_PAGE_LIMITS
Color for drawing the page extents (visibility stored in PCBNEW_SETTINGS::m_ShowPageLimits)
Definition layer_ids.h:334
@ LAYER_LOCKED_ITEM_SHADOW
Shadow layer for locked items.
Definition layer_ids.h:303
@ LAYER_VIA_HOLEWALLS
Definition layer_ids.h:294
@ LAYER_GRID_AXES
Definition layer_ids.h:251
@ LAYER_CONFLICTS_SHADOW
Shadow layer for items flagged conflicting.
Definition layer_ids.h:306
@ LAYER_NON_PLATEDHOLES
Draw usual through hole vias.
Definition layer_ids.h:235
@ LAYER_VIA_STITCHING
Outline of via stitching generators.
Definition layer_ids.h:326
@ LAYER_DRAWINGSHEET
Sheet frame and title block.
Definition layer_ids.h:274
@ LAYER_BOARD_OUTLINE_AREA
PCB board outline.
Definition layer_ids.h:314
@ LAYER_DRC_EXCLUSION
Layer for DRC markers which have been individually excluded.
Definition layer_ids.h:300
@ LAYER_PCB_BACKGROUND
PCB background color.
Definition layer_ids.h:277
@ LAYER_DRC_HIGHLIGHTED
Color for highlighted DRC markers.
Definition layer_ids.h:337
@ LAYER_DRC_WARNING
Layer for DRC markers with RPT_SEVERITY_WARNING.
Definition layer_ids.h:297
@ LAYER_PAD_PLATEDHOLES
to draw pad holes (plated)
Definition layer_ids.h:267
@ LAYER_CONSTRAINT_SHADOW
Shadow layer for items bound to a constraint.
Definition layer_ids.h:320
@ LAYER_CURSOR
PCB cursor.
Definition layer_ids.h:278
@ LAYER_AUX_ITEMS
Auxiliary items (guides, rule, etc).
Definition layer_ids.h:279
@ LAYER_RATSNEST
Definition layer_ids.h:249
@ LAYER_CONSTRAINT_UNDER
Under-constrained (free DOF remain).
Definition layer_ids.h:340
@ LAYER_ANCHOR
Anchor of items having an anchor point (texts, footprints).
Definition layer_ids.h:244
@ LAYER_CONSTRAINT_OVER
Over-constrained / conflicting.
Definition layer_ids.h:342
@ LAYER_CONSTRAINT_WELL
Fully constrained.
Definition layer_ids.h:341
@ LAYER_VIA_HOLES
Draw via holes (pad holes do not use this layer).
Definition layer_ids.h:270
@ LAYER_SUBGRIDS
Routing/placement subgrids (PCB_GRID_ITEM) visibility and color.
Definition layer_ids.h:323
@ LAYER_DRC_ERROR
Layer for DRC markers with RPT_SEVERITY_ERROR.
Definition layer_ids.h:273
@ LAYER_SHEETNAME
Definition layer_ids.h:494
@ LAYER_ERC_WARN
Definition layer_ids.h:501
@ LAYER_SCHEMATIC_ANCHOR
Definition layer_ids.h:522
@ LAYER_SHEETLABEL
Definition layer_ids.h:497
@ LAYER_PINNUM
Definition layer_ids.h:480
@ LAYER_RULE_AREAS
Definition layer_ids.h:487
@ LAYER_DEVICE
Definition layer_ids.h:488
@ LAYER_SHEET_BACKGROUND
Definition layer_ids.h:507
@ LAYER_EXCLUDED_FROM_SIM
Definition layer_ids.h:504
@ LAYER_BRIGHTENED
Definition layer_ids.h:513
@ LAYER_ERC_EXCLUSION
Definition layer_ids.h:503
@ LAYER_HIDDEN
Definition layer_ids.h:514
@ LAYER_HIERLABEL
Definition layer_ids.h:479
@ LAYER_PINNAM
Definition layer_ids.h:481
@ LAYER_PRIVATE_NOTES
Definition layer_ids.h:490
@ LAYER_HOVERED
Definition layer_ids.h:512
@ LAYER_GLOBLABEL
Definition layer_ids.h:478
@ LAYER_WIRE
Definition layer_ids.h:474
@ LAYER_NOTES
Definition layer_ids.h:489
@ LAYER_ERC_ERR
Definition layer_ids.h:502
@ LAYER_PIN
Definition layer_ids.h:492
@ LAYER_VALUEPART
Definition layer_ids.h:483
@ LAYER_BUS
Definition layer_ids.h:475
@ LAYER_SCHEMATIC_CURSOR
Definition layer_ids.h:511
@ LAYER_FIELDS
Definition layer_ids.h:484
@ LAYER_DEVICE_BACKGROUND
Definition layer_ids.h:506
@ LAYER_SCHEMATIC_DRAWINGSHEET
Definition layer_ids.h:518
@ LAYER_LOCLABEL
Definition layer_ids.h:477
@ LAYER_JUNCTION
Definition layer_ids.h:476
@ LAYER_SHEETFIELDS
Definition layer_ids.h:496
@ LAYER_SCHEMATIC_GRID_AXES
Definition layer_ids.h:509
@ LAYER_REFERENCEPART
Definition layer_ids.h:482
@ LAYER_NETCLASS_REFS
Definition layer_ids.h:486
@ LAYER_NOTES_BACKGROUND
Definition layer_ids.h:491
@ LAYER_OP_CURRENTS
Definition layer_ids.h:524
@ LAYER_SCHEMATIC_PAGE_LIMITS
Definition layer_ids.h:519
@ LAYER_SHEET
Definition layer_ids.h:493
@ LAYER_DRAG_NET_COLLISION
Definition layer_ids.h:516
@ LAYER_SELECTION_SHADOWS
Definition layer_ids.h:517
@ LAYER_SCHEMATIC_BACKGROUND
Definition layer_ids.h:510
@ LAYER_SCHEMATIC_AUX_ITEMS
Definition layer_ids.h:521
@ LAYER_OP_VOLTAGES
Definition layer_ids.h:523
@ LAYER_SHEETFILENAME
Definition layer_ids.h:495
@ LAYER_BUS_JUNCTION
Definition layer_ids.h:520
@ LAYER_DNP_MARKER
Definition layer_ids.h:500
@ LAYER_NOCONNECT
Definition layer_ids.h:498
@ LAYER_SCHEMATIC_GRID
Definition layer_ids.h:508
PCB_LAYER_ID
A quick note on layer IDs:
Definition layer_ids.h:56
@ User_16
Definition layer_ids.h:135
@ In22_Cu
Definition layer_ids.h:83
@ In11_Cu
Definition layer_ids.h:72
@ User_29
Definition layer_ids.h:148
@ In29_Cu
Definition layer_ids.h:90
@ In30_Cu
Definition layer_ids.h:91
@ User_40
Definition layer_ids.h:159
@ User_15
Definition layer_ids.h:134
@ User_8
Definition layer_ids.h:127
@ F_CrtYd
Definition layer_ids.h:112
@ User_11
Definition layer_ids.h:130
@ User_25
Definition layer_ids.h:144
@ In17_Cu
Definition layer_ids.h:78
@ User_34
Definition layer_ids.h:153
@ User_45
Definition layer_ids.h:164
@ B_Adhes
Definition layer_ids.h:99
@ User_36
Definition layer_ids.h:155
@ Edge_Cuts
Definition layer_ids.h:108
@ Dwgs_User
Definition layer_ids.h:103
@ F_Paste
Definition layer_ids.h:100
@ In9_Cu
Definition layer_ids.h:70
@ Cmts_User
Definition layer_ids.h:104
@ User_6
Definition layer_ids.h:125
@ User_7
Definition layer_ids.h:126
@ In19_Cu
Definition layer_ids.h:80
@ User_19
Definition layer_ids.h:138
@ User_23
Definition layer_ids.h:142
@ In7_Cu
Definition layer_ids.h:68
@ In28_Cu
Definition layer_ids.h:89
@ In26_Cu
Definition layer_ids.h:87
@ F_Adhes
Definition layer_ids.h:98
@ User_41
Definition layer_ids.h:160
@ B_Mask
Definition layer_ids.h:94
@ B_Cu
Definition layer_ids.h:61
@ User_14
Definition layer_ids.h:133
@ User_39
Definition layer_ids.h:158
@ User_5
Definition layer_ids.h:124
@ User_20
Definition layer_ids.h:139
@ Eco1_User
Definition layer_ids.h:105
@ F_Mask
Definition layer_ids.h:93
@ In21_Cu
Definition layer_ids.h:82
@ User_42
Definition layer_ids.h:161
@ User_43
Definition layer_ids.h:162
@ In23_Cu
Definition layer_ids.h:84
@ B_Paste
Definition layer_ids.h:101
@ In15_Cu
Definition layer_ids.h:76
@ In2_Cu
Definition layer_ids.h:63
@ User_10
Definition layer_ids.h:129
@ User_9
Definition layer_ids.h:128
@ User_27
Definition layer_ids.h:146
@ User_28
Definition layer_ids.h:147
@ F_Fab
Definition layer_ids.h:115
@ In10_Cu
Definition layer_ids.h:71
@ Margin
Definition layer_ids.h:109
@ F_SilkS
Definition layer_ids.h:96
@ In4_Cu
Definition layer_ids.h:65
@ B_CrtYd
Definition layer_ids.h:111
@ Eco2_User
Definition layer_ids.h:106
@ In16_Cu
Definition layer_ids.h:77
@ In24_Cu
Definition layer_ids.h:85
@ In1_Cu
Definition layer_ids.h:62
@ User_35
Definition layer_ids.h:154
@ User_31
Definition layer_ids.h:150
@ User_3
Definition layer_ids.h:122
@ User_1
Definition layer_ids.h:120
@ User_12
Definition layer_ids.h:131
@ B_SilkS
Definition layer_ids.h:97
@ User_30
Definition layer_ids.h:149
@ User_37
Definition layer_ids.h:156
@ User_22
Definition layer_ids.h:141
@ User_38
Definition layer_ids.h:157
@ In13_Cu
Definition layer_ids.h:74
@ User_4
Definition layer_ids.h:123
@ In8_Cu
Definition layer_ids.h:69
@ User_21
Definition layer_ids.h:140
@ In14_Cu
Definition layer_ids.h:75
@ User_24
Definition layer_ids.h:143
@ User_13
Definition layer_ids.h:132
@ User_2
Definition layer_ids.h:121
@ In12_Cu
Definition layer_ids.h:73
@ User_17
Definition layer_ids.h:136
@ In27_Cu
Definition layer_ids.h:88
@ In6_Cu
Definition layer_ids.h:67
@ In5_Cu
Definition layer_ids.h:66
@ User_33
Definition layer_ids.h:152
@ User_26
Definition layer_ids.h:145
@ In3_Cu
Definition layer_ids.h:64
@ User_32
Definition layer_ids.h:151
@ In20_Cu
Definition layer_ids.h:81
@ User_18
Definition layer_ids.h:137
@ User_44
Definition layer_ids.h:163
@ F_Cu
Definition layer_ids.h:60
@ In18_Cu
Definition layer_ids.h:79
@ In25_Cu
Definition layer_ids.h:86
@ B_Fab
Definition layer_ids.h:114
#define GERBER_DRAWLAYERS_COUNT
Number of draw layers in Gerbview.
Definition layer_ids.h:541
std::string path