62            [&]( 
const std::string& aString )
 
   69            [&]() -> nlohmann::json
 
   71                nlohmann::json ret = nlohmann::json::array();
 
   81                    ret.push_back( 
"none" );
 
   85            [&]( 
const nlohmann::json& aVal )
 
   87                if( !aVal.is_array() || aVal.empty() )
 
   97                for( 
const nlohmann::json& entry : aVal )
 
  101                        std::string vs = entry.get<std::string>();
 
  105                        else if( vs == 
"none" )
 
  116                if( !visible.any() && !none )
 
  124            [&]() -> nlohmann::json
 
  142            [&]( 
const nlohmann::json& aVal )
 
  144                if( aVal.empty() || !aVal.is_object() )
 
  160                { 
"lockedItems", 
false },
 
  161                { 
"footprints", 
true },
 
  166                { 
"graphics", 
true },
 
  168                { 
"keepouts", 
true },
 
  169                { 
"dimensions", 
true },
 
  170                { 
"otherItems", 
true }
 
  251            [&]() -> nlohmann::json
 
  253                nlohmann::json ret = nlohmann::json::array();
 
  255                for( PROJECT_FILE_STATE& fileState : m_files )
 
  258                    file[
"name"] = fileState.fileName;
 
  259                    file[
"open"] = fileState.open;
 
  261                    nlohmann::json window;
 
  262                    window[
"maximized"] = fileState.window.maximized;
 
  263                    window[
"size_x"]    = fileState.window.size_x;
 
  264                    window[
"size_y"]    = fileState.window.size_y;
 
  265                    window[
"pos_x"]     = fileState.window.pos_x;
 
  266                    window[
"pos_y"]     = fileState.window.pos_y;
 
  267                    window[
"display"]   = fileState.window.display;
 
  269                    file[
"window"] = window;
 
  271                    ret.push_back( file );
 
  276            [&]( 
const nlohmann::json& aVal )
 
  278                if( !aVal.is_array() || aVal.empty() )
 
  283                for( 
const nlohmann::json& file : aVal )
 
  289                        SetIfPresent( file, 
"name", fileState.
fileName );
 
  290                        SetIfPresent( file, 
"open", fileState.
open );
 
  291                        SetIfPresent( file, 
"window.size_x", fileState.
window.
size_x );
 
  292                        SetIfPresent( file, 
"window.size_y", fileState.
window.
size_y );
 
  293                        SetIfPresent( file, 
"window.pos_x", fileState.
window.
pos_x );
 
  294                        SetIfPresent( file, 
"window.pos_y", fileState.
window.
pos_y );
 
  296                        SetIfPresent( file, 
"window.display", fileState.
window.
display );
 
  298                        m_files.push_back( fileState );
 
  311            [&]() -> nlohmann::json
 
  315                ret[
"lockedItems"] = m_SchSelectionFilter.lockedItems;
 
  316                ret[
"symbols"]     = m_SchSelectionFilter.symbols;
 
  317                ret[
"text"]        = m_SchSelectionFilter.text;
 
  318                ret[
"wires"]       = m_SchSelectionFilter.wires;
 
  319                ret[
"labels"]      = m_SchSelectionFilter.labels;
 
  320                ret[
"pins"]        = m_SchSelectionFilter.pins;
 
  321                ret[
"graphics"]    = m_SchSelectionFilter.graphics;
 
  322                ret[
"images"]      = m_SchSelectionFilter.images;
 
  323                ret[
"ruleAreas"]   = m_SchSelectionFilter.ruleAreas;
 
  324                ret[
"otherItems"]  = m_SchSelectionFilter.otherItems;
 
  328            [&]( 
const nlohmann::json& aVal )
 
  330                if( aVal.empty() || !aVal.is_object() )
 
  333                SetIfPresent( aVal, 
"lockedItems", m_SchSelectionFilter.lockedItems );
 
  334                SetIfPresent( aVal, 
"symbols", m_SchSelectionFilter.symbols );
 
  335                SetIfPresent( aVal, 
"text", m_SchSelectionFilter.text );
 
  336                SetIfPresent( aVal, 
"wires", m_SchSelectionFilter.wires );
 
  337                SetIfPresent( aVal, 
"labels", m_SchSelectionFilter.labels );
 
  338                SetIfPresent( aVal, 
"pins", m_SchSelectionFilter.pins );
 
  339                SetIfPresent( aVal, 
"graphics", m_SchSelectionFilter.graphics );
 
  340                SetIfPresent( aVal, 
"images", m_SchSelectionFilter.images );
 
  341                SetIfPresent( aVal, 
"ruleAreas", m_SchSelectionFilter.ruleAreas );
 
  342                SetIfPresent( aVal, 
"otherItems", m_SchSelectionFilter.otherItems );
 
  345                { 
"lockedItems", 
false },
 
  351                { 
"graphics", 
true },
 
  353                { 
"ruleAreas", 
true },
 
  354                { 
"otherItems", 
true }
 
  358                                                    &m_SchHierarchyCollapsed, {} ) );
 
  360    registerMigration( 1, 2,
 
  368                std::string ptr( 
"board.visible_items" );
 
  370                if( Contains( ptr ) )
 
  372                    if( At( ptr ).is_array() )
 
  379                        At( 
"board" ).erase( 
"visible_items" );
 
  382                    m_wasMigrated = 
true;
 
  388    registerMigration( 2, 3,
 
  398                const std::map<int, int> offsets = {
 
  417                std::string ptr( 
"board.visible_items" );
 
  419                if( Contains( ptr ) && At( ptr ).is_array() )
 
  421                    nlohmann::json visible = nlohmann::json::array();
 
  423                    for( 
const nlohmann::json& val : At( ptr ) )
 
  427                            int layer = val.get<
int>();
 
  429                            if( offsets.count( layer ) )
 
  430                                visible.push_back( offsets.at( layer ) );
 
  432                                visible.push_back( layer );
 
  440                    At( 
"board" )[
"visible_items"] = visible;
 
  441                    m_wasMigrated = 
true;
 
  447    registerMigration( 3, 4,
 
  452                std::string ptr( 
"board.visible_items" );
 
  454                if( Contains( ptr ) )
 
  456                    if( At( ptr ).is_array() && !At( ptr ).
empty() )
 
  459                        At( 
"board" ).erase( 
"visible_items" );
 
  461                    m_wasMigrated = 
true;
 
  467    registerMigration( 4, 5,
 
  472                std::string ptr( 
"board.visible_items" );
 
  474                if( Contains( ptr ) && At( ptr ).is_array() )
 
  476                    std::vector<std::string> newLayers;
 
  478                    for( nlohmann::json& entry : At( ptr ) )
 
  480                        if( !entry.is_number_integer() )
 
  483                        if( std::optional<VISIBILITY_LAYER> vl =
 
  490                    At( ptr ) = newLayers;
 
  491                    m_wasMigrated = 
true;
 
 
  514    Set( 
"meta.filename",
 
 
  546                                return a.fileName == aFileName;
 
 
  564                                return a.fileName == aFileName;
 
  571        fileState.
open = 
false;
 
  579        m_files.push_back( fileState );
 
  584    ( *it ).window = aWindowCfg->
state;
 
  585    ( *it ).open   = aOpen;
 
 
HIGH_CONTRAST_MODE
Determine how inactive layers should be displayed.
 
@ NORMAL
Inactive layers are shown normally (no high-contrast mode)
 
@ HIDDEN
Inactive layers are hidden.
 
@ RATSNEST
Net/netclass colors are shown on ratsnest lines only.
 
@ ALL
Net/netclass colors are shown on all net copper.
 
@ OFF
Net (and netclass) colors are not shown.
 
std::string FmtHex() const
Return a hex string showing contents of this set.
 
Helper for storing and iterating over GAL_LAYER_IDs.
 
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...
 
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)
 
JSON_SETTINGS(const wxString &aFilename, SETTINGS_LOC aLocation, int aSchemaVersion)
 
bool m_deleteLegacyAfterMigration
Whether or not to delete legacy file after migration.
 
void SetFilename(const wxString &aFilename)
 
virtual bool SaveToFile(const wxString &aDirectory="", bool aForce=false)
Calls Store() and then writes the contents of the JSON document to a file.
 
static const LSET & AllLayersMask()
 
Stores an enum as an integer.
 
Like a normal param, but with custom getter and setter functions.
 
bool SaveAs(const wxString &aDirectory, const wxString &aFile)
 
bool m_PrototypeZoneFill
Whether Zone fill should always be solid for performance with large boards.
 
LSET m_VisibleLayers
Board settings.
 
double m_PadOpacity
Opacity override for SMD pads and PTH.
 
bool SaveToFile(const wxString &aDirectory="", bool aForce=false) override
Calls Store() and then writes the contents of the JSON document to a file.
 
std::vector< PROJECT_FILE_STATE > m_files
Project scope.
 
double m_ViaOpacity
Opacity override for all types of via.
 
PANEL_NET_INSPECTOR_SETTINGS m_NetInspectorPanel
The state of the net inspector panel.
 
PCB_SELECTION_FILTER_OPTIONS m_PcbSelectionFilter
State of the selection filter widgets.
 
wxString m_ActiveLayerPreset
The name of a LAYER_PRESET that is currently activated (or blank if none)
 
double m_TrackOpacity
Opacity override for all tracks.
 
wxString m_GitRepoUsername
 
PROJECT * m_project
A link to the owning project.
 
double m_ZoneOpacity
Opacity override for filled zones.
 
bool m_AutoTrackWidth
The current setting for whether to automatically adjust track widths to match.
 
ZONE_DISPLAY_MODE m_ZoneDisplayMode
How zones are drawn.
 
double m_ShapeOpacity
Opacity override for graphic shapes.
 
PCB_LAYER_ID m_ActiveLayer
The current (active) board layer for editing.
 
HIGH_CONTRAST_MODE m_ContrastModeDisplay
The current contrast mode.
 
NET_COLOR_MODE m_NetColorMode
The current net color mode.
 
std::vector< wxString > m_OpenJobSets
 
bool MigrateFromLegacy(wxConfigBase *aLegacyConfig) override
Migrates from wxConfig to JSON-based configuration.
 
GAL_SET m_VisibleItems
The GAL layers (aka items) that are turned on for viewing (.
 
std::vector< wxString > m_HiddenNets
A list of netnames that have been manually hidden in the board editor.
 
PROJECT_LOCAL_SETTINGS(PROJECT *aProject, const wxString &aFilename)
 
std::set< wxString > m_HiddenNetclasses
 
void SaveFileState(const wxString &aFileName, const WINDOW_SETTINGS *aWindowCfg, bool aOpen)
 
double m_ImageOpacity
Opacity override for user images.
 
const PROJECT_FILE_STATE * GetFileState(const wxString &aFileName)
 
Container for project specific data.
 
static bool empty(const wxTextEntryBase *aCtrl)
 
static const std::string ProjectLocalSettingsFileExtension
 
NORMAL
Follows standard pretty-printing rules.
 
constexpr PCB_LAYER_ID PCBNEW_LAYER_ID_START
 
GAL_LAYER_ID
GAL layers are "virtual" layers, i.e.
 
@ LAYER_FILLED_SHAPES
Copper graphic shape opacity/visibility (color ignored).
 
@ LAYER_ZONES
Control for copper zone opacity/visibility (color ignored).
 
@ LAYER_PADS
Meta control for all pads opacity/visibility (color ignored).
 
std::optional< VISIBILITY_LAYER > VisibilityLayerFromRenderLayer(GAL_LAYER_ID aLayerId)
 
GAL_SET UserVisbilityLayers()
The set of GAL_LAYER_IDs that correspond to VISIBILITY_LAYERS.
 
std::string VisibilityLayerToString(VISIBILITY_LAYER aLayerId)
 
std::optional< GAL_LAYER_ID > RenderLayerFromVisbilityString(const std::string &aLayer)
 
const int projectLocalSettingsVersion
 
struct WINDOW_STATE window
 
Store the common settings that are saved and loaded for each window / frame.