KiCad PCB EDA Suite
Loading...
Searching...
No Matches
schematic.h
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 The 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#ifndef KICAD_SCHEMATIC_H
21#define KICAD_SCHEMATIC_H
22
23#include <eda_item.h>
24#include <embedded_files.h>
25#include <sch_sheet_path.h>
26#include <schematic_settings.h>
27
28
29class BUS_ALIAS;
31class EDA_BASE_FRAME;
32class ERC_SETTINGS;
33class PROJECT;
34class SCH_SCREEN;
35class SCH_SHEET;
36class SCH_SHEET_LIST;
37class SCH_GLOBALLABEL;
38
39namespace KIFONT
40{
41class OUTLINE_FONT;
42}
43
44
46{
47public:
49 virtual ~SCHEMATIC_IFACE() {};
50
51 virtual CONNECTION_GRAPH* ConnectionGraph() const = 0;
53 virtual void SetCurrentSheet( const SCH_SHEET_PATH& aPath ) = 0;
54 virtual SCH_SHEET_PATH& CurrentSheet() const = 0;
55 virtual wxString GetFileName() const = 0;
56 virtual PROJECT& Prj() const = 0;
57 virtual SCH_SHEET_LIST Hierarchy() const = 0;
58};
59
60class SCHEMATIC;
61
63{
64public:
66 virtual void OnSchItemsAdded( SCHEMATIC& aSch, std::vector<SCH_ITEM*>& aSchItem ) {}
67 virtual void OnSchItemsRemoved( SCHEMATIC& aSch, std::vector<SCH_ITEM*>& aSchItem ) {}
68 virtual void OnSchItemsChanged( SCHEMATIC& aSch, std::vector<SCH_ITEM*>& aSchItem ) {}
69
70 // This is called when the user changes to a new sheet, not when a sheet is altered.
71 // Sheet alteration events will call OnSchItems*
72 virtual void OnSchSheetChanged( SCHEMATIC& aSch ) {}
73};
74
82class SCHEMATIC : public SCHEMATIC_IFACE, public EDA_ITEM, public EMBEDDED_FILES
83{
84public:
85 SCHEMATIC( PROJECT* aPrj );
86
87 virtual ~SCHEMATIC();
88
89 virtual wxString GetClass() const override
90 {
91 return wxT( "SCHEMATIC" );
92 }
93
95 void Reset();
96
98 PROJECT& Prj() const override { return *m_project; }
99 void SetProject( PROJECT* aPrj );
100
101 const std::map<wxString, wxString>* GetProperties() { return &m_properties; }
102
104 {
105 SCH_SHEET_LIST hierarchy( m_rootSheet );
106
107 hierarchy.SortByPageNumbers();
108
109 return hierarchy;
110 }
111
113 {
114 SCH_SHEET_LIST sheets;
115 sheets.BuildSheetList( m_rootSheet, false );
116 return sheets;
117 }
118
122 SCH_SHEET_LIST Hierarchy() const override;
123
124 void RefreshHierarchy();
125
126 SCH_ITEM* GetItem( const KIID& aID, SCH_SHEET_PATH* aPathOut = nullptr ) const
127 {
128 return BuildUnorderedSheetList().GetItem( aID, aPathOut );
129 }
130
132 {
133 return *m_rootSheet;
134 }
135
144 void SetRoot( SCH_SHEET* aRootSheet );
145
147 bool IsValid() const
148 {
149 return m_rootSheet != nullptr;
150 }
151
153 SCH_SCREEN* RootScreen() const;
154
155 void GetContextualTextVars( wxArrayString* aVars ) const;
156
157 bool ResolveTextVar( const SCH_SHEET_PATH* aSheetPath, wxString* token, int aDepth ) const;
158
160 wxString GetFileName() const override;
161
162 SCH_SHEET_PATH& CurrentSheet() const override
163 {
164 return *m_currentSheet;
165 }
166
167 void SetCurrentSheet( const SCH_SHEET_PATH& aPath ) override
168 {
169 *m_currentSheet = aPath;
170 }
171
173 {
174 return m_connectionGraph;
175 }
176
178
179 ERC_SETTINGS& ErcSettings() const;
180
181 std::vector<SCH_MARKER*> ResolveERCExclusions();
182
184 const EMBEDDED_FILES* GetEmbeddedFiles() const;
185
190 std::shared_ptr<BUS_ALIAS> GetBusAlias( const wxString& aLabel ) const;
191
198 std::set<wxString> GetNetClassAssignmentCandidates();
199
206 bool ResolveCrossReference( wxString* token, int aDepth ) const;
207
208 std::map<wxString, std::set<int>>& GetPageRefsMap() { return m_labelToPageRefsMap; }
209
210 std::map<int, wxString> GetVirtualPageToSheetNamesMap() const;
211 std::map<int, wxString> GetVirtualPageToSheetPagesMap() const;
212
213 wxString ConvertRefsToKIIDs( const wxString& aSource ) const;
214 wxString ConvertKIIDsToRefs( const wxString& aSource ) const;
215
224
237
244
249 void RecomputeIntersheetRefs( const std::function<void( SCH_GLOBALLABEL* )>& aItemCallback );
250
255 {
256 m_operatingPoints.clear();
257 }
258
264 void SetOperatingPoint( const wxString& aSignal, double aValue )
265 {
266 m_operatingPoints[ aSignal ] = aValue;
267 }
268
269 wxString GetOperatingPoint( const wxString& aNetName, int aPrecision, const wxString& aRange );
270
277 void FixupJunctions();
278
282 void RecordERCExclusions();
283
288
293 void OnItemsAdded( std::vector<SCH_ITEM*>& aNewItems );
294
299 void OnItemsRemoved( std::vector<SCH_ITEM*>& aRemovedItems );
300
305 void OnItemsChanged( std::vector<SCH_ITEM*>& aItems );
306
313 void OnSchSheetChanged();
314
324 void AddListener( SCHEMATIC_LISTENER* aListener );
325
331 void RemoveListener( SCHEMATIC_LISTENER* aListener );
332
336 void RemoveAllListeners();
337
341 void EmbedFonts() override;
342
346 std::set<KIFONT::OUTLINE_FONT*> GetFonts() const override;
347
354 std::set<const SCH_SCREEN*> GetSchematicsSharedByMultipleProjects() const;
355
361 bool IsComplexHierarchy() const;
362
367
368#if defined(DEBUG)
369 void Show( int nestLevel, std::ostream& os ) const override {}
370#endif
371
372private:
373 friend class SCH_EDIT_FRAME;
374
375 template <typename Func, typename... Args>
376 void InvokeListeners( Func&& aFunc, Args&&... args )
377 {
378 for( auto&& l : m_listeners )
379 ( l->*aFunc )( std::forward<Args>( args )... );
380 }
381
383
386
395
398
404 std::map<wxString, std::set<int>> m_labelToPageRefsMap;
405
409 std::map<wxString, wxString> m_properties;
410
414 std::map<wxString, double> m_operatingPoints;
415
420
424 std::vector<SCHEMATIC_LISTENER*> m_listeners;
425};
426
427#endif
Calculate the connectivity of a schematic and generates netlists.
The base frame for deriving all KiCad main window classes.
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:89
Container for ERC settings.
Definition: erc_settings.h:135
Definition: kiid.h:49
Container for project specific data.
Definition: project.h:64
virtual void SetCurrentSheet(const SCH_SHEET_PATH &aPath)=0
virtual wxString GetFileName() const =0
virtual CONNECTION_GRAPH * ConnectionGraph() const =0
virtual SCH_SHEET_PATH & CurrentSheet() const =0
virtual SCH_SHEET_LIST BuildSheetListSortedByPageNumbers() const =0
virtual PROJECT & Prj() const =0
virtual ~SCHEMATIC_IFACE()
Definition: schematic.h:49
virtual SCH_SHEET_LIST Hierarchy() const =0
virtual void OnSchItemsRemoved(SCHEMATIC &aSch, std::vector< SCH_ITEM * > &aSchItem)
Definition: schematic.h:67
virtual ~SCHEMATIC_LISTENER()
Definition: schematic.h:65
virtual void OnSchItemsChanged(SCHEMATIC &aSch, std::vector< SCH_ITEM * > &aSchItem)
Definition: schematic.h:68
virtual void OnSchSheetChanged(SCHEMATIC &aSch)
Definition: schematic.h:72
virtual void OnSchItemsAdded(SCHEMATIC &aSch, std::vector< SCH_ITEM * > &aSchItem)
Definition: schematic.h:66
These are loaded from Eeschema settings but then overwritten by the project settings.
Holds all the data relating to one schematic.
Definition: schematic.h:83
void Reset()
Initialize this schematic to a blank one, unloading anything existing.
Definition: schematic.cpp:148
std::set< const SCH_SCREEN * > GetSchematicsSharedByMultipleProjects() const
Return a list of schematic files in the current project that contain instance data for multiple proje...
Definition: schematic.cpp:951
void SetLegacySymbolInstanceData()
Update the symbol value and footprint instance data for legacy designs.
Definition: schematic.cpp:648
void OnItemsAdded(std::vector< SCH_ITEM * > &aNewItems)
Must be used if Add() is used using a BULK_x ADD_MODE to generate a change event for listeners.
Definition: schematic.cpp:795
CONNECTION_GRAPH * m_connectionGraph
Hold and calculate connectivity information of this schematic.
Definition: schematic.h:397
virtual wxString GetClass() const override
Return the class name.
Definition: schematic.h:89
void SetOperatingPoint(const wxString &aSignal, double aValue)
Set operating points from a .op simulation.
Definition: schematic.h:264
SCH_SHEET_LIST m_hierarchy
Cache of the entire schematic hierarchy sorted by sheet page number.
Definition: schematic.h:419
SCH_SHEET_PATH & CurrentSheet() const override
Definition: schematic.h:162
void ResolveERCExclusionsPostUpdate()
Update markers to match recorded exclusions.
Definition: schematic.cpp:870
void RemoveListener(SCHEMATIC_LISTENER *aListener)
Remove the specified listener.
Definition: schematic.cpp:826
bool IsComplexHierarchy() const
Test if the schematic is a complex hierarchy.
Definition: schematic.cpp:986
void OnSchSheetChanged()
Notify the schematic and its listeners that the current sheet has been changed.
Definition: schematic.cpp:813
SCH_SHEET_PATH * m_currentSheet
The sheet path of the sheet currently being edited or displayed.
Definition: schematic.h:394
wxString GetOperatingPoint(const wxString &aNetName, int aPrecision, const wxString &aRange)
Definition: schematic.cpp:747
void OnItemsRemoved(std::vector< SCH_ITEM * > &aRemovedItems)
Must be used if Remove() is used using a BULK_x REMOVE_MODE to generate a change event for listeners.
Definition: schematic.cpp:801
virtual ~SCHEMATIC()
Definition: schematic.cpp:137
std::shared_ptr< BUS_ALIAS > GetBusAlias(const wxString &aLabel) const
Return a pointer to a bus alias object for the given label, or null if one doesn't exist.
Definition: schematic.cpp:418
std::vector< SCH_MARKER * > ResolveERCExclusions()
Definition: schematic.cpp:336
wxString GetFileName() const override
Helper to retrieve the filename from the root sheet screen.
Definition: schematic.cpp:316
void EmbedFonts() override
Embed fonts in the schematic.
Definition: schematic.cpp:932
SCHEMATIC_SETTINGS & Settings() const
Definition: schematic.cpp:322
void ClearOperatingPoints()
Clear operating points from a .op simulation.
Definition: schematic.h:254
CONNECTION_GRAPH * ConnectionGraph() const override
Definition: schematic.h:172
wxString ConvertKIIDsToRefs(const wxString &aSource) const
Definition: schematic.cpp:591
void RecordERCExclusions()
Scan existing markers and record data from any that are Excluded.
Definition: schematic.cpp:844
std::map< wxString, std::set< int > > & GetPageRefsMap()
Definition: schematic.h:208
SCH_SHEET_LIST BuildUnorderedSheetList() const
Definition: schematic.h:112
void SetCurrentSheet(const SCH_SHEET_PATH &aPath) override
Definition: schematic.h:167
void FixupJunctions()
Add junctions to this schematic where required.
Definition: schematic.cpp:767
std::map< wxString, std::set< int > > m_labelToPageRefsMap
Holds a map of labels to the page sequence (virtual page number) that they appear on.
Definition: schematic.h:404
SCH_SHEET_LIST Hierarchy() const override
Return the full schematic flattened hierarchical sheet list.
Definition: schematic.cpp:224
std::set< KIFONT::OUTLINE_FONT * > GetFonts() const override
Get a set of fonts used in the schematic.
Definition: schematic.cpp:899
SCH_ITEM * GetItem(const KIID &aID, SCH_SHEET_PATH *aPathOut=nullptr) const
Definition: schematic.h:126
wxString ConvertRefsToKIIDs(const wxString &aSource) const
Definition: schematic.cpp:521
void SetRoot(SCH_SHEET *aRootSheet)
Initialize the schematic with a new root sheet.
Definition: schematic.cpp:204
void SetProject(PROJECT *aPrj)
Definition: schematic.cpp:174
void AddListener(SCHEMATIC_LISTENER *aListener)
Add a listener to the schematic to receive calls whenever something on the schematic has been modifie...
Definition: schematic.cpp:819
std::map< int, wxString > GetVirtualPageToSheetPagesMap() const
Definition: schematic.cpp:510
EMBEDDED_FILES * GetEmbeddedFiles() override
Definition: schematic.cpp:887
PROJECT * m_project
Definition: schematic.h:382
SCH_SCREEN * RootScreen() const
Helper to retrieve the screen of the root sheet.
Definition: schematic.cpp:218
bool ResolveTextVar(const SCH_SHEET_PATH *aSheetPath, wxString *token, int aDepth) const
Definition: schematic.cpp:263
std::set< wxString > GetNetClassAssignmentCandidates()
Return the set of netname candidates for netclass assignment.
Definition: schematic.cpp:433
void RecomputeIntersheetRefs(const std::function< void(SCH_GLOBALLABEL *)> &aItemCallback)
Update the schematic's page reference map for all global labels, and refresh the labels so that they ...
Definition: schematic.cpp:701
void InvokeListeners(Func &&aFunc, Args &&... args)
Definition: schematic.h:376
bool IsValid() const
A simple test if the schematic is loaded, not a complete one.
Definition: schematic.h:147
static bool m_IsSchematicExists
True if a SCHEMATIC exists, false if not.
Definition: schematic.h:366
void RemoveAllListeners()
Remove all listeners.
Definition: schematic.cpp:838
const std::map< wxString, wxString > * GetProperties()
Definition: schematic.h:101
void GetContextualTextVars(wxArrayString *aVars) const
Definition: schematic.cpp:238
SCH_SHEET & Root() const
Definition: schematic.h:131
std::map< int, wxString > GetVirtualPageToSheetNamesMap() const
Definition: schematic.cpp:494
SCH_SHEET_LIST BuildSheetListSortedByPageNumbers() const override
Definition: schematic.h:103
wxString GetUniqueFilenameForCurrentSheet()
Get the unique file name for the current sheet.
Definition: schematic.cpp:656
void SetSheetNumberAndCount()
Set the m_ScreenNumber and m_NumberOfScreens members for screens.
Definition: schematic.cpp:672
std::vector< SCHEMATIC_LISTENER * > m_listeners
Currently installed listeners.
Definition: schematic.h:424
PROJECT & Prj() const override
Return a reference to the project this schematic is part of.
Definition: schematic.h:98
bool ResolveCrossReference(wxString *token, int aDepth) const
Resolves text vars that refer to other items.
Definition: schematic.cpp:452
std::map< wxString, double > m_operatingPoints
Simulation operating points for text variable substitution.
Definition: schematic.h:414
std::map< wxString, wxString > m_properties
Properties for text variable substitution (and perhaps other uses in future).
Definition: schematic.h:409
ERC_SETTINGS & ErcSettings() const
Definition: schematic.cpp:329
void RefreshHierarchy()
Definition: schematic.cpp:232
void OnItemsChanged(std::vector< SCH_ITEM * > &aItems)
Notify the schematic and its listeners that an item on the schematic has been modified in some way.
Definition: schematic.cpp:807
SCH_SHEET * m_rootSheet
The top-level sheet in this schematic hierarchy (or potentially the only one)
Definition: schematic.h:385
Schematic editor (Eeschema) main window.
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:167
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
SCH_ITEM * GetItem(const KIID &aID, SCH_SHEET_PATH *aPathOut=nullptr) const
Fetch a SCH_ITEM by ID.
void SortByPageNumbers(bool aUpdateVirtualPageNums=true)
Sort the list of sheets by page number.
void BuildSheetList(SCH_SHEET *aSheet, bool aCheckIntegrity)
Build the list of sheets and their sheet path from aSheet.
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
Definition: sch_sheet.h:59
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.