24#include <pybind11/pybind11.h>
38#include <wx/tokenzr.h>
43#include "../3d-viewer/3d_viewer/eda_3d_viewer_settings.h"
59 m_FootprintWizardList(),
72 m_CtrlClickHighlight( false ),
73 m_Use45DegreeLimit( false ),
75 m_ESCClearsNetHighlight( true ),
76 m_PolarCoords( false ),
78 m_ShowPageLimits( true ),
79 m_ShowCourtyardCollisions( true ),
80 m_AutoRefillZones( false ),
81 m_AllowFreePads( false ),
82 m_PnsSettings( nullptr ),
83 m_FootprintViewerLibListWidth( 200 ),
84 m_FootprintViewerFPListWidth( 300 )
169 static_cast<bool>( FLIP_DIRECTION::LEFT_RIGHT ) ) );
182 static_cast<int>( MAGNETIC_OPTIONS::CAPTURE_CURSOR_IN_TRACK_TOOL ) ) );
186 static_cast<int>( MAGNETIC_OPTIONS::CAPTURE_CURSOR_IN_TRACK_TOOL ) ) );
196 static_cast<int>( TRACK_DRAG_ACTION::DRAG ) ) );
200 static_cast<int>( ARC_EDIT_MODE::KEEP_CENTER_ADJUST_ANGLE_RADIUS ) ) );
283 PCB_DISPLAY_ORIGIN::PCB_ORIGIN_PAGE ) );
603 [&]() -> nlohmann::json
605 nlohmann::json js = nlohmann::json::array();
608 js.push_back( nlohmann::json( { { pair.first.ToUTF8(), pair.second } } ) );
612 [&](
const nlohmann::json& aObj )
616 if( !aObj.is_array() )
621 for(
const auto& entry : aObj )
623 if( entry.empty() || !entry.is_object() )
626 for(
const auto& pair : entry.items() )
629 wxString( pair.key().c_str(), wxConvUTF8 ), pair.value() ) );
633 nlohmann::json::array() ) );
660 if( std::optional<int> optval = Get<int>(
"pcb_display.rotation_angle" ) )
661 Set(
"editing.rotation_angle", *optval );
665 At(
"pcb_display" ).erase(
"rotation_angle" );
678 Set(
"editing.auto_fill_zones",
false );
689 if( std::optional<int> optval = Get<int>(
"lib_tree.column_width" ) )
692 Set(
"lib_tree.column_width", 300 );
709 Set(
"editing.auto_fill_zones",
false );
727 ret &= fromLegacy<bool>( aCfg,
"ShowLayerManagerTools",
"aui.show_layer_manager" );
729 ret &= fromLegacy<int>( aCfg,
"FootprintChooserHSashPosition",
"footprint_chooser.sash_h" );
730 ret &= fromLegacy<int>( aCfg,
"FootprintChooserVSashPosition",
"footprint_chooser.sash_v" );
731 ret &= fromLegacy<int>( aCfg,
"FootprintChooserWidth",
"footprint_chooser.width" );
732 ret &= fromLegacy<int>( aCfg,
"FootprintChooserHeight",
"footprint_chooser.height" );
734 ret &= fromLegacy<bool>( aCfg,
"FlipLeftRight",
"editing.flip_left_right" );
735 ret &= fromLegacy<bool>( aCfg,
"MagneticGraphics",
"editing.magnetic_graphics" );
736 ret &= fromLegacy<int>( aCfg,
"MagneticPads",
"editing.magnetic_pads" );
737 ret &= fromLegacy<int>( aCfg,
"MagneticTracks",
"editing.magnetic_tracks" );
738 ret &= fromLegacy<bool>( aCfg,
"DisplayPolarCoords",
"editing.polar_coords" );
739 ret &= fromLegacy<bool>( aCfg,
"Use45DegreeGraphicSegments",
"editing.use_45_degree_graphic_segments" );
741 ret &= fromLegacy<bool>( aCfg,
"PcbAffT",
"pcb_display.graphic_items_fill" );
742 ret &= fromLegacy<int>( aCfg,
"MaxLnkS",
"pcb_display.max_links_shown" );
743 ret &= fromLegacy<bool>( aCfg,
"ModAffC",
"pcb_display.footprint_edge_fill" );
744 ret &= fromLegacy<bool>( aCfg,
"ModAffT",
"pcb_display.footprint_text_fill" );
745 ret &= fromLegacy<int>( aCfg,
"ShowNetNamesMode",
"pcb_display.net_names_mode" );
746 ret &= fromLegacy<int>( aCfg,
"PcbDisplayOrigin",
"pcb_display.origin_mode" );
747 ret &= fromLegacy<bool>( aCfg,
"PcbInvertXAxis",
"pcb_display.origin_invert_x_axis" );
748 ret &= fromLegacy<bool>( aCfg,
"PcbInvertYAxis",
"pcb_display.origin_invert_y_axis" );
749 ret &= fromLegacy<bool>( aCfg,
"PadAffG",
"pcb_display.pad_clearance" );
750 ret &= fromLegacy<bool>( aCfg,
"PadFill",
"pcb_display.pad_fill" );
751 ret &= fromLegacy<bool>( aCfg,
"PadSNum",
"pcb_display.pad_numbers" );
752 ret &= fromLegacy<bool>( aCfg,
"ShowRatsnestLines",
"pcb_display.ratsnest_global" );
753 ret &= fromLegacy<bool>( aCfg,
"ShowRatsnestModuleLines",
"pcb_display.ratsnest_footprint" );
754 ret &= fromLegacy<bool>( aCfg,
"CurvedRatsnestLines",
"pcb_display.ratsnest_curved" );
755 ret &= fromLegacy<int>( aCfg,
"RotationAngle",
"pcb_display.rotation_angle" );
756 ret &= fromLegacy<int>( aCfg,
"TrackDisplayClearance",
"pcb_display.track_clearance_mode" );
757 ret &= fromLegacy<bool>( aCfg,
"DisplayTrackFilled",
"pcb_display.track_fill" );
758 ret &= fromLegacy<bool>( aCfg,
"ViaFill",
"pcb_display.via_fill" );
759 ret &= fromLegacy<int>( aCfg,
"PcbShowZonesMode",
"pcb_display.zone_mode" );
761 ret &= fromLegacy<double>( aCfg,
"PlotLineWidth_mm",
"plot.line_width" );
763 aCfg->SetPath(
"/dialogs/cleanup_tracks" );
764 ret &= fromLegacy<bool>( aCfg,
"DialogCleanupVias",
"cleanup.cleanup_vias" );
765 ret &= fromLegacy<bool>( aCfg,
"DialogCleanupMergeSegments",
"cleanup.merge_segments" );
766 ret &= fromLegacy<bool>( aCfg,
"DialogCleanupUnconnected",
"cleanup.cleanup_unconnected" );
767 ret &= fromLegacy<bool>( aCfg,
"DialogCleanupShortCircuit",
"cleanup.cleanup_short_circuits" );
768 ret &= fromLegacy<bool>( aCfg,
"DialogCleanupTracksInPads",
"cleanup.cleanup_tracks_in_pad" );
769 aCfg->SetPath(
"../.." );
771 ret &= fromLegacy<bool>( aCfg,
"RefillZonesBeforeDrc",
"drc_dialog.refill_zones" );
772 ret &= fromLegacy<bool>( aCfg,
"DrcTestFootprints",
"drc_dialog.test_footprints" );
774 ret &= fromLegacy<bool>( aCfg,
"DrillMergePTHNPTH",
"gen_drill.merge_pth_npth" );
775 ret &= fromLegacy<bool>( aCfg,
"DrillMinHeader",
"gen_drill.minimal_header" );
776 ret &= fromLegacy<bool>( aCfg,
"DrillMirrorYOpt",
"gen_drill.mirror" );
777 ret &= fromLegacy<bool>( aCfg,
"DrillUnit",
"gen_drill.unit_drill_is_inch" );
778 ret &= fromLegacy<bool>( aCfg,
"OvalHolesRouteMode",
"gen_drill.use_route_for_oval_holes" );
779 ret &= fromLegacy<int>( aCfg,
"DrillFileType",
"gen_drill.drill_file_type" );
780 ret &= fromLegacy<int>( aCfg,
"DrillMapFileType",
"gen_drill.map_file_type" );
781 ret &= fromLegacy<int>( aCfg,
"DrillZerosFormat",
"gen_drill.zeros_format" );
783 ret &= fromLegacy<bool>( aCfg,
"IDFRefAutoAdj",
"export_idf.auto_adjust" );
784 ret &= fromLegacy<int>( aCfg,
"IDFRefUnits",
"export_idf.ref_units" );
785 ret &= fromLegacy<double>( aCfg,
"IDFRefX",
"export_idf.ref_x" );
786 ret &= fromLegacy<double>( aCfg,
"IDFRefY",
"export_idf.ref_y" );
787 ret &= fromLegacy<bool>( aCfg,
"IDFExportThou",
"export_idf.units_mils" );
789 ret &= fromLegacy<int>( aCfg,
"STEP_Origin_Opt",
"export_step.origin_mode" );
790 ret &= fromLegacy<int>( aCfg,
"STEP_UserOriginUnits",
"export_step.origin_units" );
791 ret &= fromLegacy<double>( aCfg,
"STEP_UserOriginX",
"export_step.origin_x" );
792 ret &= fromLegacy<double>( aCfg,
"STEP_UserOriginY",
"export_step.origin_y" );
793 ret &= fromLegacy<bool>( aCfg,
"STEP_NoVirtual",
"export_step.no_virtual" );
795 ret &= fromLegacy<bool>( aCfg,
"PlotSVGModeColor",
"export_svg.black_and_white" );
796 ret &= fromLegacy<bool>( aCfg,
"PlotSVGModeMirror",
"export_svg.mirror" );
797 ret &= fromLegacy<bool>( aCfg,
"PlotSVGModeOneFile",
"export_svg.one_file" );
798 ret &= fromLegacy<bool>( aCfg,
"PlotSVGBrdEdge",
"export_svg.plot_board_edges" );
799 ret &= fromLegacy<int>( aCfg,
"PlotSVGPageOpt",
"export_svg.page_size" );
800 ret &=
fromLegacyString( aCfg,
"PlotSVGDirectory",
"export_svg.output_dir" );
803 nlohmann::json js = nlohmann::json::array();
809 key.Printf( wxT(
"PlotSVGLayer_%d" ), i );
811 if( aCfg->Read( key, &val ) && val )
815 Set(
"export_svg.layers", js );
819 nlohmann::json js = nlohmann::json::array();
823 if( aCfg->Read(
"ActionPluginButtons", &packed ) )
825 wxStringTokenizer pluginSettingsTokenizer = wxStringTokenizer( packed,
";" );
827 while( pluginSettingsTokenizer.HasMoreTokens() )
830 wxString plugin = pluginSettingsTokenizer.GetNextToken();
831 wxStringTokenizer pluginTokenizer = wxStringTokenizer( plugin,
"=" );
833 if( pluginTokenizer.CountTokens() != 2 )
839 std::string key( pluginTokenizer.GetNextToken().ToUTF8() );
840 bool value( pluginTokenizer.GetNextToken().Cmp( wxT(
"Visible" ) ) == 0 );
842 js.push_back( nlohmann::json( { { key, value } } ) );
846 Set(
"action_plugins", js );
852 ret &= fromLegacy<int>( aCfg,
"VrmlExportUnit",
"export_vrml.units" );
853 ret &= fromLegacy<bool>( aCfg,
"VrmlExportCopyFiles",
"export_vrml.copy_3d_models" );
854 ret &= fromLegacy<bool>( aCfg,
"VrmlUseRelativePaths",
"export_vrml.use_relative_paths" );
855 ret &= fromLegacy<int>( aCfg,
"VrmlRefUnits",
"export_vrml.ref_units" );
856 ret &= fromLegacy<double>( aCfg,
"VrmlRefX",
"export_vrml.ref_x" );
857 ret &= fromLegacy<double>( aCfg,
"VrmlRefY",
"export_vrml.ref_y" );
858 ret &= fromLegacy<int> ( aCfg,
"VrmlOriginMode",
"export_vrml.origin_mode" );
860 ret &= fromLegacy<int>( aCfg,
"Zone_Ouline_Hatch_Opt",
"zones.hatching_style" );
861 ret &= fromLegacy<int>( aCfg,
"Zone_NetSort_Opt",
"zones.net_sort_mode" );
862 ret &= fromLegacy<double>( aCfg,
"Zone_Clearance",
"zones.clearance" );
863 ret &= fromLegacy<double>( aCfg,
"Zone_Thickness",
"zones.min_thickness" );
864 ret &= fromLegacy<double>( aCfg,
"Zone_TH_Gap",
"zones.thermal_relief_gap" );
865 ret &= fromLegacy<double>( aCfg,
"Zone_TH_Copper_Width",
"zones.thermal_relief_copper_width" );
867 aCfg->SetPath(
"ImportGraphics" );
868 ret &= fromLegacy<int>( aCfg,
"BoardLayer",
"import_graphics.layer" );
869 ret &= fromLegacy<bool>( aCfg,
"InteractivePlacement",
"import_graphics.interactive_placement" );
871 ret &= fromLegacy<double>( aCfg,
"LineWidth",
"import_graphics.line_width" );
872 ret &= fromLegacy<int>( aCfg,
"LineWidthUnits",
"import_graphics.line_width_units" );
873 ret &= fromLegacy<int>( aCfg,
"PositionUnits",
"import_graphics.origin_units" );
874 ret &= fromLegacy<double>( aCfg,
"PositionX",
"import_graphics.origin_x" );
875 ret &= fromLegacy<double>( aCfg,
"PositionY",
"import_graphics.origin_y" );
876 aCfg->SetPath(
".." );
878 ret &= fromLegacy<int>( aCfg,
"NetlistReportFilterMsg",
"netlist.report_filter" );
879 ret &= fromLegacy<bool>( aCfg,
"NetlistUpdateFootprints",
"netlist.update_footprints" );
880 ret &= fromLegacy<bool>( aCfg,
"NetlistDeleteShortingTracks",
"netlist.delete_shorting_tracks" );
881 ret &= fromLegacy<bool>( aCfg,
"NetlistDeleteExtraFootprints",
"netlist.delete_extra_footprints" );
883 ret &= fromLegacy<int>( aCfg,
"PlaceFileUnits",
"place_file.units" );
884 ret &= fromLegacy<int>( aCfg,
"PlaceFileOpts",
"place_file.file_options" );
885 ret &= fromLegacy<int>( aCfg,
"PlaceFileFormat",
"place_file.file_format" );
886 ret &= fromLegacy<bool>( aCfg,
"PlaceFileIncludeBrdEdge",
"place_file.include_board_edge" );
888 ret &= fromLegacy<int>( aCfg,
"PrintSinglePage",
"plot.all_layers_on_one_page" );
889 ret &= fromLegacy<int>( aCfg,
"PrintPadsDrillOpt",
"plot.pads_drill_mode" );
890 ret &= fromLegacy<double>( aCfg,
"PlotXFineScaleAdj",
"plot.fine_scale_x" );
891 ret &= fromLegacy<double>( aCfg,
"PlotYFineScaleAdj",
"plot.fine_scale_y" );
892 ret &= fromLegacy<double>( aCfg,
"PSPlotFineWidthAdj",
"plot.ps_fine_width_adjust" );
893 ret &= fromLegacy<bool>( aCfg,
"CheckZonesBeforePlotting",
"plot.check_zones_before_plotting" );
895 ret &=
fromLegacyString( aCfg,
"FootprintTextShownColumns",
"window.footprint_text_shown_columns" );
897 ret &= fromLegacy<int>( aCfg,
"FpWizardListWidth",
"footprint_wizard_list.width" );
898 ret &= fromLegacy<int>( aCfg,
"FpWizardListHeight",
"footprint_wizard_list.height" );
902 ret &= fromLegacy<bool>( aCfg,
"ModViewFrameAutoZoom",
"footprint_viewer.auto_zoom" );
903 ret &= fromLegacy<double>( aCfg,
"ModViewFrameZoom",
"footprint_viewer.zoom" );
906 ret &=
fromLegacyString( aCfg,
"Fpwizard_auiPerspective",
"footprint_wizard.perspective" );
909 const std::string p =
"pcbnew.InteractiveRouter.";
911 Set(
"tools.pns.meta", nlohmann::json( {
912 {
"filename",
"pns" },
916 ret &= fromLegacy<int>( aCfg, p +
"Mode",
"tools.pns.mode" );
917 ret &= fromLegacy<int>( aCfg, p +
"OptimizerEffort",
"tools.pns.effort" );
918 ret &= fromLegacy<bool>( aCfg, p +
"RemoveLoops",
"tools.pns.remove_loops" );
919 ret &= fromLegacy<bool>( aCfg, p +
"SmartPads",
"tools.pns.smart_pads" );
920 ret &= fromLegacy<bool>( aCfg, p +
"ShoveVias",
"tools.pns.shove_vias" );
921 ret &= fromLegacy<bool>( aCfg, p +
"StartDiagonal",
"tools.pns.start_diagonal" );
922 ret &= fromLegacy<int>( aCfg, p +
"ShoveTimeLimit",
"tools.pns.shove_time_limit" );
923 ret &= fromLegacy<int>( aCfg, p +
"ShoveIterationLimit",
"tools.pns.shove_iteration_limit" );
924 ret &= fromLegacy<int>( aCfg, p +
"WalkaroundIterationLimit",
"tools.pns.walkaround_iteration_limit" );
925 ret &= fromLegacy<bool>( aCfg, p +
"JumpOverObstacles",
"tools.pns.jump_over_obstacles" );
926 ret &= fromLegacy<bool>( aCfg, p +
"SmoothDraggedSegments",
"tools.pns.smooth_dragged_segments" );
927 ret &= fromLegacy<bool>( aCfg, p +
"CanViolateDRC",
"tools.pns.can_violate_drc" );
928 ret &= fromLegacy<bool>( aCfg, p +
"SuggestFinish",
"tools.pns.suggest_finish" );
929 ret &= fromLegacy<bool>( aCfg, p +
"FreeAngleMode",
"tools.pns.free_angle_mode" );
930 ret &= fromLegacy<bool>( aCfg, p +
"InlineDragEnabled",
"editing.track_drag_action" );
933 Set(
"tools.pns.fix_all_segments",
false );
940 auto migrateLegacyColor =
941 [&] (
const std::string& aKey,
int aLayerId )
945 if( aCfg->Read( aKey, &str ) )
952 migrateLegacyColor(
"Color4DPCBLayer_" + layer.ToStdString(),
PCB_LAYER_ID( i ) );
957 migrateLegacyColor(
"Color4DGrid",
LAYER_GRID );
974 if( aCfg->Read( f +
"PcbUserGrid_X", &x ) && aCfg->Read( f +
"PcbUserGrid_Y", &y ) )
977 static_cast<long>( EDA_UNITS::INCH ) ) );
ARC_EDIT_MODE
Settings for arc editing.
@ KEEP_CENTER_ADJUST_ANGLE_RADIUS
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.
virtual bool MigrateFromLegacy(wxConfigBase *aCfg) override
Migrates from wxConfig to JSON-based configuration.
void addParamsForWindow(WINDOW_SETTINGS *aWindow, const std::string &aJsonPath)
Add parameters for the given window object.
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.
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...
virtual void Load()
Updates the parameters of this object based on the current JSON document contents.
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.
DIALOG_EXPORT_2581 m_Export2581
DISPLAY_OPTIONS m_Display
DIALOG_NETLIST m_NetlistDialog
EDA_ANGLE m_RotationAngle
DIALOG_PLACE_FILE m_PlaceFile
DIALOG_FOOTPRINT_WIZARD_LIST m_FootprintWizardList
ARC_EDIT_MODE m_ArcEditMode
FOOTPRINT_CHOOSER m_FootprintChooser
virtual ~PCBNEW_SETTINGS()
bool m_CtrlClickHighlight
DIALOG_EXPORT_VRML m_ExportVrml
DIALOG_EXPORT_IDF m_ExportIdf
TRACK_DRAG_ACTION m_TrackDragAction
LOCKING_OPTIONS m_LockingOptions
bool m_ESCClearsNetHighlight
wxString m_lastFootprintLibDir
virtual std::string getLegacyFrameName() const override
virtual bool MigrateFromLegacy(wxConfigBase *aLegacyConfig) override
Migrates from wxConfig to JSON-based configuration.
WINDOW_SETTINGS m_FootprintWizard
ACTION_PLUGIN_SETTINGS_LIST m_VisibleActionPlugins
DIALOG_IMPORT_GRAPHICS m_ImportGraphics
DIALOG_EXPORT_STEP m_ExportStep
WINDOW_SETTINGS m_FootprintViewer
wxString m_lastFootprint3dDir
bool m_ShowCourtyardCollisions
DIALOG_GENERATE_DRILL m_GenDrill
MAGNETIC_SETTINGS m_MagneticItems
FLIP_DIRECTION m_FlipDirection
DIALOG_REANNOTATE m_Reannotate
int m_FootprintViewerFPListWidth
DIALOG_EXPORT_ODBPP m_ExportODBPP
wxString m_FootprintTextShownColumns
int m_FootprintViewerLibListWidth
bool m_FootprintViewerAutoZoomOnSelect
true to use automatic zoom on fp selection
VIEWERS_DISPLAY_OPTIONS m_ViewersDisplay
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.
T * GetAppSettings(const wxString &aFilename)
Return a handle to the a given settings by type.
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
@ 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_THROUGH
Draw blind/buried vias.
@ LAYER_VIA_BBLIND
Draw micro 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.
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.
float properties_splitter
int properties_panel_width
int design_blocks_panel_float_height
bool appearance_expand_layer_display
bool appearance_expand_net_display
int design_blocks_panel_docked_width
int search_panel_dock_direction
int design_blocks_panel_float_width
bool cleanup_tracks_in_pad
bool delete_dangling_vias
bool cleanup_refill_zones
bool cleanup_short_circuits
bool test_all_track_errors
bool use_route_for_oval_holes
bool use_dlg_layer_selection
bool interactive_placement
bool associate_by_ref_sch
bool delete_extra_footprints
bool delete_shorting_tracks
int all_layers_on_one_page
double ps_fine_width_adjust
bool check_zones_before_plotting
bool edgecut_on_all_layers
wxString front_refdes_start
wxString back_refdes_start
wxString report_file_name
bool m_DisplayPcbTrackFill
TRACK_CLEARANCE_MODE m_TrackClearance
bool m_DisplayInvertYAxis
bool m_DisplayRatsnestLinesCurved
bool m_ShowModuleRatsnest
bool m_DisplayInvertXAxis
bool m_ForceShowFieldsWhenFPSelected
bool m_ShowGlobalRatsnest
PCB_DISPLAY_ORIGIN m_DisplayOrigin
double m_RatsnestThickness
bool m_sessionSkipPrompts
bool m_DisplayGraphicsFill
Functions to provide common constants and other functions to assist in making a consistent UI.