35#include <wx/tokenzr.h>
113 &
m_AuiPanels.appearance_expand_layer_display,
false ) );
116 &
m_AuiPanels.appearance_expand_net_display,
false ) );
130 &
m_AuiPanels.design_blocks_panel_docked_width, -1 ) );
133 new PARAM<int>(
"aui.design_blocks_panel_float_width", &
m_AuiPanels.design_blocks_panel_float_width, -1 ) );
136 &
m_AuiPanels.design_blocks_panel_float_height, -1 ) );
240 &
m_Display.m_MaxLinksShowed, 3, 0, 15 ) );
254 m_params.emplace_back(
new PARAM<bool>(
"pcb_display.pad_use_via_color_for_normal_th_padstacks",
255 &
m_Display.m_UseViaColorForNormalTHPadstacks,
false ) );
264 &
m_Display.m_ShowGlobalRatsnest,
true ) );
269 &
m_Display.m_ShowModuleRatsnest,
true ) );
272 &
m_Display.m_DisplayRatsnestLinesCurved,
false ) );
281 &
m_Display.m_DisplayPcbTrackFill,
true ) );
287 reinterpret_cast<int*
>( &
m_Display.m_DisplayOrigin ),
291 &
m_Display.m_DisplayInvertXAxis,
false ) );
294 &
m_Display.m_DisplayInvertYAxis,
false ) );
297 &
m_Display.m_ForceShowFieldsWhenFPSelected,
true ) );
355 COLOR4D( 1.0, 1.0, 1.0, 1.0 ) ) );
359 COLOR4D( 0.0, 0.0, 1.0, 1.0 ) ) );
363 COLOR4D( 1.0, 0.0, 0.0, 1.0 ) ) );
367 COLOR4D( 0.5, 0.5, 0.5, 1.0 ) ) );
372 if( std::optional<int> optval =
Get<int>(
"pcb_display.rotation_angle" ) )
373 Set(
"editing.rotation_angle", *optval );
377 At(
"pcb_display" ).erase(
"rotation_angle" );
390 Set(
"editing.auto_fill_zones",
false );
401 if( std::optional<int> optval =
Get<int>(
"lib_tree.column_width" ) )
404 Set(
"lib_tree.column_width", 300 );
421 Set(
"editing.auto_fill_zones",
false );
439 ret &=
fromLegacy<bool>( aCfg,
"ShowLayerManagerTools",
"aui.show_layer_manager" );
441 ret &=
fromLegacy<int>( aCfg,
"FootprintChooserHSashPosition",
"footprint_chooser.sash_h" );
442 ret &=
fromLegacy<int>( aCfg,
"FootprintChooserVSashPosition",
"footprint_chooser.sash_v" );
443 ret &=
fromLegacy<int>( aCfg,
"FootprintChooserWidth",
"footprint_chooser.width" );
444 ret &=
fromLegacy<int>( aCfg,
"FootprintChooserHeight",
"footprint_chooser.height" );
446 ret &=
fromLegacy<bool>( aCfg,
"FlipLeftRight",
"editing.flip_left_right" );
447 ret &=
fromLegacy<bool>( aCfg,
"MagneticGraphics",
"editing.magnetic_graphics" );
448 ret &=
fromLegacy<int>( aCfg,
"MagneticPads",
"editing.magnetic_pads" );
449 ret &=
fromLegacy<int>( aCfg,
"MagneticTracks",
"editing.magnetic_tracks" );
450 ret &=
fromLegacy<bool>( aCfg,
"DisplayPolarCoords",
"editing.polar_coords" );
451 ret &=
fromLegacy<bool>( aCfg,
"Use45DegreeGraphicSegments",
"editing.use_45_degree_graphic_segments" );
453 ret &=
fromLegacy<bool>( aCfg,
"PcbAffT",
"pcb_display.graphic_items_fill" );
454 ret &=
fromLegacy<int>( aCfg,
"MaxLnkS",
"pcb_display.max_links_shown" );
455 ret &=
fromLegacy<bool>( aCfg,
"ModAffC",
"pcb_display.footprint_edge_fill" );
456 ret &=
fromLegacy<bool>( aCfg,
"ModAffT",
"pcb_display.footprint_text_fill" );
457 ret &=
fromLegacy<int>( aCfg,
"ShowNetNamesMode",
"pcb_display.net_names_mode" );
458 ret &=
fromLegacy<int>( aCfg,
"PcbDisplayOrigin",
"pcb_display.origin_mode" );
459 ret &=
fromLegacy<bool>( aCfg,
"PcbInvertXAxis",
"pcb_display.origin_invert_x_axis" );
460 ret &=
fromLegacy<bool>( aCfg,
"PcbInvertYAxis",
"pcb_display.origin_invert_y_axis" );
464 ret &=
fromLegacy<bool>( aCfg,
"ShowRatsnestLines",
"pcb_display.ratsnest_global" );
465 ret &=
fromLegacy<bool>( aCfg,
"ShowRatsnestModuleLines",
"pcb_display.ratsnest_footprint" );
466 ret &=
fromLegacy<bool>( aCfg,
"CurvedRatsnestLines",
"pcb_display.ratsnest_curved" );
467 ret &=
fromLegacy<int>( aCfg,
"RotationAngle",
"pcb_display.rotation_angle" );
468 ret &=
fromLegacy<int>( aCfg,
"TrackDisplayClearance",
"pcb_display.track_clearance_mode" );
469 ret &=
fromLegacy<bool>( aCfg,
"DisplayTrackFilled",
"pcb_display.track_fill" );
471 ret &=
fromLegacy<int>( aCfg,
"PcbShowZonesMode",
"pcb_display.zone_mode" );
476 nlohmann::json js = nlohmann::json::array();
482 key.Printf( wxT(
"PlotSVGLayer_%d" ), i );
484 if( aCfg->Read( key, &val ) && val )
488 Set(
"export_svg.layers", js );
492 nlohmann::json js = nlohmann::json::array();
496 if( aCfg->Read(
"ActionPluginButtons", &packed ) )
498 wxStringTokenizer pluginSettingsTokenizer = wxStringTokenizer( packed,
";" );
500 while( pluginSettingsTokenizer.HasMoreTokens() )
503 wxString plugin = pluginSettingsTokenizer.GetNextToken();
504 wxStringTokenizer pluginTokenizer = wxStringTokenizer( plugin,
"=" );
506 if( pluginTokenizer.CountTokens() != 2 )
512 std::string key( pluginTokenizer.GetNextToken().ToUTF8() );
513 bool value( pluginTokenizer.GetNextToken().Cmp( wxT(
"Visible" ) ) == 0 );
515 js.push_back( nlohmann::json( { { key, value } } ) );
519 Set(
"action_plugins", js );
525 ret &=
fromLegacy<int>( aCfg,
"Zone_Ouline_Hatch_Opt",
"zones.hatching_style" );
526 ret &=
fromLegacy<int>( aCfg,
"Zone_NetSort_Opt",
"zones.net_sort_mode" );
530 ret &=
fromLegacy<double>( aCfg,
"Zone_TH_Copper_Width",
"zones.thermal_relief_copper_width" );
532 ret &=
fromLegacy<int>( aCfg,
"PrintSinglePage",
"plot.all_layers_on_one_page" );
533 ret &=
fromLegacy<int>( aCfg,
"PrintPadsDrillOpt",
"plot.pads_drill_mode" );
537 ret &=
fromLegacy<bool>( aCfg,
"CheckZonesBeforePlotting",
"plot.check_zones_before_plotting" );
539 ret &=
fromLegacy<int>( aCfg,
"FpWizardListWidth",
"footprint_wizard_list.width" );
540 ret &=
fromLegacy<int>( aCfg,
"FpWizardListHeight",
"footprint_wizard_list.height" );
544 ret &=
fromLegacy<bool>( aCfg,
"ModViewFrameAutoZoom",
"footprint_viewer.auto_zoom" );
548 ret &=
fromLegacyString( aCfg,
"Fpwizard_auiPerspective",
"footprint_wizard.perspective" );
551 const std::string p =
"pcbnew.InteractiveRouter.";
553 Set(
"tools.pns.meta", nlohmann::json( {
554 {
"filename",
"pns" },
559 ret &=
fromLegacy<int>( aCfg, p +
"OptimizerEffort",
"tools.pns.effort" );
560 ret &=
fromLegacy<bool>( aCfg, p +
"RemoveLoops",
"tools.pns.remove_loops" );
563 ret &=
fromLegacy<bool>( aCfg, p +
"StartDiagonal",
"tools.pns.start_diagonal" );
564 ret &=
fromLegacy<int>( aCfg, p +
"ShoveTimeLimit",
"tools.pns.shove_time_limit" );
565 ret &=
fromLegacy<int>( aCfg, p +
"ShoveIterationLimit",
"tools.pns.shove_iteration_limit" );
566 ret &=
fromLegacy<int>( aCfg, p +
"WalkaroundIterationLimit",
"tools.pns.walkaround_iteration_limit" );
567 ret &=
fromLegacy<bool>( aCfg, p +
"JumpOverObstacles",
"tools.pns.jump_over_obstacles" );
568 ret &=
fromLegacy<bool>( aCfg, p +
"SmoothDraggedSegments",
"tools.pns.smooth_dragged_segments" );
569 ret &=
fromLegacy<bool>( aCfg, p +
"CanViolateDRC",
"tools.pns.can_violate_drc" );
570 ret &=
fromLegacy<bool>( aCfg, p +
"SuggestFinish",
"tools.pns.suggest_finish" );
571 ret &=
fromLegacy<bool>( aCfg, p +
"FreeAngleMode",
"tools.pns.free_angle_mode" );
572 ret &=
fromLegacy<bool>( aCfg, p +
"InlineDragEnabled",
"editing.track_drag_action" );
575 Set(
"tools.pns.fix_all_segments",
false );
582 auto migrateLegacyColor =
583 [&] (
const std::string& aKey,
int aLayerId )
587 if( aCfg->Read( aKey, &str ) )
594 migrateLegacyColor(
"Color4DPCBLayer_" + layer.ToStdString(),
PCB_LAYER_ID( i ) );
599 migrateLegacyColor(
"Color4DGrid",
LAYER_GRID );
617 if( aCfg->Read( f +
"PcbUserGrid_X", &x ) && aCfg->Read( f +
"PcbUserGrid_Y", &y ) )
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
bool migrateWindowConfig(wxConfigBase *aCfg, const std::string &aFrameName, const std::string &aJsonPath)
Migrate legacy window settings into the JSON document.
void addParamsForWindow(WINDOW_SETTINGS *aWindow, const std::string &aJsonPath, int aDefaultWidth=0, int aDefaultHeight=0)
Add parameters for the given window object.
virtual bool MigrateFromLegacy(wxConfigBase *aCfg) override
Migrates from wxConfig to JSON-based configuration.
bool migrateLibTreeWidth()
Migrate the library tree width setting from a single column (Item) to multi-column.
Color settings are a bit different than most of the settings objects in that there can be more than o...
void SetColor(int aLayer, const COLOR4D &aColor)
virtual bool MigrateFromLegacy(wxConfigBase *aLegacyConfig) override
Migrates from wxConfig to JSON-based configuration.
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...
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...
wxString GetFilename() const
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.
Represents a map of <std::string, Value>.
DIALOG_EXPORT_D356 m_ExportD356
DISPLAY_OPTIONS m_Display
bool m_ImportKeepKiCadLayerNames
wxString m_LastFootprintLibDir
EDA_ANGLE m_RotationAngle
ARC_EDIT_MODE m_ArcEditMode
FOOTPRINT_CHOOSER m_FootprintChooser
virtual ~PCBNEW_SETTINGS()
bool m_CtrlClickHighlight
TRACK_DRAG_ACTION m_TrackDragAction
bool m_ESCClearsNetHighlight
LEADER_MODE m_AngleSnapMode
virtual std::string getLegacyFrameName() const override
virtual bool MigrateFromLegacy(wxConfigBase *aLegacyConfig) override
Migrates from wxConfig to JSON-based configuration.
WINDOW_SETTINGS m_FootprintWizard
FIELDS_TABLE_SETTINGS m_FieldEditorPanel
DIFF_PHASE_SKEW_SETTINGS m_DiffPhaseSkewSettings
WINDOW_SETTINGS m_FootprintViewer
wxString m_LastFootprint3dDir
bool m_ShowCourtyardCollisions
MAGNETIC_SETTINGS m_MagneticItems
FLIP_DIRECTION m_FlipDirection
SNAP_INFERENCE_SETTINGS m_SnapInference
int m_FootprintViewerFPListWidth
std::unique_ptr< PNS::ROUTING_SETTINGS > m_PnsSettings
int m_FootprintViewerLibListWidth
bool m_FootprintViewerAutoZoomOnSelect
true to use automatic zoom on fp selection
std::set< wxString > m_MatchProperties
Keyed as "family/Property Name"; see MATCH_PROPERTIES_CATALOG.
PCB_VIEWERS_SETTINGS_BASE(const std::string &aFilename, int aSchemaVersion)
VIEWERS_DISPLAY_OPTIONS m_ViewersDisplay
void addMatchPropertiesParam()
Opt-in.
double m_FootprintViewerZoom
The last zoom level used (0 for auto)
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 * GetMigratedColorSettings()
Return a color theme for storing colors migrated from legacy (5.x and earlier) settings,...
static constexpr EDA_ANGLE ANGLE_90
static constexpr EDA_ANGLE ANGLE_360
LEADER_MODE
The kind of the leader line.
@ DIRECT
Unconstrained point-to-point.
@ LAYER_PAGE_LIMITS
Color for drawing the page extents (visibility stored in PCBNEW_SETTINGS::m_ShowPageLimits)
@ 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:
@ LEFT_RIGHT
Flip left to right (around the Y axis)
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.
const std::set< wxString > & DefaultKeys()
The subset enabled until the user says otherwise.
const int pcbnewSchemaVersion
! Update the schema version whenever a migration is required
@ SHOW_WITH_VIA_WHILE_ROUTING
PGM_BASE & Pgm()
The global program "get" accessor.
T * GetAppSettings(const char *aFilename)
@ CAPTURE_CURSOR_IN_TRACK_TOOL
void AddSnapInferenceParams(std::vector< PARAM_BASE * > &aParams, SNAP_INFERENCE_SETTINGS &aSettings)
Register the snap inference parameters.