38 m_AutoTrackWidth( true ),
40 m_TrackOpacity( 1.0 ),
44 m_ShapeOpacity( 1.0 ),
45 m_ImageOpacity( 0.6 ),
46 m_PcbSelectionFilter(),
57 [&](
const std::string& aString )
64 [&]() -> nlohmann::json
66 nlohmann::json ret = nlohmann::json::array();
74 [&](
const nlohmann::json& aVal )
76 if( !aVal.is_array() || aVal.empty() )
84 for(
const nlohmann::json& entry : aVal )
88 int i = entry.get<
int>();
100 [&]() -> nlohmann::json
118 [&](
const nlohmann::json& aVal )
120 if( aVal.empty() || !aVal.is_object() )
136 {
"lockedItems",
false },
137 {
"footprints",
true },
142 {
"graphics",
true },
144 {
"keepouts",
true },
145 {
"dimensions",
true },
146 {
"otherItems",
true }
157 HIGH_CONTRAST_MODE::NORMAL, HIGH_CONTRAST_MODE::HIDDEN ) );
173 NET_COLOR_MODE::ALL ) );
180 ZONE_DISPLAY_MODE::SHOW_FILLED, ZONE_DISPLAY_MODE::SHOW_FILLED,
181 ZONE_DISPLAY_MODE::SHOW_TRIANGULATION ) );
208 m_params.emplace_back(
new PARAM<bool>(
"net_inspector_panel.show_zero_pad_nets",
209 &m_NetInspectorPanel.show_zero_pad_nets,
false ) );
210 m_params.emplace_back(
new PARAM<bool>(
"net_inspector_panel.show_unconnected_nets",
211 &m_NetInspectorPanel.show_unconnected_nets,
false ) );
212 m_params.emplace_back(
new PARAM<int>(
"net_inspector_panel.sorting_column",
213 &m_NetInspectorPanel.sorting_column, -1 ) );
214 m_params.emplace_back(
new PARAM<bool>(
"net_inspector_panel.sort_ascending",
215 &m_NetInspectorPanel.sort_order_asc,
true ) );
216 m_params.emplace_back(
new PARAM_LIST<int>(
"net_inspector_panel.col_order",
217 &m_NetInspectorPanel.col_order, {} ) );
218 m_params.emplace_back(
new PARAM_LIST<int>(
"net_inspector_panel.col_widths",
219 &m_NetInspectorPanel.col_widths, {} ) );
220 m_params.emplace_back(
new PARAM_LIST<bool>(
"net_inspector_panel.col_hidden",
221 &m_NetInspectorPanel.col_hidden, {} ) );
223 &m_NetInspectorPanel.expanded_rows, {} ) );
226 [&]() -> nlohmann::json
228 nlohmann::json ret = nlohmann::json::array();
233 file[
"name"] = fileState.fileName;
234 file[
"open"] = fileState.open;
236 nlohmann::json window;
237 window[
"maximized"] = fileState.window.maximized;
238 window[
"size_x"] = fileState.window.size_x;
239 window[
"size_y"] = fileState.window.size_y;
240 window[
"pos_x"] = fileState.window.pos_x;
241 window[
"pos_y"] = fileState.window.pos_y;
242 window[
"display"] = fileState.window.display;
244 file[
"window"] = window;
246 ret.push_back( file );
251 [&](
const nlohmann::json& aVal )
253 if( !aVal.is_array() || aVal.empty() )
260 for(
const nlohmann::json& file : aVal )
266 SetIfPresent( file,
"name", fileState.
fileName );
267 SetIfPresent( file,
"open", fileState.
open );
268 SetIfPresent( file,
"window.size_x", fileState.
window.
size_x );
269 SetIfPresent( file,
"window.size_y", fileState.
window.
size_y );
270 SetIfPresent( file,
"window.pos_x", fileState.
window.
pos_x );
271 SetIfPresent( file,
"window.pos_y", fileState.
window.
pos_y );
273 SetIfPresent( file,
"window.display", fileState.
window.
display );
275 m_files.push_back( fileState );
288 [&]() -> nlohmann::json
292 ret[
"lockedItems"] = m_SchSelectionFilter.lockedItems;
293 ret[
"symbols"] = m_SchSelectionFilter.symbols;
294 ret[
"text"] = m_SchSelectionFilter.text;
295 ret[
"wires"] = m_SchSelectionFilter.wires;
296 ret[
"labels"] = m_SchSelectionFilter.labels;
297 ret[
"pins"] = m_SchSelectionFilter.pins;
298 ret[
"graphics"] = m_SchSelectionFilter.graphics;
299 ret[
"images"] = m_SchSelectionFilter.images;
300 ret[
"otherItems"] = m_SchSelectionFilter.otherItems;
304 [&](
const nlohmann::json& aVal )
306 if( aVal.empty() || !aVal.is_object() )
309 SetIfPresent( aVal,
"lockedItems", m_SchSelectionFilter.lockedItems );
310 SetIfPresent( aVal,
"symbols", m_SchSelectionFilter.symbols );
311 SetIfPresent( aVal,
"text", m_SchSelectionFilter.text );
312 SetIfPresent( aVal,
"wires", m_SchSelectionFilter.wires );
313 SetIfPresent( aVal,
"labels", m_SchSelectionFilter.labels );
314 SetIfPresent( aVal,
"pins", m_SchSelectionFilter.pins );
315 SetIfPresent( aVal,
"graphics", m_SchSelectionFilter.graphics );
316 SetIfPresent( aVal,
"images", m_SchSelectionFilter.images );
317 SetIfPresent( aVal,
"otherItems", m_SchSelectionFilter.otherItems );
320 {
"lockedItems",
false },
326 {
"graphics",
true },
328 {
"otherItems",
true }
331 registerMigration( 1, 2,
339 std::string ptr(
"board.visible_items" );
341 if( Contains( ptr ) )
343 if( At( ptr ).is_array() )
350 At(
"board" ).erase(
"visible_items" );
357 registerMigration( 2, 3,
367 const std::map<int, int> offsets = {
386 std::string ptr(
"board.visible_items" );
388 if( Contains( ptr ) && At( ptr ).is_array() )
390 nlohmann::json visible = nlohmann::json::array();
392 for(
const nlohmann::json& val : At( ptr ) )
396 int layer = val.get<
int>();
398 if( offsets.count( layer ) )
399 visible.push_back( offsets.at( layer ) );
401 visible.push_back( layer );
409 At(
"board" )[
"visible_items"] = visible;
415 registerMigration( 3, 4,
420 std::string ptr(
"board.visible_items" );
422 if( Contains( ptr ) )
424 if( At( ptr ).is_array() )
427 At(
"board" ).erase(
"visible_items" );
470 return a.fileName == aFileName;
488 return a.fileName == aFileName;
495 fileState.
open =
false;
503 m_files.push_back( fileState );
508 ( *it ).window = aWindowCfg->
state;
509 ( *it ).open = aOpen;
@ NORMAL
Use all material properties from model file.
HIGH_CONTRAST_MODE
Determine how inactive layers should be displayed.
@ RATSNEST
Net/netclass colors are shown on ratsnest lines only.
static GAL_SET DefaultVisible()
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)
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.
int ParseHex(const char *aStart, int aCount)
Convert the output of FmtHex() and replaces this set's values with those given in the input string.
static LSET AllLayersMask()
std::string FmtHex() const
Return a hex string showing contents of this LSEQ.
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)
LSET m_VisibleLayers
Board settings.
wxString m_GitRepoPassword
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.
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.
virtual const wxString GetProjectName() const
Return the short name of the project.
static const std::string ProjectLocalSettingsFileExtension
constexpr PCB_LAYER_ID PCBNEW_LAYER_ID_START
@ LAYER_ZONES
Control for copper zone opacity/visibility (color ignored)
@ LAYER_SHAPES
Copper graphic shape opacity/visibility (color ignored)
@ LAYER_PADS
Meta control for all pads opacity/visibility (color ignored)
const int projectLocalSettingsVersion
std::vector< wxString > custom_group_rules
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.
struct WINDOW_STATE window
Stores the common settings that are saved and loaded for each window / frame.