132                return m_RotationAngle.AsTenthsOfADegree();
 
  137                    m_RotationAngle = EDA_ANGLE( aVal, TENTHS_OF_A_DEGREE_T );
 
  151            "design_settings.default_footprint_text_items",
 
  152            [&] () -> nlohmann::json
 
  154                nlohmann::json js = nlohmann::json::array();
 
  158                    js.push_back( nlohmann::json( { item.
m_Text.ToUTF8(),
 
  165            [&] ( 
const nlohmann::json& aObj )
 
  169                if( !aObj.is_array() )
 
  172                for( 
const nlohmann::json& entry : aObj )
 
  174                    if( entry.empty() || !entry.is_array() )
 
  179                    textInfo.
m_Text = entry.at(0).get<wxString>();
 
  180                    textInfo.
m_Visible = entry.at(1).get<
bool>();
 
  181                    wxString layerName = entry.at(2).get<wxString>();
 
  183                    textInfo.
m_Layer = candidateLayer >= 0
 
  190            nlohmann::json::array( {
 
  325            [&]() -> nlohmann::json
 
  329                ret[
"lockedItems"] = m_SelectionFilter.lockedItems;
 
  330                ret[
"footprints"]  = m_SelectionFilter.footprints;
 
  331                ret[
"text"]        = m_SelectionFilter.text;
 
  332                ret[
"tracks"]      = m_SelectionFilter.tracks;
 
  333                ret[
"vias"]        = m_SelectionFilter.vias;
 
  334                ret[
"pads"]        = m_SelectionFilter.pads;
 
  335                ret[
"graphics"]    = m_SelectionFilter.graphics;
 
  336                ret[
"zones"]       = m_SelectionFilter.zones;
 
  337                ret[
"keepouts"]    = m_SelectionFilter.keepouts;
 
  338                ret[
"dimensions"]  = m_SelectionFilter.dimensions;
 
  339                ret[
"points"]      = m_SelectionFilter.points;
 
  340                ret[
"otherItems"]  = m_SelectionFilter.otherItems;
 
  344            [&]( 
const nlohmann::json& aVal )
 
  346                if( aVal.empty() || !aVal.is_object() )
 
  349                SetIfPresent( aVal, 
"lockedItems", m_SelectionFilter.lockedItems );
 
  350                SetIfPresent( aVal, 
"footprints", m_SelectionFilter.footprints );
 
  351                SetIfPresent( aVal, 
"text", m_SelectionFilter.text );
 
  352                SetIfPresent( aVal, 
"tracks", m_SelectionFilter.tracks );
 
  353                SetIfPresent( aVal, 
"vias", m_SelectionFilter.vias );
 
  354                SetIfPresent( aVal, 
"pads", m_SelectionFilter.pads );
 
  355                SetIfPresent( aVal, 
"graphics", m_SelectionFilter.graphics );
 
  356                SetIfPresent( aVal, 
"zones", m_SelectionFilter.zones );
 
  357                SetIfPresent( aVal, 
"keepouts", m_SelectionFilter.keepouts );
 
  358                SetIfPresent( aVal, 
"dimensions", m_SelectionFilter.dimensions );
 
  359                SetIfPresent( aVal, 
"points", m_SelectionFilter.points );
 
  360                SetIfPresent( aVal, 
"otherItems", m_SelectionFilter.otherItems );
 
  363                { 
"lockedItems", false },
 
  364                { 
"footprints", true },
 
  369                { 
"graphics", true },
 
  371                { 
"keepouts", true },
 
  372                { 
"dimensions", true },
 
  374                { 
"otherItems", true }
 
  379    registerMigration( 1, 2,
 
  383                           return migrateLibTreeWidth();
 
 
  400    ret &= 
fromLegacyString( aCfg, 
"import_last_path",             
"system.last_import_export_path" );
 
  401    ret &= 
fromLegacyString( aCfg, 
"LibFootprintTextShownColumns", 
"window.footprint_text_shown_columns" );
 
  403    ret &= 
fromLegacy<int>(  aCfg, 
"FpEditorMagneticPads",               
"editing.magnetic_pads" );
 
  404    ret &= 
fromLegacy<bool>( aCfg, 
"FpEditorDisplayPolarCoords",         
"editing.polar_coords" );
 
  405    ret &= 
fromLegacy<int>(  aCfg, 
"FpEditorUse45DegreeGraphicSegments", 
"editing.use_45_degree_graphic_segments" );
 
  407    ret &= 
fromLegacy<bool>(  aCfg, 
"FpEditorGraphicLinesDisplayMode", 
"pcb_display.graphic_items_fill" );
 
  408    ret &= 
fromLegacy<bool>(  aCfg, 
"FpEditorPadDisplayMode",          
"pcb_display.pad_fill" );
 
  409    ret &= 
fromLegacy<bool>(  aCfg, 
"FpEditorTextsDisplayMode",        
"pcb_display.footprint_text" );
 
  411    ret &= 
fromLegacy<double>( aCfg, 
"FpEditorSilkLineWidth",       
"design_settings.silk_line_width" );
 
  412    ret &= 
fromLegacy<double>( aCfg, 
"FpEditorSilkTextSizeH",       
"design_settings.silk_text_size_h" );
 
  413    ret &= 
fromLegacy<double>( aCfg, 
"FpEditorSilkTextSizeV",       
"design_settings.silk_text_size_v" );
 
  414    ret &= 
fromLegacy<double>( aCfg, 
"FpEditorSilkTextThickness",   
"design_settings.silk_text_thickness" );
 
  415    ret &= 
fromLegacy<bool>(   aCfg, 
"FpEditorSilkTextItalic",      
"design_settings.silk_text_italic" );
 
  416    ret &= 
fromLegacy<double>( aCfg, 
"FpEditorCopperLineWidth",     
"design_settings.copper_line_width" );
 
  417    ret &= 
fromLegacy<double>( aCfg, 
"FpEditorCopperTextSizeH",     
"design_settings.copper_text_size_h" );
 
  418    ret &= 
fromLegacy<double>( aCfg, 
"FpEditorCopperTextSizeV",     
"design_settings.copper_text_size_v" );
 
  419    ret &= 
fromLegacy<double>( aCfg, 
"FpEditorCopperTextThickness", 
"design_settings.copper_text_thickness" );
 
  420    ret &= 
fromLegacy<bool>(   aCfg, 
"FpEditorCopperTextItalic",    
"design_settings.copper_text_italic" );
 
  421    ret &= 
fromLegacy<double>( aCfg, 
"FpEditorEdgeCutLineWidth",    
"design_settings.edge_line_width" );
 
  422    ret &= 
fromLegacy<double>( aCfg, 
"FpEditorCourtyardLineWidth",  
"design_settings.courtyard_line_width" );
 
  423    ret &= 
fromLegacy<double>( aCfg, 
"FpEditorOthersLineWidth",     
"design_settings.others_line_width" );
 
  424    ret &= 
fromLegacy<double>( aCfg, 
"FpEditorOthersTextSizeH",     
"design_settings.others_text_size_h" );
 
  425    ret &= 
fromLegacy<double>( aCfg, 
"FpEditorOthersTextSizeV",     
"design_settings.others_text_size_v" );
 
  426    ret &= 
fromLegacy<double>( aCfg, 
"FpEditorOthersTextThickness", 
"design_settings.others_text_thickness" );
 
  427    ret &= 
fromLegacy<bool>(   aCfg, 
"FpEditorOthersTextItalic",    
"design_settings.others_text_italic" );
 
  429    nlohmann::json textItems = nlohmann::json::array( {
 
  434    Set( 
"design_settings.default_footprint_text_items", std::move( textItems ) );
 
  436    ret &= 
fromLegacyString( aCfg, 
"FpEditorRefDefaultText",         
"design_settings.default_footprint_text_items.0.0" );
 
  437    ret &= 
fromLegacy<bool>( aCfg, 
"FpEditorRefDefaultVisibility",   
"design_settings.default_footprint_text_items.0.1" );
 
  438    ret &= 
fromLegacy<int>(  aCfg, 
"FpEditorRefDefaultLayer",        
"design_settings.default_footprint_text_items.0.2" );
 
  439    ret &= 
fromLegacyString( aCfg, 
"FpEditorValueDefaultText",       
"design_settings.default_footprint_text_items.1.0" );
 
  440    ret &= 
fromLegacy<bool>( aCfg, 
"FpEditorValueDefaultVisibility", 
"design_settings.default_footprint_text_items.1.1" );
 
  441    ret &= 
fromLegacy<int>( aCfg,  
"FpEditorValueDefaultLayer",      
"design_settings.default_footprint_text_items.1.2" );
 
  444    std::string f = 
"ModEdit";
 
  452    cs->
SetName( wxT( 
"User (Footprints)" ) );
 
  455    auto migrateLegacyColor = [&] ( 
const std::string& aKey, 
int aLayerId )
 
  459                                  if( aCfg->Read( aKey, &str ) )
 
  466        migrateLegacyColor( f + 
"Color4DPCBLayer_" + layer.ToStdString(), 
PCB_LAYER_ID( i ) );
 
  469    migrateLegacyColor( f + 
"Color4DAnchorEx",           
LAYER_ANCHOR );
 
  471    migrateLegacyColor( f + 
"Color4DGrid",               
LAYER_GRID );
 
  474    migrateLegacyColor( f + 
"Color4DPCBCursor",          
LAYER_CURSOR );
 
  484    ( *m_internals )[
m_internals->PointerFromString( 
"appearance.color_theme" )] = 
"user_footprints";
 
  489    if( aCfg->Read( f + 
"PcbUserGrid_X", &x ) && aCfg->Read( f + 
"PcbUserGrid_Y", &y ) )
 
 
  518                    wxT( 
"Error: FOOTPRINT_EDITOR_SETTINGS migration cannot run unmanaged!" ) );
 
  522    std::string theme_ptr( 
"appearance.color_theme" );
 
  527    wxString selected = 
At( theme_ptr ).get<wxString>();
 
  528    wxString search   = selected + wxT( 
"_footprints" );
 
  532        if( settings->GetFilename() == search )
 
  534            wxLogTrace( 
traceSettings, wxT( 
"Updating footprint editor theme from %s to %s" ),
 
  536            Set( theme_ptr, search );
 
 
  551    auto p( 
"/pcb_display/layer_presets"_json_pointer );
 
  558    for( nlohmann::json& entry : presets )
 
 
  570    auto p( 
"/pcb_display/layer_presets"_json_pointer );
 
  577    for( nlohmann::json& entry : presets )
 
 
  589    auto p( 
"/design_settings/default_footprint_text_items"_json_pointer );
 
  598    for( nlohmann::json& entry : defaults )
 
  602        textInfo.
m_Text = entry.at(0).get<wxString>();
 
  603        textInfo.
m_Visible = entry.at(1).get<
bool>();
 
  621        defaults = nlohmann::json::array( {
 
 
ARC_EDIT_MODE
Settings for arc editing.
 
@ KEEP_CENTER_ADJUST_ANGLE_RADIUS
When editing endpoints, the angle and radius are adjusted.
 
constexpr EDA_IU_SCALE pcbIUScale
 
#define DEFAULT_TEXT_WIDTH
 
#define DEFAULT_COPPER_TEXT_WIDTH
 
#define DEFAULT_DIMENSION_EXTENSION_OFFSET
 
#define DEFAULT_DIMENSION_ARROW_LENGTH
 
#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.
 
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)
 
bool fromLegacyString(wxConfigBase *aConfig, const std::string &aKey, const std::string &aDest)
Translates a legacy wxConfig string value to a given JSON pointer value.
 
bool fromLegacy(wxConfigBase *aConfig, const std::string &aKey, const std::string &aDest)
Translates a legacy wxConfig 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
 
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)
 
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 int NameToLayer(wxString &aName)
Return the layer number from a layer name.
 
static wxString Name(PCB_LAYER_ID aLayerId)
Return the fixed name association with aLayerId.
 
Stores an enum as an integer.
 
Like a normal param, but with custom getter and setter functions.
 
static void MigrateToV9Layers(nlohmann::json &aJson)
 
static void MigrateToNamedRenderLayers(nlohmann::json &aJson)
 
Represents a map of <std::string, Value>.
 
Represents a parameter that has a scaling factor between the value in the file and the value used int...
 
PCB_VIEWERS_SETTINGS_BASE(const std::string &aFilename, int aSchemaVersion)
 
VIEWERS_DISPLAY_OPTIONS m_ViewersDisplay
 
virtual SETTINGS_MANAGER & GetSettingsManager() const
 
void SaveColorSettings(COLOR_SETTINGS *aSettings, const std::string &aNamespace="")
Safely save a COLOR_SETTINGS to disk, preserving any changes outside the given namespace.
 
COLOR_SETTINGS * AddNewColorSettings(const wxString &aFilename)
Register 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)
 
LEADER_MODE
The kind of the leader line.
 
@ LAYER_NON_PLATEDHOLES
Draw usual through hole vias.
 
@ LAYER_DRAWINGSHEET
Sheet frame and title block.
 
@ 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_BURIED
Draw blind vias.
 
@ LAYER_VIA_BLIND
Draw micro vias.
 
@ LAYER_VIA_THROUGH
Draw 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)
Return the string from aValue according to aUnits (inch, mm ...) for display.
 
@ OUTSIDE
Text appears outside the dimension line (default)
 
@ INLINE
Text appears in line with the dimension line.
 
SETTINGS_MANAGER * GetSettingsManager()
 
PGM_BASE & Pgm()
The global program "get" accessor.