KiCad PCB EDA Suite
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 (C) 2020-2021 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 <sch_sheet_path.h>
25 #include <schematic_settings.h>
26 
27 
28 class BUS_ALIAS;
29 class CONNECTION_GRAPH;
30 class EDA_BASE_FRAME;
31 class ERC_SETTINGS;
32 class PROJECT;
33 class SCH_SCREEN;
34 class SCH_SHEET;
35 class SCH_SHEET_LIST;
36 
37 
39 {
40 public:
42  virtual ~SCHEMATIC_IFACE() {};
43 
44  virtual CONNECTION_GRAPH* ConnectionGraph() const = 0;
45  virtual SCH_SHEET_LIST GetSheets() const = 0;
46  virtual void SetCurrentSheet( const SCH_SHEET_PATH& aPath ) = 0;
47  virtual SCH_SHEET_PATH& CurrentSheet() const = 0;
48  virtual wxString GetFileName() const = 0;
49  virtual PROJECT& Prj() const = 0;
50 };
51 
59 class SCHEMATIC : public SCHEMATIC_IFACE, public EDA_ITEM
60 {
61 public:
62  SCHEMATIC( PROJECT* aPrj );
63 
64  virtual ~SCHEMATIC();
65 
66  virtual wxString GetClass() const override
67  {
68  return wxT( "SCHEMATIC" );
69  }
70 
72  void Reset();
73 
75  PROJECT& Prj() const override
76  {
77  return *m_project;
78  }
79 
80  void SetProject( PROJECT* aPrj );
81 
87  SCH_SHEET_LIST GetSheets() const override
88  {
89  return SCH_SHEET_LIST( m_rootSheet );
90  }
91 
92  SCH_SHEET& Root() const
93  {
94  return *m_rootSheet;
95  }
96 
105  void SetRoot( SCH_SHEET* aRootSheet );
106 
108  bool IsValid() const
109  {
110  return m_rootSheet != nullptr;
111  }
112 
114  SCH_SCREEN* RootScreen() const;
115 
117  wxString GetFileName() const override;
118 
119  SCH_SHEET_PATH& CurrentSheet() const override
120  {
121  return *m_currentSheet;
122  }
123 
124  void SetCurrentSheet( const SCH_SHEET_PATH& aPath ) override
125  {
126  *m_currentSheet = aPath;
127  }
128 
130  {
131  return m_connectionGraph;
132  }
133 
134  SCHEMATIC_SETTINGS& Settings() const;
135 
136  ERC_SETTINGS& ErcSettings() const;
137 
138  std::vector<SCH_MARKER*> ResolveERCExclusions();
139 
144  std::shared_ptr<BUS_ALIAS> GetBusAlias( const wxString& aLabel ) const;
145 
151  std::vector<wxString> GetNetClassAssignmentCandidates();
152 
158  bool ResolveCrossReference( wxString* token, int aDepth ) const;
159 
160  std::map<wxString, std::set<wxString>>& GetPageRefsMap() { return m_labelToPageRefsMap; }
161 
162  wxString ConvertRefsToKIIDs( const wxString& aSource ) const;
163  wxString ConvertKIIDsToRefs( const wxString& aSource ) const;
164 
169 
170 
171 #if defined(DEBUG)
172  void Show( int nestLevel, std::ostream& os ) const override {}
173 #endif
174 
175 private:
176  friend class SCH_EDIT_FRAME;
177 
179 
182 
190 
193 
198  std::map<wxString, std::set<wxString>> m_labelToPageRefsMap;
199 };
200 
201 #endif
std::vector< SCH_MARKER * > ResolveERCExclusions()
Definition: schematic.cpp:141
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
virtual ~SCHEMATIC()
Definition: schematic.cpp:44
virtual wxString GetFileName() const =0
Container for project specific data.
Definition: project.h:62
virtual wxString GetClass() const override
Return the class name.
Definition: schematic.h:66
virtual SCH_SHEET_PATH & CurrentSheet() const =0
Holds all the data relating to one schematic.
Definition: schematic.h:59
CONNECTION_GRAPH * ConnectionGraph() const override
Definition: schematic.h:129
SCH_SHEET_PATH * m_currentSheet
The sheet path of the sheet currently being edited or displayed.
Definition: schematic.h:189
SCHEMATIC(PROJECT *aPrj)
Definition: schematic.cpp:32
Calculates the connectivity of a schematic and generates netlists.
SCHEMATIC_SETTINGS & Settings() const
Definition: schematic.cpp:127
bool IsValid() const
A simple test if the schematic is loaded, not a complete one.
Definition: schematic.h:108
Schematic editor (Eeschema) main window.
virtual CONNECTION_GRAPH * ConnectionGraph() const =0
CONNECTION_GRAPH * m_connectionGraph
Holds and calculates connectivity information of this schematic.
Definition: schematic.h:192
std::map< wxString, std::set< wxString > > m_labelToPageRefsMap
Holds a map of labels to the page numbers that they appear on.
Definition: schematic.h:198
virtual PROJECT & Prj() const =0
void SetRoot(SCH_SHEET *aRootSheet)
Initialize the schematic with a new root sheet.
Definition: schematic.cpp:102
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:180
wxString ConvertRefsToKIIDs(const wxString &aSource) const
Definition: schematic.cpp:245
bool ResolveCrossReference(wxString *token, int aDepth) const
Resolves text vars that refer to other items.
Definition: schematic.cpp:212
PROJECT * m_project
Definition: schematic.h:178
wxString GetFileName() const override
Helper to retrieve the filename from the root sheet screen.
Definition: schematic.cpp:121
Container for ERC settings.
Definition: erc_settings.h:105
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
void SetProject(PROJECT *aPrj)
Definition: schematic.cpp:74
virtual void SetCurrentSheet(const SCH_SHEET_PATH &aPath)=0
SCH_SHEET * m_rootSheet
The top-level sheet in this schematic hierarchy (or potentially the only one)
Definition: schematic.h:181
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
Definition: sch_sheet.h:54
PROJECT & Prj() const override
Return a reference to the project this schematic is part of.
Definition: schematic.h:75
wxString ConvertKIIDsToRefs(const wxString &aSource) const
Definition: schematic.cpp:305
void Reset()
Initialize this schematic to a blank one, unloading anything existing.
Definition: schematic.cpp:51
SCH_SHEET_LIST GetSheets() const override
Builds and returns an updated schematic hierarchy TODO: can this be cached?
Definition: schematic.h:87
SCH_SHEET & Root() const
Definition: schematic.h:92
The base frame for deriving all KiCad main window classes.
void SetCurrentSheet(const SCH_SHEET_PATH &aPath) override
Definition: schematic.h:124
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:150
These settings were stored in SCH_BASE_FRAME previously.
std::map< wxString, std::set< wxString > > & GetPageRefsMap()
Definition: schematic.h:160
ERC_SETTINGS & ErcSettings() const
Definition: schematic.cpp:134
SCH_SCREEN * RootScreen() const
Helper to retrieve the screen of the root sheet.
Definition: schematic.cpp:115
SCH_SHEET_PATH & CurrentSheet() const override
Definition: schematic.h:119
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
std::vector< wxString > GetNetClassAssignmentCandidates()
Return a list of name candidates for netclass assignment.
Definition: schematic.cpp:195
virtual SCH_SHEET_LIST GetSheets() const =0
SCH_SHEET_LIST & GetFullHierarchy() const
Return the full schematic flattened hierarchical sheet list.
Definition: schematic.cpp:356
virtual ~SCHEMATIC_IFACE()
Definition: schematic.h:42