KiCad PCB EDA Suite
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-2020 KiCad Developers, see AUTHORS.txt for contributors.
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, you may find one here:
18  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19  * or you may search the http://www.gnu.org website for the version 2 license,
20  * or you may write to the Free Software Foundation, Inc.,
21  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22  */
23 
24 #include <mutex>
25 
26 #include <class_library.h>
27 #include <confirm.h>
35 #include <kiway.h>
36 #include <symbol_edit_frame.h>
38 #include <panel_hotkeys_editor.h>
39 #include <pgm_base.h>
40 #include <project/project_file.h>
41 #include <project/net_settings.h>
42 #include <sch_edit_frame.h>
43 #include <sch_painter.h>
44 #include <schematic.h>
45 #include <settings/app_settings.h>
47 #include <symbol_lib_table.h>
48 #include <widgets/paged_dialog.h>
51 #include <zoom_defines.h>
52 
53 
56 {
57  return Pgm().GetSettingsManager().GetColorSettings()->GetColor( aLayer );
58 }
59 
60 
62  PANEL_HOTKEYS_EDITOR* aHotkeysPanel )
63 {
64  wxTreebook* book = aParent->GetTreebook();
65 
66  book->AddPage( new wxPanel( book ), _( "Schematic Editor" ) );
67  book->AddSubPage( new PANEL_EESCHEMA_DISPLAY_OPTIONS( this, book ), _( "Display Options" ) );
68  book->AddSubPage( new PANEL_EESCHEMA_EDITING_OPTIONS( this, book ), _( "Editing Options" ) );
69  book->AddSubPage( new PANEL_EESCHEMA_COLOR_SETTINGS( this, book ), _( "Colors" ) );
70  book->AddSubPage( new PANEL_EESCHEMA_TEMPLATE_FIELDNAMES( this, book, true ),
71  _( "Field Name Templates" ) );
72 
73  aHotkeysPanel->AddHotKeys( GetToolManager() );
74 }
75 
76 
78 {
85 
86  // Verify some values, because the config file can be edited by hand,
87  // and have bad values:
90 
91  // Load the drawing sheet description file, from the filename stored in
92  // BASE_SCREEN::m_PageLayoutDescrFileName, read in config project file
93  // If empty, or not existing, the default descr is loaded
95  Prj().GetProjectPath() );
96 
97  if( !DS_DATA_MODEL::GetTheInstance().LoadDrawingSheet( filename ) )
98  {
99  ShowInfoBarError( _( "Error loading drawing sheet" ), true );
100  }
101 
102  return true;
103 }
104 
105 
106 void SCH_EDIT_FRAME::ShowSchematicSetupDialog( const wxString& aInitialPage )
107 {
108  DIALOG_SCHEMATIC_SETUP dlg( this );
109 
110  if( !aInitialPage.IsEmpty() )
111  dlg.SetInitialPage( aInitialPage, wxEmptyString );
112 
113  if( dlg.ShowQuasiModal() == wxID_OK )
114  {
117 
118  Kiway().CommonSettingsChanged( false, true );
119  GetCanvas()->Refresh();
120  }
121 }
122 
123 
125 {
126  wxFileName fn = Schematic().RootScreen()->GetFileName(); //ConfigFileName
127 
128  fn.SetExt( ProjectFileExtension );
129 
130  if( !fn.HasName() || !IsWritable( fn ) )
131  return;
132 
134 
135  GetSettingsManager()->SaveProject( fn.GetFullPath() );
136 }
137 
138 
140 {
141  // For now, axes are forced off in eeschema even if turned on in config
142  eeconfig()->m_Window.grid.axes_enabled = false;
143 
145 
152 
153  if( eeconfig() )
154  {
157  GetRenderSettings()->SetShowPageLimits( eeconfig()->m_Appearance.show_page_limits );
158  }
159 }
160 
161 
163 {
165 
166  // TODO(JE) do we need to keep m_userUnits around?
167  if( eeconfig() )
168  eeconfig()->m_System.units = static_cast<int>( m_userUnits );
169 }
170 
171 
173 {
174  wxCHECK_RET( aCfg, "Call to SCH_BASE_FRAME::SaveSettings with null settings" );
175 
177 
178  // Currently values read from config file are not used because the user cannot
179  // change this config
180  // if( aCfg->m_Window.grid.sizes.empty() ) // Will be probably never enabled
181  {
182  /*
183  * Do NOT add others values (mainly grid values in mm), because they can break the
184  * schematic: Because wires and pins are considered as connected when the are to the
185  * same coordinate we cannot mix coordinates in mils (internal units) and mm (that
186  * cannot exactly converted in mils in many cases). In fact schematic must only use
187  * 50 and 25 mils to place labels, wires and components others values are useful only
188  * for graphic items (mainly in library editor) so use integer values in mils only.
189  * The 100 mil grid is added to help conform to the KiCad Library Convention which
190  * states: "Using a 100mil grid, pin ends and origin must lie on grid nodes IEC-60617"
191  */
192  aCfg->m_Window.grid.sizes = { "100 mil",
193  "50 mil",
194  "25 mil",
195  "10 mil",
196  "5 mil",
197  "2 mil",
198  "1 mil" };
199  }
200 
201  // Currently values read from config file are not used because the user cannot
202  // change this config
203  // if( aCfg->m_Window.zoom_factors.empty() )
204  {
206  }
207 }
208 
209 
211 {
212  wxCHECK_RET( aCfg, "Call to SCH_BASE_FRAME::SaveSettings with null settings" );
213 
215 }
216 
217 
219  PANEL_HOTKEYS_EDITOR* aHotkeysPanel )
220 {
221  wxTreebook* book = aParent->GetTreebook();
222 
223  book->AddPage( new wxPanel( book ), _( "Symbol Editor" ) );
224  book->AddSubPage( new PANEL_GAL_DISPLAY_OPTIONS( this, aParent ), _( "Display Options" ) );
225  book->AddSubPage( new PANEL_SYM_EDITING_OPTIONS( this, book ), _( "Editing Options" ) );
226  book->AddSubPage( new PANEL_SYM_COLOR_SETTINGS( this, book ), _( "Colors" ) );
227 
228  aHotkeysPanel->AddHotKeys( GetToolManager() );
229 }
230 
231 
232 static std::mutex s_symbolTableMutex;
233 
234 
235 SYMBOL_LIB_TABLE* PROJECT::SchSymbolLibTable()
236 {
237  std::lock_guard<std::mutex> lock( s_symbolTableMutex );
238 
239  // This is a lazy loading function, it loads the project specific table when
240  // that table is asked for, not before.
242 
243  // its gotta be NULL or a SYMBOL_LIB_TABLE, or a bug.
244  wxASSERT( !tbl || tbl->Type() == SYMBOL_LIB_TABLE_T );
245 
246  if( !tbl )
247  {
248  // Stack the project specific SYMBOL_LIB_TABLE overlay on top of the global table.
249  // ~SYMBOL_LIB_TABLE() will not touch the fallback table, so multiple projects may
250  // stack this way, all using the same global fallback table.
252 
254 
255  wxString prjPath;
256 
257  wxGetEnv( PROJECT_VAR_NAME, &prjPath );
258 
259  if( !prjPath.IsEmpty() )
260  {
261  wxFileName fn( prjPath, SYMBOL_LIB_TABLE::GetSymbolLibTableFileName() );
262 
263  try
264  {
265  tbl->Load( fn.GetFullPath() );
266  }
267  catch( const IO_ERROR& ioe )
268  {
269  wxString msg;
270  msg.Printf( _( "An error occurred loading the symbol library table \"%s\"." ),
271  fn.GetFullPath() );
272  DisplayErrorMessage( NULL, msg, ioe.What() );
273  }
274  }
275  }
276 
277  return tbl;
278 }
static const wxString & GetSymbolLibTableFileName()
static SYMBOL_LIB_TABLE & GetGlobalLibTable()
const wxString & GetFileName() const
Definition: sch_screen.h:133
KIWAY & Kiway() const
Return a reference to the KIWAY that this object has an opportunity to participate in.
Definition: kiway_holder.h:56
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
Definition: confirm.cpp:265
SETTINGS_MANAGER * GetSettingsManager() const
void SaveProjectSettings() override
Save changes to the project settings to the project (.pro) file.
This file is part of the common library.
const std::string ProjectFileExtension
void SetInitialPage(const wxString &aPage, const wxString &aParentPage=wxEmptyString)
virtual PROJECT_FILE & GetProjectFile() const
Definition: project.h:145
#define PROJECT_VAR_NAME
A variable name whose value holds the current project directory.
Definition: project.h:38
NET_SETTINGS & NetSettings()
Definition: project_file.h:94
KIGFX::SCH_RENDER_SETTINGS * GetRenderSettings()
void AddHotKeys(TOOL_MANAGER *aToolMgr)
virtual _ELEM * GetElem(ELEM_T aIndex)
Get and set the elements for this project.
Definition: project.cpp:247
bool IsWritable(const wxFileName &aFileName)
Checks if aFileName can be written.
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:106
std::vector< double > zoom_factors
Definition: app_settings.h:86
virtual void SetElem(ELEM_T aIndex, _ELEM *aElem)
Definition: project.cpp:259
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
static wxString m_PageLayoutDescrFileName
the name of the page layout descr file, or emty to used the default pagelayout
Definition: base_screen.h:89
EESCHEMA_SETTINGS * eeconfig() const
wxTreebook * GetTreebook()
Definition: paged_dialog.h:52
static int GetSubpartIdSeparator()
Definition: lib_symbol.h:510
static DS_DATA_MODEL & GetTheInstance()
static function: returns the instance of DS_DATA_MODEL used in the application
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
std::vector< wxString > sizes
Definition: app_settings.h:52
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:99
#define NULL
virtual const wxString What() const
A composite of Problem() and Where()
Definition: exceptions.cpp:29
KICAD_T Type() override
static int GetSubpartFirstId()
Definition: lib_symbol.h:516
GRID_SETTINGS grid
Definition: app_settings.h:89
int ShowQuasiModal()
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
void ResolveNetClassAssignments(bool aRebuildFromScratch=false)
Explodes the list of netclass assignments to include atomic members of composite labels (buses).
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
SCHEMATIC & Schematic() const
Definition of file extensions used in Kicad.
COLOR4D GetLayerColor(SCH_LAYER_ID aLayer)
Helper for all the old plotting/printing code while it still exists.
SCH_LAYER_ID
Eeschema drawing layers.
#define ZOOM_LIST_EESCHEMA
Definition: zoom_defines.h:38
SCHEMATIC_SETTINGS * m_defaults
void Load(const wxString &aFileName)
Load the library table using the path defined by aFileName aFallBackTable.
void InstallPreferences(PAGED_DIALOG *aParent, PANEL_HOTKEYS_EDITOR *aHotkeysPanel) override
Allow the symbol editor to install its preferences panel into the preferences dialog.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=NULL) override
Update the board display after modifying it by a python script (note: it is automatically called by a...
bool LoadProjectSettings()
Load the KiCad project file (*.pro) settings specific to Eeschema.
WINDOW_SETTINGS m_Window
Definition: app_settings.h:181
see class PGM_BASE
void InstallPreferences(PAGED_DIALOG *aParent, PANEL_HOTKEYS_EDITOR *aHotkeysPanel) override
Allow Eeschema to install its preferences panels into the preferences dialog.
static std::mutex s_symbolTableMutex
#define _(s)
Definition: 3d_actions.cpp:33
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
static void SetSubpartIdNotation(int aSep, int aFirstId)
Set the separator char between the subpart id and the reference 0 (no separator) or '.
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
static const wxString MakeFullFileName(const wxString &aShortFileName, const wxString &aProjectPath)
bool SaveProject(const wxString &aFullPath=wxEmptyString)
Saves a loaded project.
EDA_UNITS m_userUnits
Map containing the UI update handlers registered with wx for each action.
void ShowInfoBarError(const wxString &aErrorMsg, bool aShowCloseButton=false)
Show the WX_INFOBAR displayed on the top of the canvas with a message and an error icon on the left o...
virtual void CommonSettingsChanged(bool aEnvVarsChanged, bool aTextVarsChanged)
Call CommonSettingsChanged() on all KIWAY_PLAYERs.
Definition: kiway.cpp:538
TOOL_MANAGER * GetToolManager() const
Return the MVC controller.
Definition: tools_holder.h:55
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
Definition for part library class.
SCH_SCREEN * RootScreen() const
Helper to retrieve the screen of the root sheet.
Definition: schematic.cpp:117
void LoadSettings(APP_SETTINGS_BASE *aCfg) override
Load common frame parameters from a configuration file.
void SetDefaultPenWidth(int aWidth)
void ShowSchematicSetupDialog(const wxString &aInitialPage=wxEmptyString)
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
Definition: ki_exception.h:75
void RecordERCExclusions()
Scan existing markers and record data from any that are Excluded.
void SetShowPageLimits(bool aDraw)
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:98