43 m_DesignSettings( nullptr,
"fpedit.settings" ),
47 m_PolarCoords( false ),
48 m_DisplayInvertXAxis( false ),
49 m_DisplayInvertYAxis( false ),
55 m_FootprintTextShownColumns()
110 static_cast<int>( MAGNETIC_OPTIONS::CAPTURE_ALWAYS ) ) );
148 "design_settings.default_footprint_text_items",
149 [&] () -> nlohmann::json
151 nlohmann::json js = nlohmann::json::array();
155 js.push_back( nlohmann::json( { item.
m_Text.ToUTF8(),
162 [&] (
const nlohmann::json& aObj )
166 if( !aObj.is_array() )
169 for(
const nlohmann::json& entry : aObj )
171 if( entry.empty() || !entry.is_array() )
176 textInfo.
m_Text = entry.at(0).get<wxString>();
177 textInfo.
m_Visible = entry.at(1).get<
bool>();
178 textInfo.
m_Layer = entry.at(2).get<
int>();
183 nlohmann::json::array( {
186 {
"${REFERENCE}",
true,
F_Fab }
279 [&]() -> nlohmann::json
297 [&](
const nlohmann::json& aVal )
299 if( aVal.empty() || !aVal.is_object() )
315 {
"lockedItems",
false },
316 {
"footprints",
true },
321 {
"graphics",
true },
323 {
"keepouts",
true },
324 {
"dimensions",
true },
325 {
"otherItems",
true }
348 ret &= fromLegacy<int>( aCfg,
"ModeditLibWidth",
"window.lib_width" );
349 ret &=
fromLegacyString( aCfg,
"import_last_path",
"system.last_import_export_path" );
350 ret &=
fromLegacyString( aCfg,
"LibFootprintTextShownColumns",
"window.footprint_text_shown_columns" );
352 ret &= fromLegacy<int>( aCfg,
"FpEditorMagneticPads",
"editing.magnetic_pads" );
353 ret &= fromLegacy<bool>( aCfg,
"FpEditorDisplayPolarCoords",
"editing.polar_coords" );
354 ret &= fromLegacy<int>( aCfg,
"FpEditorUse45DegreeGraphicSegments",
"editing.use_45_degree_graphic_segments" );
356 ret &= fromLegacy<bool>( aCfg,
"FpEditorGraphicLinesDisplayMode",
"pcb_display.graphic_items_fill" );
357 ret &= fromLegacy<bool>( aCfg,
"FpEditorPadDisplayMode",
"pcb_display.pad_fill" );
358 ret &= fromLegacy<bool>( aCfg,
"FpEditorTextsDisplayMode",
"pcb_display.footprint_text" );
360 ret &= fromLegacy<double>( aCfg,
"FpEditorSilkLineWidth",
"design_settings.silk_line_width" );
361 ret &= fromLegacy<double>( aCfg,
"FpEditorSilkTextSizeH",
"design_settings.silk_text_size_h" );
362 ret &= fromLegacy<double>( aCfg,
"FpEditorSilkTextSizeV",
"design_settings.silk_text_size_v" );
363 ret &= fromLegacy<double>( aCfg,
"FpEditorSilkTextThickness",
"design_settings.silk_text_thickness" );
364 ret &= fromLegacy<bool>( aCfg,
"FpEditorSilkTextItalic",
"design_settings.silk_text_italic" );
365 ret &= fromLegacy<double>( aCfg,
"FpEditorCopperLineWidth",
"design_settings.copper_line_width" );
366 ret &= fromLegacy<double>( aCfg,
"FpEditorCopperTextSizeH",
"design_settings.copper_text_size_h" );
367 ret &= fromLegacy<double>( aCfg,
"FpEditorCopperTextSizeV",
"design_settings.copper_text_size_v" );
368 ret &= fromLegacy<double>( aCfg,
"FpEditorCopperTextThickness",
"design_settings.copper_text_thickness" );
369 ret &= fromLegacy<bool>( aCfg,
"FpEditorCopperTextItalic",
"design_settings.copper_text_italic" );
370 ret &= fromLegacy<double>( aCfg,
"FpEditorEdgeCutLineWidth",
"design_settings.edge_line_width" );
371 ret &= fromLegacy<double>( aCfg,
"FpEditorCourtyardLineWidth",
"design_settings.courtyard_line_width" );
372 ret &= fromLegacy<double>( aCfg,
"FpEditorOthersLineWidth",
"design_settings.others_line_width" );
373 ret &= fromLegacy<double>( aCfg,
"FpEditorOthersTextSizeH",
"design_settings.others_text_size_h" );
374 ret &= fromLegacy<double>( aCfg,
"FpEditorOthersTextSizeV",
"design_settings.others_text_size_v" );
375 ret &= fromLegacy<double>( aCfg,
"FpEditorOthersTextThickness",
"design_settings.others_text_thickness" );
376 ret &= fromLegacy<bool>( aCfg,
"FpEditorOthersTextItalic",
"design_settings.others_text_italic" );
378 nlohmann::json textItems = nlohmann::json::array( {
383 Set(
"design_settings.default_footprint_text_items", std::move( textItems ) );
385 ret &=
fromLegacyString( aCfg,
"FpEditorRefDefaultText",
"design_settings.default_footprint_text_items.0.0" );
386 ret &= fromLegacy<bool>( aCfg,
"FpEditorRefDefaultVisibility",
"design_settings.default_footprint_text_items.0.1" );
387 ret &= fromLegacy<int>( aCfg,
"FpEditorRefDefaultLayer",
"design_settings.default_footprint_text_items.0.2" );
388 ret &=
fromLegacyString( aCfg,
"FpEditorValueDefaultText",
"design_settings.default_footprint_text_items.1.0" );
389 ret &= fromLegacy<bool>( aCfg,
"FpEditorValueDefaultVisibility",
"design_settings.default_footprint_text_items.1.1" );
390 ret &= fromLegacy<int>( aCfg,
"FpEditorValueDefaultLayer",
"design_settings.default_footprint_text_items.1.2" );
393 std::string f =
"ModEdit";
401 cs->
SetName( wxT(
"User (Footprints)" ) );
404 auto migrateLegacyColor = [&] (
const std::string& aKey,
int aLayerId )
408 if( aCfg->Read( aKey, &str ) )
415 migrateLegacyColor( f +
"Color4DPCBLayer_" + layer.ToStdString(),
PCB_LAYER_ID( i ) );
418 migrateLegacyColor( f +
"Color4DAnchorEx",
LAYER_ANCHOR );
420 migrateLegacyColor( f +
"Color4DGrid",
LAYER_GRID );
423 migrateLegacyColor( f +
"Color4DPCBCursor",
LAYER_CURSOR );
432 ( *m_internals )[
m_internals->PointerFromString(
"appearance.color_theme" )] =
"user_footprints";
437 if( aCfg->Read( f +
"PcbUserGrid_X", &x ) && aCfg->Read( f +
"PcbUserGrid_Y", &y ) )
440 static_cast<long>( EDA_UNITS::INCHES ) ) );
466 wxT(
"Error: FOOTPRINT_EDITOR_SETTINGS migration cannot run unmanaged!" ) );
470 std::string theme_ptr(
"appearance.color_theme" );
475 wxString selected =
At( theme_ptr ).get<wxString>();
476 wxString search = selected + wxT(
"_footprints" );
480 if( settings->GetFilename() == search )
482 wxLogTrace(
traceSettings, wxT(
"Updating footprint editor theme from %s to %s" ),
484 Set( theme_ptr, search );
499 auto p(
"/pcb_display/layer_presets"_json_pointer );
506 for( nlohmann::json& entry : presets )
ARC_EDIT_MODE
Settings for arc editing.
@ KEEP_CENTER_ADJUST_ANGLE_RADIUS
constexpr EDA_IU_SCALE pcbIUScale
#define DEFAULT_TEXT_WIDTH
#define DEFAULT_COPPER_TEXT_WIDTH
#define DEFAULT_SILK_TEXT_SIZE
#define DEFAULT_COPPER_LINE_WIDTH
#define DEFAULT_SILK_LINE_WIDTH
#define DEFAULT_SILK_TEXT_WIDTH
#define DEFAULT_EDGE_WIDTH
#define DEFAULT_COPPER_TEXT_SIZE
#define DEFAULT_LINE_WIDTH
#define DEFAULT_COURTYARD_WIDTH
virtual bool MigrateFromLegacy(wxConfigBase *aCfg) override
Migrates from wxConfig to JSON-based configuration.
bool migrateLibTreeWidth()
Migrates the library tree width setting from a single column (Item) to multi-column.
std::vector< TEXT_ITEM_INFO > m_DefaultFPTextItems
int m_TextThickness[LAYER_CLASS_COUNT]
int m_LineThickness[LAYER_CLASS_COUNT]
VECTOR2I m_TextSize[LAYER_CLASS_COUNT]
bool m_TextItalic[LAYER_CLASS_COUNT]
Color settings are a bit different than most of the settings objects in that there can be more than o...
void SetName(const wxString &aName)
void SetColor(int aLayer, const COLOR4D &aColor)
int AsTenthsOfADegree() const
bool fromLegacyString(wxConfigBase *aConfig, const std::string &aKey, const std::string &aDest)
Translates a legacy wxConfig string value to a given JSON pointer value.
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...
SETTINGS_MANAGER * m_manager
A pointer to the settings manager managing this file (may be null)
bool Contains(const std::string &aPath) const
static bool SetIfPresent(const nlohmann::json &aObj, const std::string &aPath, wxString &aTarget)
Sets the given string if the given key/path is present.
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...
std::unique_ptr< JSON_SETTINGS_INTERNALS > m_internals
A color representation with 4 components: red, green, blue, alpha.
static wxString Name(PCB_LAYER_ID aLayerId)
Return the fixed name association with aLayerId.
Like a normal param, but with custom getter and setter functions.
static void MigrateToV9Layers(nlohmann::json &aJson)
Represents a parameter that has a scaling factor between the value in the file and the value used int...
VIEWERS_DISPLAY_OPTIONS m_ViewersDisplay
virtual SETTINGS_MANAGER & GetSettingsManager() const
void SaveColorSettings(COLOR_SETTINGS *aSettings, const std::string &aNamespace="")
Safely saves a COLOR_SETTINGS to disk, preserving any changes outside the given namespace.
COLOR_SETTINGS * AddNewColorSettings(const wxString &aFilename)
Registers a new color settings object with the given filename.
#define DEFAULT_TEXT_SIZE
Ratio of the font height to the baseline of the text above the wire.
static constexpr EDA_ANGLE ANGLE_90
#define TEXT_MIN_SIZE_MM
Minimum text size (1 micron).
#define TEXT_MAX_SIZE_MM
Maximum text size in mm (~10 inches)
@ LAYER_NON_PLATEDHOLES
handle color for not plated holes (holes, not pads)
@ LAYER_DRAWINGSHEET
drawingsheet frame and titleblock
@ LAYER_PCB_BACKGROUND
PCB background color.
@ LAYER_CURSOR
PCB cursor.
@ LAYER_AUX_ITEMS
Auxiliary items (guides, rule, etc)
@ LAYER_ANCHOR
anchor of items having an anchor point (texts, footprints)
@ LAYER_VIA_MICROVIA
to draw micro vias
@ LAYER_VIA_THROUGH
to draw usual through hole vias
@ LAYER_VIA_BBLIND
to draw blind/buried vias
PCB_LAYER_ID
A quick note on layer IDs:
KICOMMON_API double FromUserUnit(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnit, double aValue)
Return in internal units the value aValue given in a real unit such as "in", "mm",...
KICOMMON_API wxString StringFromValue(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnits, double aValue, bool aAddUnitsText=false, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
Returns the string from aValue according to aUnits (inch, mm ...) for display.
SETTINGS_MANAGER * GetSettingsManager()
PGM_BASE & Pgm()
The global Program "get" accessor.
constexpr int mmToIU(double mm) const
bool otherItems
Anything not fitting one of the above categories.
bool vias
Vias (all types>
bool keepouts
Keepout zones.
bool graphics
Graphic lines, shapes, polygons.
bool footprints
Allow selecting entire footprints.
bool text
Text (free or attached to a footprint)
bool lockedItems
Allow selecting locked items.
bool tracks
Copper tracks.
bool dimensions
Dimension items.
bool m_DisplayGraphicsFill