KiCad PCB EDA Suite
Loading...
Searching...
No Matches
sch_edit_frame.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) 2015 Jean-Pierre Charras, jp.charras wanadoo.fr
5 * Copyright (C) 2008 Wayne Stambaugh <[email protected]>
6 * Copyright (C) 2023 CERN (www.cern.ch)
7 * Copyright The 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#ifndef SCH_EDIT_FRAME_H
28#define SCH_EDIT_FRAME_H
29
30#include <stddef.h>
31#include <vector>
32#include <wx/cmndata.h>
33#include <wx/event.h>
34#include <wx/gdicmn.h>
35#include <wx/string.h>
36#include <wx/treectrl.h>
37#include <wx/utils.h>
38
39#include <core/typeinfo.h>
40#include <eda_base_frame.h>
41#include <eeschema_settings.h>
42#include <math/box2.h>
43#include <sch_base_frame.h>
44#include <template_fieldnames.h>
45
46class SCH_ITEM;
47class EDA_ITEM;
48class SCH_LINE;
49class SCH_TEXT;
50class SCH_BITMAP;
51class SCH_SHEET;
52class SCH_SHEET_PATH;
53class SCH_SHEET_PIN;
54class SCH_SYMBOL;
55class SCH_FIELD;
56class SCH_JUNCTION;
57class SCHEMATIC;
58class SCH_COMMIT;
59class DESIGN_BLOCK;
62class DIALOG_ERC;
64class DIALOG_SCH_FIND;
65class RESCUER;
66class HIERARCHY_PANE;
67class API_HANDLER_SCH;
69
70
73{
76};
77
78
80{
84};
85
86
87wxDECLARE_EVENT( EDA_EVT_SCHEMATIC_CHANGING, wxCommandEvent );
88wxDECLARE_EVENT( EDA_EVT_SCHEMATIC_CHANGED, wxCommandEvent );
89
90
94class NET_NAVIGATOR_ITEM_DATA : public wxTreeItemData
95{
96public:
97 NET_NAVIGATOR_ITEM_DATA( const SCH_SHEET_PATH& aSheetPath, const SCH_ITEM* aItem ) :
98 m_sheetPath( aSheetPath ),
99 m_item( aItem )
100 {
101 }
102
104 m_item( nullptr )
105 {
106 }
107
109 const SCH_ITEM* GetItem() const { return m_item; }
110
111 bool operator==( const NET_NAVIGATOR_ITEM_DATA& aRhs ) const
112 {
113 return ( m_sheetPath == aRhs.m_sheetPath ) && ( m_item == aRhs.m_item );
114 }
115
117 {
118 if( this == &aItemData )
119 return *this;
120
121 m_sheetPath = aItemData.m_sheetPath;
122 m_item = aItemData.m_item;
123
124 return *this;
125 }
126
127private:
130};
131
132
137{
138public:
139 SCH_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent );
140 ~SCH_EDIT_FRAME() override;
141
142 SCH_SCREEN* GetScreen() const override;
143
144 SELECTION& GetCurrentSelection() override;
145
146 SCHEMATIC& Schematic() const;
147
148 std::unique_ptr<GRID_HELPER> MakeGridHelper() override;
149
153 bool GetShowAllPins() const override;
154
158 void SaveProjectLocalSettings() override;
159
165 bool LoadProjectSettings();
166
170 void LoadDrawingSheet();
171
172 void ShowSchematicSetupDialog( const wxString& aInitialPage = wxEmptyString );
173
174 void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;
175 void SaveSettings( APP_SETTINGS_BASE* aCfg ) override;
176
177 void CreateScreens();
178 void ReCreateHToolbar() override;
179 void ReCreateVToolbar() override;
180 void ReCreateOptToolbar() override;
181
182 void setupUIConditions() override;
183
189 bool IsContentModified() const override;
190
195 void OnModify() override;
196
197 SEVERITY GetSeverity( int aErrorCode ) const override;
198
202 wxString GetScreenDesc() const override;
203 wxString GetFullScreenDesc() const override;
204
225 void ExecuteRemoteCommand( const char* cmdline ) override;
226
227 void KiwayMailIn( KIWAY_EXPRESS& aEvent ) override;
228
233
237 void AutoRotateItem( SCH_SCREEN* aScreen, SCH_ITEM* aItem );
238
242 void ShowFindReplaceDialog( bool aReplace );
243
247 void UpdateHierarchyNavigator( bool aRefreshNetNavigator = true, bool aClear = false );
248
256
262
263 void ShowFindReplaceStatus( const wxString& aMsg, int aStatusTime );
265
269 void OnFindDialogClose();
270
275
285 void BreakSegment( SCH_COMMIT* aCommit, SCH_LINE* aSegment, const VECTOR2I& aPoint,
286 SCH_LINE** aNewSegment, SCH_SCREEN* aScreen );
287
297 bool BreakSegments( SCH_COMMIT* aCommit, const VECTOR2I& aPoint, SCH_SCREEN* aScreen );
298
307 bool BreakSegmentsOnJunctions( SCH_COMMIT* aCommit, SCH_SCREEN* aScreen );
308
314 void TestDanglingEnds();
315
325 void SendSelectItemsToPcb( const std::vector<EDA_ITEM*>& aItems, bool aForce );
326
332 void SendCrossProbeNetName( const wxString& aNetName );
333
339 void SetCrossProbeConnection( const SCH_CONNECTION* aConnection );
340
345
346 const wxString& GetHighlightedConnection() const
347 {
348 return m_highlightedConn;
349 }
350
351 void SetHighlightedConnection( const wxString& aConnection,
352 const NET_NAVIGATOR_ITEM_DATA* aSelection = nullptr );
353
362 bool ReadyToNetlist( const wxString& aAnnotateMessage );
363
379 bool WriteNetListFile( int aFormat, const wxString& aFullFileName, unsigned aNetlistOptions,
380 REPORTER* aReporter = nullptr );
381
389 void DeleteAnnotation( ANNOTATE_SCOPE_T aAnnotateScope, bool aRecursive, REPORTER& aReporter );
390
415 void AnnotateSymbols( SCH_COMMIT* aCommit, ANNOTATE_SCOPE_T aAnnotateScope,
416 ANNOTATE_ORDER_T aSortOption, ANNOTATE_ALGO_T aAlgoOption,
417 bool aRecursive, int aStartNumber, bool aResetAnnotation,
418 bool aRepairTimestamps, REPORTER& aReporter );
419
436 int CheckAnnotate( ANNOTATION_ERROR_HANDLER aErrorHandler,
437 ANNOTATE_SCOPE_T aAnnotateScope = ANNOTATE_ALL,
438 bool aRecursive = true );
439
446 int ModalAnnotate( const wxString& aMessage );
447
448 // Functions used for hierarchy handling
450
451 void SetCurrentSheet( const SCH_SHEET_PATH& aSheet );
452
453 void UpdateItem( EDA_ITEM* aItem, bool isAddOrDelete = false,
454 bool aUpdateRtree = false ) override;
455
461 void HardRedraw() override;
462
466 void DisplayCurrentSheet();
467
472
479 void OnPageSettingsChange() override;
480
487
488 wxPageSetupDialogData& GetPageSetupData() { return m_pageSetupData; }
489
490 void NewProject();
491 void LoadProject();
492
500 bool SaveProject( bool aSaveAs = false );
501
502 bool OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl = 0 ) override;
503
504 wxString GetCurrentFileName() const override;
505
513 bool AskToSaveChanges();
514
515 SCH_JUNCTION* AddJunction( SCH_COMMIT* aCommit, SCH_SCREEN* aScreen, const VECTOR2I& aPos );
516
524 void SchematicCleanUp( SCH_COMMIT* aCommit, SCH_SCREEN* aScreen = nullptr );
525
535 bool TrimWire( SCH_COMMIT* aCommit, const VECTOR2I& aStart, const VECTOR2I& aEnd );
536
537 void OnOpenPcbnew();
538 void OnOpenCvpcb();
539 void OnUpdatePCB();
540 void OnAnnotate();
541
549 bool CheckSheetForRecursion( SCH_SHEET* aSheet, SCH_SHEET_PATH* aCurrentSheet );
550
562 bool AllowCaseSensitiveFileNameClashes( const wxString& aOldName,
563 const wxString& aSchematicFileName );
564
598 bool EditSheetProperties( SCH_SHEET* aSheet, SCH_SHEET_PATH* aHierarchy,
599 bool* aIsUndoable = nullptr, bool* aClearAnnotationNewItems = nullptr,
600 bool* aUpdateHierarchyNavigator = nullptr,
601 wxString* aSourceSheetFilename = nullptr );
602
603 void InitSheet( SCH_SHEET* aSheet, const wxString& aNewFilename );
604
655 bool LoadSheetFromFile( SCH_SHEET* aSheet, SCH_SHEET_PATH* aCurrentSheet,
656 const wxString& aFileName, bool aSkipRecursionCheck = false,
657 bool aSkipLibCheck = false );
658
664 void DeleteJunction( SCH_COMMIT* aCommit, SCH_ITEM* aItem );
665
666 void FlipBodyStyle( SCH_SYMBOL* aSymbol );
667
668 void SelectUnit( SCH_SYMBOL* aSymbol, int aUnit );
669
670 void SetAltPinFunction( SCH_PIN* aPin, const wxString& aFunction );
671
672 /* Undo - redo */
673
690 void SaveCopyInUndoList( SCH_SCREEN* aScreen, SCH_ITEM* aItemToCopy, UNDO_REDO aTypeCommand,
691 bool aAppend, bool aDirtyConnectivity = true );
692
701 void SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsList, UNDO_REDO aTypeCommand,
702 bool aAppend, bool aDirtyConnectivity = true );
703
710
722 void ClearUndoORRedoList( UNDO_REDO_LIST whichList, int aItemCount = -1 ) override;
723
727 void SaveCopyForRepeatItem( const SCH_ITEM* aItem );
728 void AddCopyForRepeatItem( const SCH_ITEM* aItem );
729
735 const std::vector<std::unique_ptr<SCH_ITEM>>& GetRepeatItems() const
736 {
737 return m_items_to_repeat;
738 }
739
746 {
747 m_items_to_repeat.clear();
748 }
749
750 EDA_ITEM* GetItem( const KIID& aId ) const override;
751
758
765 bool CreateArchiveLibrary( const wxString& aFileName );
766
779 wxString CreateNewDesignBlockLibrary( const wxString& aLibName = wxEmptyString,
780 const wxString& aProposedName = wxEmptyString );
781
788 bool AddDesignBlockLibrary( const wxString& aFilename, DESIGN_BLOCK_LIB_TABLE* aTable );
789
790 void SaveSheetAsDesignBlock( const wxString& aLibraryName, SCH_SHEET_PATH& aSheetPath );
791
792 void SaveSelectionAsDesignBlock( const wxString& aLibraryName );
793
794 bool DeleteDesignBlockLibrary( const wxString& aLibName, bool aConfirm );
795
796 bool DeleteDesignBlockFromLibrary( const LIB_ID& aLibId, bool aConfirm );
797
798 bool EditDesignBlockProperties( const LIB_ID& aLibId );
799
800
810 DESIGN_BLOCK* GetDesignBlock( const LIB_ID& aLibId, bool aUseCacheLib = false,
811 bool aShowErrorMsg = false );
812
814
818 virtual void PrintPage( const RENDER_SETTINGS* aSettings ) override;
819
820 void SetNetListerCommand( const wxString& aCommand ) { m_netListerCommand = aCommand; }
821
825 void DefaultExecFlags() { m_exec_flags = wxEXEC_SYNC; }
826
832 void SetExecFlags( const int aFlags ) { m_exec_flags |= aFlags; }
833
840 void ClearExecFlags( const int aFlags ) { m_exec_flags &= ~( aFlags ); }
841
842 wxString GetNetListerCommand() const { return m_netListerCommand; }
843
847 void RecalculateConnections( SCH_COMMIT* aCommit, SCH_CLEANUP_FLAGS aCleanupFlags );
848
852 void CommonSettingsChanged( int aFlags ) override;
853
855
856 void ShowChangedLanguage() override;
857
858 void SetScreen( BASE_SCREEN* aScreen ) override;
859
860 const BOX2I GetDocumentExtents( bool aIncludeAllVisible = true ) const override;
861
863
864 void FocusOnItem( SCH_ITEM* aItem );
865
867
876 void SaveSymbolToSchematic( const LIB_SYMBOL& aSymbol, const KIID& aSchematicSymbolUUID );
877
883
884 void ShowAllIntersheetRefs( bool aShow );
885
892 virtual void CheckForAutoSaveFile( const wxFileName& aFileName ) override;
893
894 virtual void DeleteAutoSaveFile( const wxFileName& aFileName ) override;
895
900
904 void ToggleSearch();
905
906 void ToggleProperties() override;
907
908 void ToggleLibraryTree() override;
909
911
913
915
916 wxTreeCtrl* GetNetNavigator() { return m_netNavigator; }
917
919
923 static const wxString SchematicHierarchyPaneName()
924 {
925 return wxT( "SchematicHierarchy" );
926 }
927
931 static const wxString SearchPaneName() { return wxT( "Search" ); }
932
942 void AddSchematicChangeListener( wxEvtHandler* aListener );
943
947 void RemoveSchematicChangeListener( wxEvtHandler* aListener );
948
949 static const wxString NetNavigatorPaneName()
950 {
951 return wxS( "NetNavigator" );
952 }
953
954 void RefreshNetNavigator( const NET_NAVIGATOR_ITEM_DATA* aSelection = nullptr );
955
956 void MakeNetNavigatorNode( const wxString& aNetName, wxTreeItemId aParentId,
957 const NET_NAVIGATOR_ITEM_DATA* aSelection,
958 bool aSingleSheetSchematic );
959
960 void SelectNetNavigatorItem( const NET_NAVIGATOR_ITEM_DATA* aSelection = nullptr );
961
962 void ToggleNetNavigator();
963
965 {
966 return PLUGIN_ACTION_SCOPE::SCHEMATIC;
967 }
968
969 DECLARE_EVENT_TABLE()
970
971protected:
977 bool doAutoSave() override;
978
979 void doReCreateMenuBar() override;
980
984 void sendNetlistToCvpcb();
985
986 void onSize( wxSizeEvent& aEvent );
987
988 void saveProjectSettings() override;
989
990 void onCloseSymbolDiffDialog( wxCommandEvent& aEvent );
991
992 void onCloseErcDialog( wxCommandEvent& aEvent );
993
994 void onCloseSymbolFieldsTableDialog( wxCommandEvent& aEvent );
995
996 void unitsChangeRefresh() override;
997
998 void updateSelectionFilterVisbility() override;
999
1000#ifdef KICAD_IPC_API
1001 void onPluginAvailabilityChanged( wxCommandEvent& aEvt );
1002#endif
1003
1009 DESIGN_BLOCK_LIB_TABLE* selectDesignBlockLibTable( bool aOptional = false );
1010
1015 wxString createNewDesignBlockLibrary( const wxString& aLibName, const wxString& aProposedName,
1016 DESIGN_BLOCK_LIB_TABLE* aTable );
1017
1018private:
1019 // Called when resizing the Hierarchy Navigator panel
1020 void OnResizeHierarchyNavigator( wxSizeEvent& aEvent );
1021
1022 void onResizeNetNavigator( wxSizeEvent& aEvent );
1023
1024 // Sets up the tool framework
1025 void setupTools();
1026
1027 void OnExit( wxCommandEvent& event );
1028
1029 void OnLoadFile( wxCommandEvent& event );
1030 void OnImportProject( wxCommandEvent& event );
1031
1032 void OnClearFileHistory( wxCommandEvent& aEvent );
1033
1034 bool canCloseWindow( wxCloseEvent& aCloseEvent ) override;
1035 void doCloseWindow() override;
1036
1045 void updateTitle();
1046
1050 void initScreenZoom();
1051
1061
1068 bool importFile( const wxString& aFileName, int aFileType,
1069 const std::map<std::string, UTF8>* aProperties = nullptr );
1070
1078 bool saveSchematicFile( SCH_SHEET* aSheet, const wxString& aSavePath );
1079
1085 void mapExistingAnnotation( std::map<wxString, wxString>& aMap );
1086
1087 bool updateAutoSaveFile();
1088
1089 const wxString& getAutoSaveFileName() const;
1090
1091 wxTreeCtrl* createHighlightedNetNavigator();
1092
1093 void onNetNavigatorSelection( wxTreeEvent& aEvent );
1094
1095 void onNetNavigatorSelChanging( wxTreeEvent& aEvent );
1096
1098
1099private:
1100 // The schematic editor control class should be able to access some internal
1101 // functions of the editor frame.
1104
1107
1108 wxPageSetupDialogData m_pageSetupData;
1109 std::vector<std::unique_ptr<SCH_ITEM>> m_items_to_repeat;
1110
1115
1122
1123
1124 wxTreeCtrl* m_netNavigator;
1125
1126 bool m_syncingPcbToSchSelection; // Recursion guard when synchronizing selection from PCB
1127
1129
1131
1132 std::vector<wxEvtHandler*> m_schematicChangeListeners;
1133
1134 std::vector<LIB_ID> m_designBlockHistoryList;
1135
1137
1138#ifdef KICAD_IPC_API
1139 std::unique_ptr<API_HANDLER_SCH> m_apiHandler;
1140#endif
1141};
1142
1143
1144#endif // SCH_EDIT_FRAME_H
PLUGIN_ACTION_SCOPE
Definition: api_plugin.h:56
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:92
Handles how to draw a screen (a board, a schematic ...)
Definition: base_screen.h:41
UNDO_REDO_LIST
Specify whether we are interacting with the undo or redo stacks.
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:89
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
Definition: kiid.h:49
Carry a payload from one KIWAY_PLAYER to another within a PROJECT.
Definition: kiway_express.h:40
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
Definition: kiway.h:285
A logical library item identifier and consists of various portions much like a URI.
Definition: lib_id.h:49
Define a library symbol object.
Definition: lib_symbol.h:84
Tree view item data for the net navigator.
const SCH_ITEM * m_item
const SCH_ITEM * GetItem() const
SCH_SHEET_PATH m_sheetPath
bool operator==(const NET_NAVIGATOR_ITEM_DATA &aRhs) const
NET_NAVIGATOR_ITEM_DATA(const SCH_SHEET_PATH &aSheetPath, const SCH_ITEM *aItem)
SCH_SHEET_PATH & GetSheetPath()
NET_NAVIGATOR_ITEM_DATA & operator=(const NET_NAVIGATOR_ITEM_DATA &aItemData)
A holder to handle information on schematic or board items.
A pure virtual class used to derive REPORTER objects from.
Definition: reporter.h:72
Holds all the data relating to one schematic.
Definition: schematic.h:83
A shim class between EDA_DRAW_FRAME and several derived classes: SYMBOL_EDIT_FRAME,...
Object to handle a bitmap image that can be inserted in a schematic.
Definition: sch_bitmap.h:40
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
Handle actions specific to the schematic editor.
Schematic editor (Eeschema) main window.
void ShowSchematicSetupDialog(const wxString &aInitialPage=wxEmptyString)
void RollbackSchematicFromUndo()
Perform an undo of the last edit without logging a corresponding redo.
void DefaultExecFlags()
Reset the execution flags to defaults for external netlist and bom generators.
bool IsSyncingSelection()
void ToggleProperties() override
bool IsContentModified() const override
Get if the current schematic has been modified but not saved.
void RefreshOperatingPointDisplay()
Refresh the display of any operating points.
wxPageSetupDialogData m_pageSetupData
SELECTION & GetCurrentSelection() override
Get the current selection from the canvas area.
EDA_ITEM * GetItem(const KIID &aId) const override
Fetch an item by KIID.
void mapExistingAnnotation(std::map< wxString, wxString > &aMap)
Fill a map of uuid -> reference from the currently loaded schematic.
Definition: annotate.cpp:39
void SaveSelectionAsDesignBlock(const wxString &aLibraryName)
const wxString & getAutoSaveFileName() const
wxTreeCtrl * m_netNavigator
std::vector< std::unique_ptr< SCH_ITEM > > m_items_to_repeat
For the repeat-last-item cmd.
void ToggleNetNavigator()
void onResizeNetNavigator(wxSizeEvent &aEvent)
void updateSelectionFilterVisbility() override
Selection filter panel doesn't have a dedicated visibility control, so show it if any other AUI panel...
bool m_highlightedConnChanged
bool EditDesignBlockProperties(const LIB_ID &aLibId)
void onNetNavigatorSelChanging(wxTreeEvent &aEvent)
void SetExecFlags(const int aFlags)
Set (adds) specified flags for next execution of external generator of the netlist or bom.
bool AllowCaseSensitiveFileNameClashes(const wxString &aOldName, const wxString &aSchematicFileName)
Check aSchematicFileName for a potential file name case sensitivity clashes.
Definition: sheet.cpp:728
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag and update other data struc...
void ShowAllIntersheetRefs(bool aShow)
void SaveProjectLocalSettings() override
Save changes to the project settings to the project (.pro) file.
bool OpenProjectFiles(const std::vector< wxString > &aFileSet, int aCtl=0) override
Open a project or set of files given by aFileList.
void DeleteAnnotation(ANNOTATE_SCOPE_T aAnnotateScope, bool aRecursive, REPORTER &aReporter)
Clear the current symbol annotation.
Definition: annotate.cpp:60
void doCloseWindow() override
DIALOG_BOOK_REPORTER * m_diffSymbolDialog
wxString createNewDesignBlockLibrary(const wxString &aLibName, const wxString &aProposedName, DESIGN_BLOCK_LIB_TABLE *aTable)
Create a new library in the given table (presumed to be either the global or project library table).
void ToggleLibraryTree() override
void SetHighlightedConnection(const wxString &aConnection, const NET_NAVIGATOR_ITEM_DATA *aSelection=nullptr)
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
bool ReadyToNetlist(const wxString &aAnnotateMessage)
Check if we are ready to write a netlist file for the current schematic.
void onCloseErcDialog(wxCommandEvent &aEvent)
void ShowFindReplaceDialog(bool aReplace)
Run the Find or Find & Replace dialog.
void InitSheet(SCH_SHEET *aSheet, const wxString &aNewFilename)
Definition: sheet.cpp:110
void UpdateHierarchySelection()
Update the hierarchy navigation tree selection (cross-probe from schematic to hierarchy pane).
bool m_syncingPcbToSchSelection
bool BreakSegmentsOnJunctions(SCH_COMMIT *aCommit, SCH_SCREEN *aScreen)
Test all junctions and bus entries in the schematic for intersections with wires and buses and breaks...
void SaveSheetAsDesignBlock(const wxString &aLibraryName, SCH_SHEET_PATH &aSheetPath)
void SetScreen(BASE_SCREEN *aScreen) override
bool AskToSaveChanges()
Check if any of the screens has unsaved changes and asks the user whether to save or drop them.
void OnFindDialogClose()
Notification that the Find dialog has closed.
wxString GetNetListerCommand() const
bool doAutoSave() override
Save the schematic files that have been modified and not yet saved.
void SaveSymbolToSchematic(const LIB_SYMBOL &aSymbol, const KIID &aSchematicSymbolUUID)
Update a schematic symbol from a LIB_SYMBOL.
void SchematicCleanUp(SCH_COMMIT *aCommit, SCH_SCREEN *aScreen=nullptr)
Perform routine schematic cleaning including breaking wire and buses and deleting identical objects s...
void onSize(wxSizeEvent &aEvent)
DIALOG_SCHEMATIC_SETUP * m_schematicSetupDialog
bool LoadSheetFromFile(SCH_SHEET *aSheet, SCH_SHEET_PATH *aCurrentSheet, const wxString &aFileName, bool aSkipRecursionCheck=false, bool aSkipLibCheck=false)
Load a the KiCad schematic file aFileName into the sheet aSheet.
Definition: sheet.cpp:169
void SetAltPinFunction(SCH_PIN *aPin, const wxString &aFunction)
Definition: picksymbol.cpp:221
void CommonSettingsChanged(int aFlags) override
Called after the preferences dialog is run.
void doReCreateMenuBar() override
void ShowChangedLanguage() override
void SendSelectItemsToPcb(const std::vector< EDA_ITEM * > &aItems, bool aForce)
Send items to board editor for selection.
bool DeleteDesignBlockFromLibrary(const LIB_ID &aLibId, bool aConfirm)
wxPageSetupDialogData & GetPageSetupData()
void SaveCopyInUndoList(SCH_SCREEN *aScreen, SCH_ITEM *aItemToCopy, UNDO_REDO aTypeCommand, bool aAppend, bool aDirtyConnectivity=true)
Create a copy of the current schematic item, and put it in the undo list.
std::vector< wxEvtHandler * > m_schematicChangeListeners
void AnnotateSymbols(SCH_COMMIT *aCommit, ANNOTATE_SCOPE_T aAnnotateScope, ANNOTATE_ORDER_T aSortOption, ANNOTATE_ALGO_T aAlgoOption, bool aRecursive, int aStartNumber, bool aResetAnnotation, bool aRepairTimestamps, REPORTER &aReporter)
Annotate the symbols in the schematic that are not currently annotated.
Definition: annotate.cpp:212
void SendCrossProbeClearHighlight()
Tell Pcbnew to clear the existing highlighted net, if one exists.
void HardRedraw() override
Rebuild the GAL and redraw the screen.
void OnClearFileHistory(wxCommandEvent &aEvent)
void MakeNetNavigatorNode(const wxString &aNetName, wxTreeItemId aParentId, const NET_NAVIGATOR_ITEM_DATA *aSelection, bool aSingleSheetSchematic)
bool GetShowAllPins() const override
Allow edit frame to show/hide hidden pins.
bool WriteNetListFile(int aFormat, const wxString &aFullFileName, unsigned aNetlistOptions, REPORTER *aReporter=nullptr)
Create a netlist file.
void ClearUndoORRedoList(UNDO_REDO_LIST whichList, int aItemCount=-1) override
Free the undo or redo list from aList element.
SCHEMATIC * m_schematic
The currently loaded schematic.
void onCloseSymbolFieldsTableDialog(wxCommandEvent &aEvent)
void ClearFindReplaceStatus()
SCH_SHEET_PATH & GetCurrentSheet() const
void ReCreateVToolbar() override
void OnLoadFile(wxCommandEvent &event)
const SCH_ITEM * GetSelectedNetNavigatorItem() const
PLUGIN_ACTION_SCOPE PluginActionScope() const override
SCHEMATIC & Schematic() const
void updateTitle()
Set the main window title bar text.
void ExecuteRemoteCommand(const char *cmdline) override
Execute a remote command sent via a socket on port KICAD_SCH_PORT_SERVICE_NUMBER (which defaults to 4...
const std::vector< std::unique_ptr< SCH_ITEM > > & GetRepeatItems() const
Return the items which are to be repeated with the insert key.
bool saveSchematicFile(SCH_SHEET *aSheet, const wxString &aSavePath)
Save aSheet to a schematic file.
void ToggleSearch()
Toggle the show/hide state of Search pane.
void DrawCurrentSheetToClipboard()
Use the wxWidgets print code to draw an image of the current sheet onto the clipboard.
Definition: sheet.cpp:624
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.
void RefreshNetNavigator(const NET_NAVIGATOR_ITEM_DATA *aSelection=nullptr)
wxString GetFullScreenDesc() const override
static const wxString SearchPaneName()
DIALOG_BOOK_REPORTER * GetSymbolDiffDialog()
DESIGN_BLOCK * GetDesignBlock(const LIB_ID &aLibId, bool aUseCacheLib=false, bool aShowErrorMsg=false)
Load design block from design block library table.
bool canCloseWindow(wxCloseEvent &aCloseEvent) override
wxTreeCtrl * GetNetNavigator()
DESIGN_BLOCK_LIB_TABLE * selectDesignBlockLibTable(bool aOptional=false)
Prompt user to select global or project library tables.
int m_exec_flags
Flags of the wxExecute() function to call a custom net list generator.
void RecomputeIntersheetRefs()
Update the schematic's page reference map for all global labels, and refresh the labels so that they ...
bool checkForNoFullyDefinedLibIds(SCH_SHEET *aSheet)
Verify that the symbol library links aSheet and all of its child sheets have been remapped to the sym...
Definition: sheet.cpp:88
DIALOG_ERC * GetErcDialog()
void sendNetlistToCvpcb()
Send the KiCad netlist over to CVPCB.
bool EditSheetProperties(SCH_SHEET *aSheet, SCH_SHEET_PATH *aHierarchy, bool *aIsUndoable=nullptr, bool *aClearAnnotationNewItems=nullptr, bool *aUpdateHierarchyNavigator=nullptr, wxString *aSourceSheetFilename=nullptr)
Edit an existing sheet or add a new sheet to the schematic.
Definition: sheet.cpp:603
bool BreakSegments(SCH_COMMIT *aCommit, const VECTOR2I &aPoint, SCH_SCREEN *aScreen)
Check every wire and bus for a intersection at aPoint and break into two segments at aPoint if an int...
void UpdateHierarchyNavigator(bool aRefreshNetNavigator=true, bool aClear=false)
Update the hierarchy navigation tree and history.
void ToggleSchematicHierarchy()
Toggle the show/hide state of the left side schematic navigation panel.
bool importFile(const wxString &aFileName, int aFileType, const std::map< std::string, UTF8 > *aProperties=nullptr)
Load the given filename but sets the path to the current project path.
void FlipBodyStyle(SCH_SYMBOL *aSymbol)
Definition: picksymbol.cpp:182
void SendCrossProbeNetName(const wxString &aNetName)
Send a net name to Pcbnew for highlighting.
bool AddDesignBlockLibrary(const wxString &aFilename, DESIGN_BLOCK_LIB_TABLE *aTable)
Add an existing library to either the global or project library table.
void LoadDrawingSheet()
Load the drawing sheet file.
virtual void DeleteAutoSaveFile(const wxFileName &aFileName) override
void SetSheetNumberAndCount()
Set the m_ScreenNumber and m_NumberOfScreens members for screens.
void SaveSettings(APP_SETTINGS_BASE *aCfg) override
Save common frame parameters to a configuration data file.
wxString CreateNewDesignBlockLibrary(const wxString &aLibName=wxEmptyString, const wxString &aProposedName=wxEmptyString)
If a library name is given, creates a new design block library in the project folder with the given n...
std::vector< LIB_ID > m_designBlockHistoryList
void OnPageSettingsChange() override
Called when modifying the page settings.
void ClearRepeatItemsList()
Clear the list of items which are to be repeated with the insert key.
void SelectUnit(SCH_SYMBOL *aSymbol, int aUnit)
Definition: picksymbol.cpp:95
const BOX2I GetDocumentExtents(bool aIncludeAllVisible=true) const override
Return bounding box of document with option to not include some items.
void RecalculateConnections(SCH_COMMIT *aCommit, SCH_CLEANUP_FLAGS aCleanupFlags)
Generate the connection data for the entire schematic hierarchy.
void CaptureHierarchyPaneSize()
void initScreenZoom()
Initialize the zoom value of the current screen and mark the screen as zoom-initialized.
bool CheckSheetForRecursion(SCH_SHEET *aSheet, SCH_SHEET_PATH *aCurrentSheet)
Verify that aSheet will not cause a recursion error in aCurrentSheet.
Definition: sheet.cpp:54
void UpdateLabelsHierarchyNavigator()
Update the hierarchy navigation tree labels.
void OnImportProject(wxCommandEvent &event)
void ClearExecFlags(const int aFlags)
Clear (removes) specified flags that not needed for next execution of external generator of the netli...
static const wxString SchematicHierarchyPaneName()
void setupUIConditions() override
Setup the UI conditions for the various actions and their controls in this frame.
void unitsChangeRefresh() override
Called when when the units setting has changed to allow for any derived classes to handle refreshing ...
int CheckAnnotate(ANNOTATION_ERROR_HANDLER aErrorHandler, ANNOTATE_SCOPE_T aAnnotateScope=ANNOTATE_ALL, bool aRecursive=true)
Check for annotation errors.
Definition: annotate.cpp:460
void RemoveSchematicChangeListener(wxEvtHandler *aListener)
Remove aListener to from the schematic changed listener list.
void ReCreateOptToolbar() override
void ShowFindReplaceStatus(const wxString &aMsg, int aStatusTime)
bool CreateArchiveLibrary(const wxString &aFileName)
Create a library aFileName that contains all symbols used in the current schematic.
Definition: libarch.cpp:41
void SetCurrentSheet(const SCH_SHEET_PATH &aSheet)
void BreakSegment(SCH_COMMIT *aCommit, SCH_LINE *aSegment, const VECTOR2I &aPoint, SCH_LINE **aNewSegment, SCH_SCREEN *aScreen)
Break a single segment into two at the specified point.
virtual void PrintPage(const RENDER_SETTINGS *aSettings) override
Plot or print the current sheet to the clipboard.
int GetSchematicJunctionSize()
void DisplayCurrentSheet()
Draw the current sheet on the display.
void SetNetListerCommand(const wxString &aCommand)
void PutDataInPreviousState(PICKED_ITEMS_LIST *aList)
Restore an undo or redo command to put data pointed by aList in the previous state.
int ModalAnnotate(const wxString &aMessage)
Run a modal version of the annotate dialog for a specific purpose.
~SCH_EDIT_FRAME() override
virtual void CheckForAutoSaveFile(const wxFileName &aFileName) override
This overloaded version checks if the auto save master file "#auto_saved_files#" exists and recovers ...
const wxString & GetHighlightedConnection() const
DIALOG_ERC * m_ercDialog
void UpdateItem(EDA_ITEM *aItem, bool isAddOrDelete=false, bool aUpdateRtree=false) override
Mark an item for refresh.
wxString m_netListerCommand
Command line to call a custom net list generator.
bool TrimWire(SCH_COMMIT *aCommit, const VECTOR2I &aStart, const VECTOR2I &aEnd)
If any single wire passes through both points, remove the portion between the two points,...
void UpdateNetHighlightStatus()
wxString GetScreenDesc() const override
Return a human-readable description of the current screen.
DIALOG_SCH_FIND * m_findReplaceDialog
DESIGN_BLOCK_PANE * m_designBlocksPane
void SelectNetNavigatorItem(const NET_NAVIGATOR_ITEM_DATA *aSelection=nullptr)
void AddCopyForRepeatItem(const SCH_ITEM *aItem)
DIALOG_SYMBOL_FIELDS_TABLE * GetSymbolFieldsTableDialog()
void OnResizeHierarchyNavigator(wxSizeEvent &aEvent)
wxString GetCurrentFileName() const override
Get the full filename + path of the currently opened file in the frame.
void UpdateDesignBlockOptions()
Design block panel options have changed and the panel needs to be refreshed.
wxString m_highlightedConn
The highlighted net or bus or empty string.
static const wxString NetNavigatorPaneName()
void SetCrossProbeConnection(const SCH_CONNECTION *aConnection)
Send a connection (net or bus) to Pcbnew for highlighting.
void onCloseSymbolDiffDialog(wxCommandEvent &aEvent)
wxTreeCtrl * createHighlightedNetNavigator()
void TestDanglingEnds()
Test all of the connectable objects in the schematic for unused connection points.
DESIGN_BLOCK_PANE * GetDesignBlockPane() const
bool SaveProject(bool aSaveAs=false)
Save the currently-open schematic (including its hierarchy) and associated project.
bool DeleteDesignBlockLibrary(const wxString &aLibName, bool aConfirm)
void saveProjectSettings() override
Save any design-related project settings associated with this frame.
void OnExit(wxCommandEvent &event)
void DeleteJunction(SCH_COMMIT *aCommit, SCH_ITEM *aItem)
Remove a given junction and heals any wire segments under the junction.
void AutoRotateItem(SCH_SCREEN *aScreen, SCH_ITEM *aItem)
Automatically set the rotation of an item (if the item supports it).
void AddSchematicChangeListener(wxEvtHandler *aListener)
Add aListener to post #EDA_EVT_SCHEMATIC_CHANGED command events to.
HIERARCHY_PANE * m_hierarchy
DIALOG_SYMBOL_FIELDS_TABLE * m_symbolFieldsTableDialog
std::unique_ptr< GRID_HELPER > MakeGridHelper() override
SEVERITY GetSeverity(int aErrorCode) const override
void onNetNavigatorSelection(wxTreeEvent &aEvent)
void ReCreateHToolbar() override
void FocusOnItem(SCH_ITEM *aItem)
SCH_JUNCTION * AddJunction(SCH_COMMIT *aCommit, SCH_SCREEN *aScreen, const VECTOR2I &aPos)
void SaveCopyForRepeatItem(const SCH_ITEM *aItem)
Clone aItem and owns that clone in this container.
void KiwayMailIn(KIWAY_EXPRESS &aEvent) override
Receive KIWAY_EXPRESS messages from other players.
Instances are attached to a symbol or sheet and provide a place for the symbol's value,...
Definition: sch_field.h:53
Handle actions specific to the schematic editor.
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:167
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:41
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Definition: sch_sheet_pin.h:66
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
Definition: sch_sheet.h:59
Schematic symbol object.
Definition: sch_symbol.h:77
Base window classes and related definitions.
SEVERITY
SCH_CLEANUP_FLAGS
@ LOCAL_CLEANUP
@ NO_CLEANUP
@ GLOBAL_CLEANUP
wxDECLARE_EVENT(EDA_EVT_SCHEMATIC_CHANGING, wxCommandEvent)
SCH_SEARCH_T
Schematic search type used by the socket link with Pcbnew.
@ HIGHLIGHT_SYMBOL
@ HIGHLIGHT_PIN
std::function< void(ERCE_T aType, const wxString &aMsg, SCH_REFERENCE *aItemA, SCH_REFERENCE *aItemB)> ANNOTATION_ERROR_HANDLER
Define a standard error handler for annotation errors.
ANNOTATE_ORDER_T
Schematic annotation order options.
ANNOTATE_SCOPE_T
Schematic annotation scope options.
@ ANNOTATE_ALL
Annotate the full schematic.
ANNOTATE_ALGO_T
Schematic annotation type options.
UNDO_REDO
Undo Redo considerations: Basically we have 3 cases New item Deleted item Modified item there is also...