KiCad PCB EDA Suite
Loading...
Searching...
No Matches
eeschema_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) 2014-2023 KiCad Developers, see AUTHORS.txt for contributors.
5 *
6 * This program is free software: you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation, either version 3 of the License, or (at your
9 * option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along
17 * with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include <mutex>
21#include <wx/ffile.h>
22
23#include <symbol_library.h>
24#include <confirm.h>
26#include <kiway.h>
27#include <symbol_edit_frame.h>
29#include <pgm_base.h>
33#include <sch_edit_frame.h>
34#include <sch_painter.h>
35#include <schematic.h>
44#include <zoom_defines.h>
45#include <sim/spice_settings.h>
46#include <tool/tool_manager.h>
48
49
52{
53 return Pgm().GetSettingsManager().GetColorSettings()->GetColor( aLayer );
54}
55
56
58{
61
66
69
71
72 // Load the drawing sheet from the filename stored in BASE_SCREEN::m_DrawingSheetFileName.
73 // If empty, or not existing, the default drawing sheet is loaded.
75 Prj().GetProjectPath() );
76
77 if( !DS_DATA_MODEL::GetTheInstance().LoadDrawingSheet( filename ) )
78 ShowInfoBarError( _( "Error loading drawing sheet." ), true );
79
80 PROJECT_LOCAL_SETTINGS& localSettings = Prj().GetLocalSettings();
81
83 selTool->GetFilter() = localSettings.m_SchSelectionFilter;
85
86 return true;
87}
88
89
90void SCH_EDIT_FRAME::ShowSchematicSetupDialog( const wxString& aInitialPage )
91{
92 SCH_SCREENS screens( Schematic().Root() );
93 std::vector<std::shared_ptr<BUS_ALIAS>> oldAliases;
94
95 for( SCH_SCREEN* screen = screens.GetFirst(); screen != nullptr; screen = screens.GetNext() )
96 {
97 for( const std::shared_ptr<BUS_ALIAS>& alias : screen->GetBusAliases() )
98 oldAliases.push_back( alias );
99 }
100
101 DIALOG_SCHEMATIC_SETUP dlg( this );
102
103 if( !aInitialPage.IsEmpty() )
104 dlg.SetInitialPage( aInitialPage, wxEmptyString );
105
106 // TODO: is QuasiModal required here?
107 if( dlg.ShowQuasiModal() == wxID_OK )
108 {
109 // Mark document as modified so that project settings can be saved as part of doc save
110 OnModify();
111
112 Kiway().CommonSettingsChanged( false, true );
113
116
117 GetRenderSettings()->SetDefaultPenWidth( Schematic().Settings().m_DefaultLineWidth );
121
122 GetRenderSettings()->SetDashLengthRatio( Schematic().Settings().m_DashedLineDashRatio );
123 GetRenderSettings()->SetGapLengthRatio( Schematic().Settings().m_DashedLineGapRatio );
124
127
128 std::vector<std::shared_ptr<BUS_ALIAS>> newAliases;
129
130 for( SCH_SCREEN* screen = screens.GetFirst(); screen != nullptr; screen = screens.GetNext() )
131 {
132 for( const std::shared_ptr<BUS_ALIAS>& alias : screen->GetBusAliases() )
133 newAliases.push_back( alias );
134 }
135
136 if( oldAliases != newAliases )
138
140 GetCanvas()->Refresh();
141 }
142}
143
144
146{
147 std::vector<double>& sizeMultipliers = eeconfig()->m_Drawing.junction_size_mult_list;
148
149 const std::shared_ptr<NET_SETTINGS>& netSettings = Prj().GetProjectFile().NetSettings();
150 int sizeChoice = Schematic().Settings().m_JunctionSizeChoice;
151 int dotSize = netSettings->m_DefaultNetClass->GetWireWidth() * sizeMultipliers[ sizeChoice ];
152
153 return std::max( dotSize, 1 );
154}
155
156
158{
159 wxFileName fn = Schematic().RootScreen()->GetFileName(); //ConfigFileName
160
162
163 if( !fn.HasName() || !IsWritable( fn, false ) )
164 return;
165
167
168 if( Kiway().Player( FRAME_SIMULATOR, false ) )
170
171 // Save the page layout file if doesn't exist yet (e.g. if we opened a non-kicad schematic)
172
173 // TODO: We need to remove dependence on BASE_SCREEN
176
178 {
180 Prj().GetProjectPath() ) );
181
182 bool success = true;
183
184 if( !layoutfn.IsAbsolute() )
185 success = layoutfn.MakeAbsolute( Prj().GetProjectPath() );
186
187 if( success && layoutfn.IsOk() && !layoutfn.FileExists() )
188 {
189 if( layoutfn.DirExists() && layoutfn.IsDirWritable() )
190 DS_DATA_MODEL::GetTheInstance().Save( layoutfn.GetFullPath() );
191 }
192 }
193
194 GetSettingsManager()->SaveProject( fn.GetFullPath() );
195}
196
197
199{
200 if( m_schematic )
202
203 PROJECT_LOCAL_SETTINGS& localSettings = Prj().GetLocalSettings();
205
206 localSettings.m_SchSelectionFilter = selTool->GetFilter();
207}
208
209
211{
212 // For now, axes are forced off in Eeschema even if turned on in config
214 cfg->m_Window.grid.axes_enabled = false;
215
217
218 SCH_SEARCH_DATA* searchData = dynamic_cast<SCH_SEARCH_DATA*>( m_findReplaceData.get() );
219
220 if( searchData )
221 {
227 }
228
230
234}
235
236
238{
241 wxAuiPaneInfo& hierarchy_pane = m_auimgr.GetPane( SchematicHierarchyPaneName() );
242
243 if( cfg )
244 {
245 cfg->m_System.units = static_cast<int>( GetUserUnits() );
246 cfg->m_AuiPanels.show_schematic_hierarchy = hierarchy_pane.IsShown();
247 cfg->m_AuiPanels.schematic_hierarchy_float = hierarchy_pane.IsFloating();
248
249 // Other parameters (hierarchy_panel_float_width, hierarchy_panel_float_height,
250 // and hierarchy_panel_docked_width should have been updated when resizing the
251 // hierarchy panel
252
253 SCH_SEARCH_DATA* searchData = dynamic_cast<SCH_SEARCH_DATA*>( m_findReplaceData.get() );
254
255 if( searchData )
256 {
261 searchData->searchCurrentSheetOnly;
263 }
264
265 wxAuiPaneInfo& searchPaneInfo = m_auimgr.GetPane( SearchPaneName() );
266 m_show_search = searchPaneInfo.IsShown();
268 cfg->m_AuiPanels.search_panel_height = m_searchPane->GetSize().y;
269 cfg->m_AuiPanels.search_panel_width = m_searchPane->GetSize().x;
270 cfg->m_AuiPanels.search_panel_dock_direction = searchPaneInfo.dock_direction;
271
272 wxAuiPaneInfo& propertiesPane = m_auimgr.GetPane( PropertiesPaneName() );
273 cfg->m_AuiPanels.show_properties = propertiesPane.IsShown();
276
277 wxAuiPaneInfo& netNavigatorPane = m_auimgr.GetPane( NetNavigatorPaneName() );
278 cfg->m_AuiPanels.show_net_nav_panel = netNavigatorPane.IsShown();
279 cfg->m_AuiPanels.float_net_nav_panel = netNavigatorPane.IsFloating();
280
281 if( netNavigatorPane.IsDocked() )
283 else
284 {
285 cfg->m_AuiPanels.net_nav_panel_float_pos = netNavigatorPane.floating_pos;
286 cfg->m_AuiPanels.net_nav_panel_float_size = netNavigatorPane.floating_size;
287 }
288 }
289}
290
291
293{
294 wxCHECK_RET( aCfg, "Call to SCH_BASE_FRAME::LoadSettings with null settings" );
295
297
298 if( aCfg->m_Window.grid.grids.empty() )
299 aCfg->m_Window.grid.grids = aCfg->DefaultGridSizeList();
300
301 // Move legacy user grids to grid list
302 if( !aCfg->m_Window.grid.user_grid_x.empty() )
303 {
304 aCfg->m_Window.grid.grids.emplace_back( GRID{ "User Grid", aCfg->m_Window.grid.user_grid_x,
305 aCfg->m_Window.grid.user_grid_y } );
306 aCfg->m_Window.grid.user_grid_x = wxEmptyString;
307 aCfg->m_Window.grid.user_grid_y = wxEmptyString;
308 }
309
310 if( aCfg->m_Window.grid.last_size_idx > (int) aCfg->m_Window.grid.grids.size() )
311 aCfg->m_Window.grid.last_size_idx = 1;
312
313 if( aCfg->m_Window.grid.fast_grid_1 > (int) aCfg->m_Window.grid.grids.size() )
314 aCfg->m_Window.grid.fast_grid_1 = 1;
315
316 if( aCfg->m_Window.grid.fast_grid_2 > (int) aCfg->m_Window.grid.grids.size() )
317 aCfg->m_Window.grid.fast_grid_2 = 2;
318
319 if( aCfg->m_Window.zoom_factors.empty() )
320 {
322 }
323}
324
325
327{
328 wxCHECK_RET( aCfg, wxS( "Call to SCH_BASE_FRAME::SaveSettings with null settings" ) );
329
331}
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:92
WINDOW_SETTINGS m_Window
Definition: app_settings.h:170
const std::vector< GRID > DefaultGridSizeList() const
static wxString m_DrawingSheetFileName
the name of the drawing sheet file, or empty to use the default drawing sheet
Definition: base_screen.h:85
COLOR4D GetColor(int aLayer) const
int ShowQuasiModal()
static DS_DATA_MODEL & GetTheInstance()
static function: returns the instance of DS_DATA_MODEL used in the application
void Save(const wxString &aFullFileName)
Save the description in a file.
static const wxString ResolvePath(const wxString &aPath, const wxString &aProjectPath)
Resolve a path which might be project-relative or contain env variable references.
SETTINGS_MANAGER * GetSettingsManager() const
wxAuiManager m_auimgr
bool IsWritable(const wxFileName &aFileName, bool aVerbose=true)
Checks if aFileName can be written.
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...
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
static const wxString PropertiesPaneName()
SEARCH_PANE * m_searchPane
std::unique_ptr< EDA_SEARCH_DATA > m_findReplaceData
PROPERTIES_PANEL * m_propertiesPanel
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
FIND_REPLACE_EXTRA m_FindReplaceExtra
SCH_SELECTION_FILTER_OPTIONS & GetFilter()
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
void SetDefaultPenWidth(int aWidth)
void SetDefaultFont(const wxString &aFont)
void SetGapLengthRatio(double aRatio)
void SetDashLengthRatio(double aRatio)
void UpdateAllItems(int aUpdateFlags)
Update all items in the view according to the given flags.
Definition: view.cpp:1521
void MarkDirty()
Force redraw of view on the next rendering.
Definition: view.h:643
virtual void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged)
Call CommonSettingsChanged() on all KIWAY_PLAYERs.
Definition: kiway.cpp:617
void SetInitialPage(const wxString &aPage, const wxString &aParentPage=wxEmptyString)
void SetCheckboxesFromFilter(SCH_SELECTION_FILTER_OPTIONS &aOptions)
virtual SETTINGS_MANAGER & GetSettingsManager() const
Definition: pgm_base.h:142
SCHEMATIC_SETTINGS * m_SchematicSettings
Definition: project_file.h:135
std::shared_ptr< NET_SETTINGS > & NetSettings()
Definition: project_file.h:101
The project local settings are things that are attached to a particular project, but also might be pa...
SCH_SELECTION_FILTER_OPTIONS m_SchSelectionFilter
virtual PROJECT_LOCAL_SETTINGS & GetLocalSettings() const
Definition: project.h:172
void IncrementNetclassesTicker()
Definition: project.h:98
virtual PROJECT_FILE & GetProjectFile() const
Definition: project.h:166
void IncrementTextVarsTicker()
Definition: project.h:95
float SplitterProportion() const
These settings were stored in SCH_BASE_FRAME previously.
wxString m_SchDrawingSheetFileName
std::shared_ptr< NGSPICE_SETTINGS > m_NgspiceSettings
Ngspice simulator settings.
SCHEMATIC_SETTINGS & Settings() const
Definition: schematic.cpp:287
void RecordERCExclusions()
Scan existing markers and record data from any that are Excluded.
Definition: schematic.cpp:798
SCH_SCREEN * RootScreen() const
Helper to retrieve the screen of the root sheet.
Definition: schematic.cpp:197
SCH_RENDER_SETTINGS * GetRenderSettings()
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
EESCHEMA_SETTINGS * eeconfig() const
PANEL_SCH_SELECTION_FILTER * m_selectionFilterPanel
KIGFX::SCH_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
void ShowSchematicSetupDialog(const wxString &aInitialPage=wxEmptyString)
void RefreshOperatingPointDisplay()
Refresh the display of any operaintg points.
wxTreeCtrl * m_netNavigator
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag and update other data struc...
void SaveProjectLocalSettings() override
Save changes to the project settings to the project (.pro) file.
SCHEMATIC * m_schematic
The currently loaded schematic.
SCHEMATIC & Schematic() const
bool LoadProjectSettings()
Load the KiCad project file (*.pro) settings specific to Eeschema.
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
static const wxString SearchPaneName()
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
void RecalculateConnections(SCH_COMMIT *aCommit, SCH_CLEANUP_FLAGS aCleanupFlags)
Generate the connection data for the entire schematic hierarchy.
static const wxString SchematicHierarchyPaneName()
int GetSchematicJunctionSize()
static const wxString NetNavigatorPaneName()
void saveProjectSettings() override
Saves any design-related project settings associated with this frame.
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
Definition: sch_screen.h:704
SCH_SCREEN * GetNext()
SCH_SCREEN * GetFirst()
const wxString & GetFileName() const
Definition: sch_screen.h:144
COLOR_SETTINGS * GetColorSettings(const wxString &aName="user")
Retrieves a color settings object that applications can read colors from.
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
This file is part of the common library.
#define _(s)
COLOR4D GetLayerColor(SCH_LAYER_ID aLayer)
Helper for all the old plotting/printing code while it still exists.
@ FRAME_SIMULATOR
Definition: frame_type.h:38
static const std::string ProjectFileExtension
PROJECT & Prj()
Definition: kicad.cpp:595
SCH_LAYER_ID
Eeschema drawing layers.
Definition: layer_ids.h:353
@ REPAINT
Item needs to be redrawn.
Definition: view_item.h:57
int GetUserUnits()
Return the currently selected user unit value for the interface.
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: pgm_base.cpp:1059
see class PGM_BASE
@ GLOBAL_CLEANUP
KIWAY Kiway(KFCTL_STANDALONE)
std::vector< double > junction_size_mult_list
wxString user_grid_x
Definition: grid_settings.h:67
std::vector< GRID > grids
Definition: grid_settings.h:66
wxString user_grid_y
Definition: grid_settings.h:68
Common grid settings, available to every frame.
Definition: grid_settings.h:34
GRID_SETTINGS grid
Definition: app_settings.h:81
std::vector< double > zoom_factors
Definition: app_settings.h:78
Definition for symbol library class.
Definition of file extensions used in Kicad.
#define ZOOM_LIST_EESCHEMA
Definition: zoom_defines.h:41