KiCad PCB EDA Suite
Loading...
Searching...
No Matches
pcbnew_config.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
5 * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <[email protected]>
6 * Copyright (C) 2012 Wayne Stambaugh <[email protected]>
7 * Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, you may find one here:
21 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
22 * or you may search the http://www.gnu.org website for the version 2 license,
23 * or you may write to the Free Software Foundation, Inc.,
24 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
25 */
26
27#include <pcb_edit_frame.h>
28#include <tool/tool_manager.h>
32#include <filename_resolver.h>
33#include <pcbplot.h>
34#include <pcb_painter.h>
35#include <pgm_base.h>
36#include <project.h>
42
43
45{
47
48 // Load the drawing sheet from the filename stored in the project
49 // If empty, or not existing, the default drawing sheet is loaded.
53
54 wxString filename = resolver.ResolvePath( project.m_BoardDrawingSheetFile,
55 Prj().GetProjectPath(),
56 GetBoard()->GetEmbeddedFiles() );
57
58 wxString msg;
59
60 if( !DS_DATA_MODEL::GetTheInstance().LoadDrawingSheet( filename, &msg ) )
61 ShowInfoBarError( msg, true );
62
63}
64
66{
68 PROJECT_LOCAL_SETTINGS& localSettings = Prj().GetLocalSettings();
69
70 BASE_SCREEN::m_DrawingSheetFileName = project.m_BoardDrawingSheetFile;
71
72 // Load render settings that aren't stored in PCB_DISPLAY_OPTIONS
73
74 std::shared_ptr<NET_SETTINGS>& netSettings = project.NetSettings();
76 KIGFX::PCB_RENDER_SETTINGS* renderSettings = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( rs );
77
78 const NETINFO_LIST& nets = GetBoard()->GetNetInfo();
79
80 std::set<int>& hiddenNets = renderSettings->GetHiddenNets();
81 hiddenNets.clear();
82
83 for( const wxString& hidden : localSettings.m_HiddenNets )
84 {
85 if( NETINFO_ITEM* net = nets.GetNetItem( hidden ) )
86 hiddenNets.insert( net->GetNetCode() );
87 }
88
89 for( NETINFO_ITEM* net : nets )
90 {
91 if( localSettings.m_HiddenNetclasses.count( net->GetNetClass()->GetName() ) )
92 hiddenNets.insert( net->GetNetCode() );
93 }
94
95 std::map<int, KIGFX::COLOR4D>& netColors = renderSettings->GetNetColorMap();
96 netColors.clear();
97
98 for( const auto& [ netname, color ] : netSettings->m_NetColorAssignments )
99 {
100 if( color != COLOR4D::UNSPECIFIED )
101 {
102 if( NETINFO_ITEM* net = GetBoard()->GetNetInfo().GetNetItem( netname ) )
103 netColors[ net->GetNetCode() ] = color;
104 }
105 }
106
107 std::map<wxString, KIGFX::COLOR4D>& netclassColors = renderSettings->GetNetclassColorMap();
108 netclassColors.clear();
109
110 for( const auto& [ name, netclass ] : netSettings->m_NetClasses )
111 netclassColors[ name ] = netclass->GetPcbColor();
112
115
117 PCB_SELECTION_FILTER_OPTIONS& filterOpts = selTool->GetFilter();
118
119 filterOpts = localSettings.m_PcbSelectionFilter;
121
123 opts.m_ContrastModeDisplay = localSettings.m_ContrastModeDisplay;
124 opts.m_NetColorMode = localSettings.m_NetColorMode;
125 opts.m_TrackOpacity = localSettings.m_TrackOpacity;
126 opts.m_ViaOpacity = localSettings.m_ViaOpacity;
127 opts.m_PadOpacity = localSettings.m_PadOpacity;
128 opts.m_ZoneOpacity = localSettings.m_ZoneOpacity;
129 opts.m_ZoneDisplayMode = localSettings.m_ZoneDisplayMode;
130 opts.m_ImageOpacity = localSettings.m_ImageOpacity;
131 opts.m_FilledShapeOpacity = localSettings.m_ShapeOpacity;
132
133 // No refresh here: callers of LoadProjectSettings refresh later
134 SetDisplayOptions( opts, false );
135
137 bds.m_UseConnectedTrackWidth = localSettings.m_AutoTrackWidth;
138
139 wxFileName fn( GetCurrentFileName() );
140 fn.MakeRelativeTo( Prj().GetProjectPath() );
141 LoadWindowState( fn.GetFullPath() );
142
143 return true;
144}
145
146
148{
149 wxFileName fn = Prj().GetProjectFullName();
150
151 // Check for the filename before checking IsWritable as this
152 // will throw errors on bad names. Here, we just want to not
153 // save the Settings if we don't have a name
154 if( !fn.IsOk() )
155 return;
156
157 if( !fn.IsDirWritable() )
158 return;
159
161
162 // TODO: Can this be pulled out of BASE_SCREEN?
163 project.m_BoardDrawingSheetFile = BASE_SCREEN::m_DrawingSheetFileName;
164
167
169
170 // Save render settings that aren't stored in PCB_DISPLAY_OPTIONS
171
172 std::shared_ptr<NET_SETTINGS>& netSettings = project.NetSettings();
173 const NETINFO_LIST& nets = GetBoard()->GetNetInfo();
175 KIGFX::PCB_RENDER_SETTINGS* renderSettings = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( rs );
176
177 netSettings->m_NetColorAssignments.clear();
178
179 for( const auto& [ netcode, color ] : renderSettings->GetNetColorMap() )
180 {
181 if( NETINFO_ITEM* net = nets.GetNetItem( netcode ) )
182 netSettings->m_NetColorAssignments[ net->GetNetname() ] = color;
183 }
184
185 std::map<wxString, KIGFX::COLOR4D>& netclassColors = renderSettings->GetNetclassColorMap();
186
187 // NOTE: this assumes netclasses will have already been updated, which I think is the case
188 for( const auto& [ name, netclass ] : netSettings->m_NetClasses )
189 {
190 if( netclassColors.count( name ) )
191 netclass->SetPcbColor( netclassColors.at( name ) );
192 }
193
203 if( !Prj().IsNullProject() && fn.Exists() )
205}
206
207
209{
210 wxFileName fn = Prj().GetProjectFullName();
211
212 // Check for the filename before checking IsWritable as this
213 // will throw errors on bad names. Here, we just want to not
214 // save the Settings if we don't have a name
215 if( !fn.IsOk() )
216 return;
217
218 if( !fn.IsDirWritable() )
219 return;
220
221 PROJECT_LOCAL_SETTINGS& localSettings = Prj().GetLocalSettings();
222
223 // Save appearance control settings
224 localSettings.m_ActiveLayer = GetActiveLayer();
226
227 const PCB_DISPLAY_OPTIONS& displayOpts = GetDisplayOptions();
228
229 localSettings.m_ContrastModeDisplay = displayOpts.m_ContrastModeDisplay;
230 localSettings.m_NetColorMode = displayOpts.m_NetColorMode;
231 localSettings.m_TrackOpacity = displayOpts.m_TrackOpacity;
232 localSettings.m_ViaOpacity = displayOpts.m_ViaOpacity;
233 localSettings.m_PadOpacity = displayOpts.m_PadOpacity;
234 localSettings.m_ZoneOpacity = displayOpts.m_ZoneOpacity;
235 localSettings.m_ZoneDisplayMode = displayOpts.m_ZoneDisplayMode;
236 localSettings.m_ImageOpacity = displayOpts.m_ImageOpacity;
237 localSettings.m_ShapeOpacity = displayOpts.m_FilledShapeOpacity;
238
239 // Save Design settings
241 localSettings.m_AutoTrackWidth = bds.m_UseConnectedTrackWidth;
242
243 // Net display settings
244 const NETINFO_LIST& nets = GetBoard()->GetNetInfo();
246 KIGFX::PCB_RENDER_SETTINGS* renderSettings = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( rs );
247
248 localSettings.m_HiddenNets.clear();
249
250 for( int netcode : renderSettings->GetHiddenNets() )
251 {
252 if( NETINFO_ITEM* net = nets.GetNetItem( netcode ) )
253 localSettings.m_HiddenNets.emplace_back( net->GetNetname() );
254 }
255
257 PCB_SELECTION_FILTER_OPTIONS& filterOpts = selTool->GetFilter();
258
259 localSettings.m_PcbSelectionFilter = filterOpts;
260}
int color
Definition: DXF_plotter.cpp:58
const char * name
Definition: DXF_plotter.cpp:57
void SetUserLayerPresets(std::vector< LAYER_PRESET > &aPresetList)
std::vector< LAYER_PRESET > GetUserLayerPresets() const
Update the current layer presets from those saved in the project file.
void SetUserViewports(std::vector< VIEWPORT > &aPresetList)
wxString GetActiveLayerPreset() const
std::vector< VIEWPORT > GetUserViewports() const
Update the current viewports from those saved in the project file.
static wxString m_DrawingSheetFileName
the name of the drawing sheet file, or empty to use the default drawing sheet
Definition: base_screen.h:85
Container for design settings for a BOARD object.
const NETINFO_LIST & GetNetInfo() const
Definition: board.h:864
void RecordDRCExclusions()
Scan existing markers and record data from any that are Excluded.
Definition: board.cpp:327
static DS_DATA_MODEL & GetTheInstance()
static function: returns the instance of DS_DATA_MODEL used in the application
void LoadWindowState(const wxString &aFileName)
void ShowInfoBarError(const wxString &aErrorMsg, bool aShowCloseButton=false, WX_INFOBAR::MESSAGE_TYPE aType=WX_INFOBAR::MESSAGE_TYPE::GENERIC)
Show the WX_INFOBAR displayed on the top of the canvas with a message and an error icon on the left o...
Provide an extensible class to resolve 3D model paths.
bool SetProject(PROJECT *aProject, bool *flgChanged=nullptr)
Set the current KiCad project directory as the first entry in the model path list.
void SetProgramBase(PGM_BASE *aBase)
Set a pointer to the application's PGM_BASE instance used to extract the local env vars.
wxString ResolvePath(const wxString &aFileName, const wxString &aWorkingPath, const EMBEDDED_FILES *aFiles)
Determines the full path of the given file name.
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
PCB specific render settings.
Definition: pcb_painter.h:78
std::set< int > & GetHiddenNets()
Definition: pcb_painter.h:133
std::map< int, KIGFX::COLOR4D > & GetNetColorMap()
Definition: pcb_painter.h:131
std::map< wxString, KIGFX::COLOR4D > & GetNetclassColorMap()
Definition: pcb_painter.h:129
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
Definition: view.h:221
Handle the data for a net.
Definition: netinfo.h:56
Container for NETINFO_ITEM elements, which are the nets.
Definition: netinfo.h:346
NETINFO_ITEM * GetNetItem(int aNetCode) const
void SetCheckboxesFromFilter(PCB_SELECTION_FILTER_OPTIONS &aOptions)
APPEARANCE_CONTROLS * m_appearancePanel
PANEL_SELECTION_FILTER * m_selectionFilterPanel
const PCB_DISPLAY_OPTIONS & GetDisplayOptions() const
Display options control the way tracks, vias, outlines and other things are shown (for instance solid...
virtual PCB_LAYER_ID GetActiveLayer() const
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
BOARD * GetBoard() const
virtual BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Returns the BOARD_DESIGN_SETTINGS for the open project.
void SetDisplayOptions(const PCB_DISPLAY_OPTIONS &aOptions, bool aRefresh=true)
Updates the current display options from the given options struct.
double m_TrackOpacity
Opacity override for all tracks.
double m_FilledShapeOpacity
Opacity override for graphic shapes.
double m_ZoneOpacity
Opacity override for filled zone areas.
double m_ImageOpacity
Opacity override for user images.
double m_PadOpacity
Opacity override for SMD pads and PTHs.
double m_ViaOpacity
Opacity override for all types of via.
HIGH_CONTRAST_MODE m_ContrastModeDisplay
How inactive layers are displayed.
NET_COLOR_MODE m_NetColorMode
How to use color overrides on specific nets and netclasses.
ZONE_DISPLAY_MODE m_ZoneDisplayMode
virtual KIGFX::PCB_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
void LoadDrawingSheet()
Load the drawing sheet file.
void SaveProjectLocalSettings() override
Save changes to the project local settings.
bool LoadProjectSettings()
Load the current project's file configuration settings which are pertinent to this PCB_EDIT_FRAME ins...
wxString GetCurrentFileName() const override
Get the full filename + path of the currently opened file in the frame.
void saveProjectSettings() override
Saves any design-related project settings associated with this frame.
The selection tool: currently supports:
PCB_SELECTION_FILTER_OPTIONS & GetFilter()
Set up handlers for various events.
The backing store for a PROJECT, in JSON format.
Definition: project_file.h:70
The project local settings are things that are attached to a particular project, but also might be pa...
double m_PadOpacity
Opacity override for SMD pads and PTH.
double m_ViaOpacity
Opacity override for all types of via.
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.
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_HiddenNets
A list of netnames that have been manually hidden in the board editor.
std::set< wxString > m_HiddenNetclasses
double m_ImageOpacity
Opacity override for user images.
virtual const wxString GetProjectFullName() const
Return the full path and name of the project.
Definition: project.cpp:129
virtual PROJECT_LOCAL_SETTINGS & GetLocalSettings() const
Definition: project.h:172
virtual PROJECT_FILE & GetProjectFile() const
Definition: project.h:166
virtual bool IsNullProject() const
Check if this project is a null project (i.e.
Definition: project.cpp:153
bool SaveProject(const wxString &aFullPath=wxEmptyString, PROJECT *aProject=nullptr)
Saves a loaded project.
TOOL_MANAGER * GetToolManager() const
Return the MVC controller.
Definition: tools_holder.h:55
static FILENAME_RESOLVER * resolver
Definition: export_idf.cpp:53
PROJECT & Prj()
Definition: kicad.cpp:595
SETTINGS_MANAGER * GetSettingsManager()
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: pgm_base.cpp:1059
see class PGM_BASE
This file contains data structures that are saved in the project file or project local settings file ...