77#include <wx/filedlg.h>
79#include <wx/treectrl.h>
129 wxFileDialog dlg(
m_frame,
_(
"Schematic Files" ), curr_fn.GetPath(), curr_fn.GetFullName(),
131 wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
133 if( dlg.ShowModal() == wxID_CANCEL )
136 wxString newFilename =
160 msg.Printf(
_(
"Revert '%s' (and all sub-sheets) to last version saved?" ),
169 screen->SetContentModified(
false );
261 if( aRunningOnDemand )
352 _(
"Include power symbols in schematic to the library?" ) );
358 sheets.
GetSymbols( symbols, savePowerSymbols );
360 std::map<LIB_ID, LIB_SYMBOL*> libSymbols;
361 std::map<LIB_ID, std::vector<SCH_SYMBOL*>> symbolMap;
363 for(
size_t i = 0; i < symbols.
GetCount(); ++i )
369 if( libSymbols.count(
id ) )
372 "Two symbols have the same LIB_ID but are different!" );
376 libSymbols[id] = libSymbol;
379 symbolMap[id].emplace_back( symbol );
402 targetLib = fn.GetName();
404 if( libTable->
HasLibrary( targetLib,
false ) )
413 if( fn.FileExists() )
414 wxRemoveFile( fn.GetFullPath() );
428 if( targetLib.IsEmpty() )
431 bool map =
IsOK(
m_frame,
_(
"Update symbols in schematic to refer to new library?" ) );
442 for(
const std::pair<const LIB_ID, LIB_SYMBOL*>& it : libSymbols )
449 pi->SaveSymbol( dest.GetFullPath(), newSym );
454 msg.Printf(
_(
"Error saving symbol %s to library '%s'." ),
456 msg += wxS(
"\n\n" ) + ioe.
What();
466 for(
SCH_SYMBOL* symbol : symbolMap[it.first] )
470 wxCHECK2( parentScreen,
continue );
472 commit.
Modify( symbol, parentScreen );
473 symbol->SetLibId(
id );
488 if( globalTable->
FindRow( targetLib ) )
493 globalTable->
Save( globalTablePath );
498 msg.Printf(
_(
"Error saving global library table:\n\n%s" ), ioe.
What() );
499 wxMessageBox( msg,
_(
"File Save Error" ), wxOK | wxICON_ERROR );
502 else if( projectTable && projectTable->
FindRow( targetLib ) )
508 projectTable->
Save( projectTableFn.GetFullPath() );
513 msg.Printf(
_(
"Error saving project-specific library table:\n\n%s" ), ioe.
What() );
514 wxMessageBox( msg,
_(
"File Save Error" ), wxOK | wxICON_ERROR );
520 std::set<SCH_SCREEN*> processedScreens;
526 if( processedScreens.find( ( screen ) ) == processedScreens.end() )
528 processedScreens.insert( screen );
533 commit.
Push( wxS(
"Update Library Identifiers" ) );
540#define HITTEST_THRESHOLD_PIXELS 5
552 blocking_win->Close(
true );
557 picker->
SetCursor( KICURSOR::VOLTAGE_PROBE );
561 [
this, simFrame](
const VECTOR2D& aPosition )
592 std::vector<std::string> currentNames =
595 if( currentNames.size() == 0 )
599 else if( currentNames.size() == 1 )
609 wxString
name = currentNames.at( modelPinIndex );
618 else if( item->
IsType( { SCH_ITEM_LOCATE_WIRE_T } )
619 || item->
IsType( { SCH_JUNCTION_T } ) )
634 [
this, picker](
const VECTOR2D& aPos )
640 SCH_SHEET_PIN_T }, aPos );
657 picker->
SetCursor( KICURSOR::CURRENT_PROBE );
659 picker->
SetCursor( KICURSOR::VOLTAGE_PROBE );
672 wxString connectionName = ( conn ) ? conn->
Name() : wxString( wxS(
"" ) );
684 [
this](
const int& aFinalState )
733 item = item->GetParent();
746 blocking_win->Close(
true );
748 static_cast<SIMULATOR_FRAME*
>( simFrame )->AddTuner( sheetPath, symbol );
785 [
this](
const int& aFinalState )
817 if( aPosition !=
CLEAR )
821 if(
erc.TestDuplicateSheetNames(
false ) > 0 )
823 wxMessageBox(
_(
"Error: duplicate sub-sheet names found in current sheet." ) );
841 std::vector<SCH_PIN*> pins = symbol->
GetPins();
843 if( pins.size() == 1 )
844 conn = pins[0]->Connection();
854 wxString connName = ( conn ) ? conn->
Name() : wxString( wxS(
"" ) );
858 editFrame->SetStatusText( wxT(
"" ) );
861 editorControl->SetHighlightBusMembers(
false );
869 editorControl->SetHighlightBusMembers(
false );
875 editorControl->SetHighlightBusMembers( !editorControl->GetHighlightBusMembers() );
885 editorControl->UpdateNetHighlighting(
dummy );
921 conn =
static_cast<SCH_ITEM*
>( item )->Connection();
922 connPos = item->GetPosition();
938 wxString netName = conn->
Name();
946 netName = prefix + wxT(
"*" );
950 netName = prefix + wxT(
".*" );
962 [&](
const std::vector<wxString>& aNetNames )
964 for( SCH_ITEM* item : screen->Items() )
966 bool redraw = item->IsBrightened();
967 SCH_CONNECTION* itemConn = item->Connection();
969 if( itemConn && alg::contains( aNetNames, itemConn->Name() ) )
970 item->SetBrightened();
972 item->ClearBrightened();
974 redraw |= item->IsBrightened();
976 if( item->Type() == SCH_SYMBOL_T )
978 SCH_SYMBOL* symbol = static_cast<SCH_SYMBOL*>( item );
980 redraw |= symbol->HasBrightenedPins();
982 symbol->ClearBrightenedPins();
984 for( SCH_PIN* pin : symbol->GetPins() )
986 SCH_CONNECTION* pin_conn = pin->Connection();
988 if( pin_conn && alg::contains( aNetNames, pin_conn->Name() ) )
990 pin->SetBrightened();
995 else if( item->Type() == SCH_SHEET_T )
997 for( SCH_SHEET_PIN* pin : static_cast<SCH_SHEET*>( item )->GetPins() )
999 SCH_CONNECTION* pin_conn = pin->Connection();
1001 redraw |= pin->IsBrightened();
1003 if( pin_conn && alg::contains( aNetNames, pin_conn->Name() ) )
1004 pin->SetBrightened();
1006 pin->ClearBrightened();
1008 redraw |= pin->IsBrightened();
1013 getView()->Update( item, KIGFX::VIEW_UPDATE_FLAGS::REPAINT );
1019 if( dlg.ShowModal() )
1021 getView()->UpdateAllItemsConditionally(
1026 auto invalidateTextVars =
1029 if(
text->HasTextVars() )
1031 text->ClearRenderCache();
1032 text->ClearBoundingBoxCache();
1039 if(
dynamic_cast<SCH_LINE*
>( aItem ) )
1050 item->RunOnChildren(
1051 [&invalidateTextVars](
SCH_ITEM* aChild )
1054 invalidateTextVars(
text );
1059 m_frame->GetScreen()->Update( item,
false );
1063 invalidateTextVars(
text );
1083 std::set<wxString> connNames;
1084 std::vector<EDA_ITEM*> itemsToRedraw;
1086 wxCHECK( screen && connectionGraph, 0 );
1088 if( !selectedName.IsEmpty() )
1090 connNames.emplace( selectedName );
1097 for(
const SCH_ITEM* item : sg->GetItems() )
1099 wxCHECK2( item,
continue );
1103 for(
const std::shared_ptr<SCH_CONNECTION>& member :
1104 connection->AllMembers() )
1107 connNames.emplace( member->Name() );
1119 for(
const auto& [
_, bus_sgs] : sg->GetBusParents() )
1123 connNames.emplace( bus_sg->GetNetName() );
1132 wxCHECK2( item,
continue );
1134 if( !item->IsConnectable() )
1147 if( !
pin->IsBrightened() && connNames.count( pin_conn->Name() ) )
1149 pin->SetBrightened();
1150 redrawItem = symbol;
1152 else if(
pin->IsBrightened() && !connNames.count( pin_conn->Name() ) )
1154 pin->ClearBrightened();
1155 redrawItem = symbol;
1164 for(
FIELD_T id : { FIELD_T::REFERENCE, FIELD_T::VALUE } )
1171 if( !field->
IsBrightened() && connNames.count( pinConn->Name() ) )
1174 redrawItem = symbol;
1176 else if( field->
IsBrightened() && !connNames.count( pinConn->Name() ) )
1179 redrawItem = symbol;
1191 wxCHECK2(
pin,
continue );
1195 if( !
pin->IsBrightened() && connNames.count( pin_conn->Name() ) )
1197 pin->SetBrightened();
1200 else if(
pin->IsBrightened() && !connNames.count( pin_conn->Name() ) )
1202 pin->ClearBrightened();
1212 if( !item->IsBrightened() && connNames.count( itemConn->Name() ) )
1217 else if( item->IsBrightened() && !connNames.count( itemConn->Name() ) )
1226 itemsToRedraw.push_back( redrawItem );
1229 if( itemsToRedraw.size() )
1234 for(
EDA_ITEM* redrawItem : itemsToRedraw )
1251 picker->
SetCursor( KICURSOR::BULLSEYE );
1279 wxCHECK( undo_list, 0 );
1333 if( selection.Empty() )
1336 if( aUseDuplicateClipboard )
1342 for(
EDA_ITEM* item : selection.GetItems() )
1349 else if( item->Type() ==
SCH_FIELD_T && selection.IsHover() )
1353 selection.Add( item->GetParent() );
1358 selection.
Remove( item );
1363 static_cast<SCH_ITEM*
>( item )->RunOnChildren(
1366 selection.Add( aChild );
1368 RECURSE_MODE::RECURSE );
1376 plugin.
Format( &selection, &selPath, schematic, &formatter,
true );
1378 std::string prettyData = formatter.
GetString();
1381 if( selection.IsHover() )
1384 if( aUseDuplicateClipboard )
1418 wxTextEntry* textEntry =
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
1435 wxTextEntry* textEntry =
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
1454 if( selection.Empty() )
1459 if( selection.IsHover() )
1469 bool aForceKeepAnnotations )
1471 wxCHECK(
m_frame && aSymbol, );
1474 bool instanceFound =
false;
1481 if( ( tmp.m_Path.empty() && aClipPath.empty() )
1482 || ( !aClipPath.empty() && tmp.m_Path.
EndsWith( aClipPath ) ) )
1485 instanceFound =
true;
1488 wxS(
"Pasting found symbol instance with reference %s, unit %d:"
1489 "\n\tClipboard path: %s\n\tSymbol UUID: %s." ),
1490 tmp.m_Reference, tmp.m_Unit,
1498 pasteLookupPath.push_back( aSymbol->
m_Uuid );
1500 if( !instanceFound )
1503 wxS(
"Clipboard symbol instance **not** found:\n\tClipboard path: %s\n\t"
1504 "Symbol UUID: %s." ),
1523 if( !aForceKeepAnnotations )
1534 bool aForceKeepAnnotations,
1539 wxCHECK( aSheet && aPastedSheets, aPastePath );
1544 aPastedSheets->push_back( sheetPath );
1551 if( item->IsConnectable() )
1552 item->SetConnectivityDirty();
1558 wxCHECK2( symbol,
continue );
1566 pin->SetConnectivityDirty();
1576 wxCHECK2( subsheet,
continue );
1584 pin->SetConnectivityDirty();
1589 newClipPath.push_back( subsheet->
m_Uuid );
1592 aPastedSheets, aPastedSymbols );
1596 sheetPath.
GetSymbols( aPastedSymbols[aPastePath] );
1604 wxCHECK( aScreen, );
1612 wxCHECK2( symbol,
continue );
1616 KIID_PATH pathWithSymbol = symbolInstance.m_Path;
1618 pathWithSymbol.push_back( symbol->
m_Uuid );
1633 wxCHECK2( symbol,
continue );
1635 std::vector<KIID_PATH> instancePathsToRemove;
1640 || instance.m_Path.empty() )
1641 instancePathsToRemove.emplace_back( instance.m_Path );
1645 symbol->RemoveInstance(
path );
1652 wxTextEntry* textEntry =
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
1661 std::string content;
1671 auto bitmap = std::make_unique<SCH_BITMAP>();
1673 bool ok = bitmap->GetReferenceImage().SetImage( *clipImg );
1681 tempScreen->
Append( bitmap.release() );
1690 if( content.empty() )
1713 tempScreen->
Append( text_item );
1728 PASTE_MODE pasteMode =
annotate.automatic ? PASTE_MODE::RESPECT_OPTIONS : PASTE_MODE::REMOVE_ANNOTATIONS;
1729 bool forceRemoveAnnotations =
false;
1740 forceRemoveAnnotations = ( pasteModeSpecial == PASTE_MODE::REMOVE_ANNOTATIONS );
1741 pasteMode = pasteModeSpecial;
1744 bool forceKeepAnnotations = pasteMode != PASTE_MODE::REMOVE_ANNOTATIONS;
1750 std::vector<SCH_ITEM*> sortedLoadedItems;
1751 bool sheetsPasted =
false;
1756 if( destFn.IsRelative() )
1764 std::map<wxString, SCH_SCREEN*> loadedScreens;
1768 if( item.LastScreen() )
1769 loadedScreens[item.Last()->GetFileName()] = item.LastScreen();
1780 std::set<wxString> existingRefsSet;
1783 existingRefsSet.insert( ref.GetRef() );
1786 std::map<KIID, EDA_ITEM*> itemMap;
1790 std::map<SCH_SHEET_PATH, SCH_REFERENCE_LIST> pastedSymbols;
1791 std::map<SCH_SHEET_PATH, SCH_SHEET_LIST> pastedSheets;
1796 sortedLoadedItems.push_back( item );
1798 loadedItems.push_back( item );
1801 sort( sortedLoadedItems.begin(), sortedLoadedItems.end(),
1804 SCH_SHEET* firstSheet = static_cast<SCH_SHEET*>( firstItem );
1805 SCH_SHEET* secondSheet = static_cast<SCH_SHEET*>( secondItem );
1806 return StrNumCmp( firstSheet->GetName(), secondSheet->GetName(), false ) < 0;
1810 for(
SCH_ITEM* item : sortedLoadedItems )
1812 loadedItems.push_back( item );
1818 wxString baseName = nameField->
GetText();
1821 if( srcFn.IsRelative() )
1826 if( hierarchy.
TestForRecursion( sheetHierarchy, destFn.GetFullPath( wxPATH_UNIX ) ) )
1828 auto msg = wxString::Format(
_(
"The pasted sheet '%s'\n"
1829 "was dropped because the destination already has "
1830 "the sheet or one of its subsheets as a parent." ),
1833 loadedItems.pop_back();
1839 tempScreen->
Clear(
false );
1841 for(
EDA_ITEM* item : loadedItems )
1847 wxCHECK2( schItem,
continue );
1862 wxCHECK2( currentScreen,
continue );
1886 if( !existingRefsSet.contains( instance.m_Reference ) )
1888 forceKeepAnnotations = !forceRemoveAnnotations;
1901 bool needsNewKiid = ( pasteMode == PASTE_MODE::UNIQUE_ANNOTATIONS );
1905 if( existingRefsSet.contains( instance.m_Reference ) )
1907 needsNewKiid =
true;
1915 const_cast<KIID&
>( item->m_Uuid ) =
KIID();
1921 pin->SetConnectivityDirty();
1931 pastedSymbols[sheetPath].AddItem( schReference );
1940 wxString baseName = nameField->
GetText();
1941 wxString candidateName = baseName;
1944 while( !baseName.IsEmpty() && wxIsdigit( baseName.Last() ) )
1946 number = baseName.Last() + number;
1947 baseName.RemoveLast();
1954 int uniquifier = std::max( 0, wxAtoi( number ) ) + 1;
1956 while( existingSheetNames.count( candidateName ) )
1957 candidateName = wxString::Format( wxT(
"%s%d" ), baseName, uniquifier++ );
1959 nameField->
SetText( candidateName );
1960 existingSheetNames.emplace( candidateName );
1968 if( !fn.IsAbsolute() )
1972 currentSheetFileName.GetPath() );
1979 if( loadedScreens.count( sheet->
GetFileName() ) > 0 )
1980 existingScreen = loadedScreens.at( sheet->
GetFileName() );
1985 if( existingScreen )
1998 sheetsPasted =
true;
2001 clipPath.push_back( sheet->
m_Uuid );
2010 pin->SetConnectivityDirty();
2018 ( forceKeepAnnotations &&
annotate.automatic ),
2019 &pastedSheets[sheetPath],
2029 const_cast<KIID&
>( item->m_Uuid ) =
KIID();
2031 if( srcItem && destItem )
2066 wxString pageNum = wxString::Format(
"%d", page );
2069 pageNum = wxString::Format(
"%d", ++page );
2073 sheetInstance.
m_Path = pastedSheet.Path();
2076 sheetInstance.
m_Path.pop_back();
2082 wxCHECK2( sheet,
continue );
2085 hierarchy.push_back( pastedSheet );
2088 std::vector<KIID_PATH> instancesToRemove;
2092 if( !hierarchy.
HasPath( instance.m_Path ) )
2093 instancesToRemove.push_back( instance.m_Path );
2096 for(
const KIID_PATH& instancePath : instancesToRemove )
2108 std::map<SCH_SHEET_PATH, SCH_REFERENCE_LIST> annotatedSymbols;
2113 for(
size_t i = 0; i < pastedSymbols[sheetPath].GetCount(); i++ )
2115 if( pasteMode == PASTE_MODE::UNIQUE_ANNOTATIONS
2116 || pasteMode == PASTE_MODE::RESPECT_OPTIONS
2117 || pastedSymbols[sheetPath][i].AlwaysAnnotate() )
2119 annotatedSymbols[sheetPath].AddItem( pastedSymbols[sheetPath][i] );
2123 for(
const SCH_SHEET_PATH& pastedSheetPath : pastedSheets[sheetPath] )
2125 for(
size_t i = 0; i < pastedSymbols[pastedSheetPath].GetCount(); i++ )
2127 if( pasteMode == PASTE_MODE::UNIQUE_ANNOTATIONS
2128 || pasteMode == PASTE_MODE::RESPECT_OPTIONS
2129 || pastedSymbols[pastedSheetPath][i].AlwaysAnnotate() )
2131 annotatedSymbols[pastedSheetPath].AddItem( pastedSymbols[pastedSheetPath][i] );
2137 if( !annotatedSymbols.empty() )
2141 annotatedSymbols[
path].SortByReferenceOnly();
2143 if( pasteMode == PASTE_MODE::UNIQUE_ANNOTATIONS )
2145 annotatedSymbols[
path].ReannotateDuplicates( existingRefs );
2151 annotateStartNum, existingRefs,
false,
2155 annotatedSymbols[
path].UpdateAnnotation();
2158 for(
size_t i = 0; i < annotatedSymbols[
path].GetCount(); i++ )
2159 existingRefs.
AddItem( annotatedSymbols[
path][i] );
2163 annotatedSymbols[pastedSheetPath].SortByReferenceOnly();
2165 if( pasteMode == PASTE_MODE::UNIQUE_ANNOTATIONS )
2167 annotatedSymbols[pastedSheetPath].ReannotateDuplicates( existingRefs );
2173 annotateStartNum, existingRefs,
2178 annotatedSymbols[pastedSheetPath].UpdateAnnotation();
2181 for(
size_t i = 0; i < annotatedSymbols[pastedSheetPath].GetCount(); i++ )
2182 existingRefs.
AddItem( annotatedSymbols[pastedSheetPath][i] );
2205 for(
int i = loadedItems.size() - 1; i >= 0; i-- )
2211 loadedItems.erase( loadedItems.begin() + i );
2224 if( !selection.Empty() )
2228 int closest_dist = INT_MAX;
2233 int dist = ( eventPos - pt ).EuclideanNorm();
2235 if( dist < closest_dist )
2238 closest_dist = dist;
2243 for(
EDA_ITEM* item : selection.Items() )
2255 processPt(
pin->GetPosition() );
2261 processPt( item->GetPosition() );
2265 if( closest_dist == INT_MAX )
2267 for(
EDA_ITEM* item : selection.Items() )
2269 switch( item->Type() )
2272 processPt(
static_cast<SCH_LINE*
>( item )->GetStartPoint() );
2273 processPt(
static_cast<SCH_LINE*
>( item )->GetEndPoint() );
2282 case SHAPE_T::RECTANGLE:
2288 case SHAPE_T::CIRCLE:
2293 for(
int ii = 0; ii < shape->
GetPolyShape().TotalVertices(); ++ii )
2300 processPt( shape->
GetEnd() );
2308 processPt( item->GetPosition() );
2320 selection.SetReferencePoint( item->
GetPosition() );
2326 commit.
Push(
_(
"Paste" ) );
2353 if( selection.GetSize() >= 1 )
2356 if( selection.IsHover() )
2364 tableTool->EditTable( aEvent );
2385 blocking_win->Close(
true );
2428 int startNum = atoi( startRef.
GetRefNumber().utf8_string().c_str() );
2443 if( ref.GetRef() == startRef.
GetRef() )
2445 int num = atoi( ref.GetRefNumber().utf8_string().c_str() );
2447 if( num >= startNum )
2450 wxString fullRef = ref.GetRef();
2456 ref.GetSymbol()->SetRef( &sheet,
From_UTF8( fullRef.c_str() ) );
2461 if( !commit.
Empty() )
2462 commit.
Push(
_(
"Increment Annotations" ) );
2572 getEditFrame<SCH_EDIT_FRAME>()->ToggleSearch();
2579 getEditFrame<SCH_EDIT_FRAME>()->ToggleSchematicHierarchy();
2586 getEditFrame<SCH_EDIT_FRAME>()->ToggleNetNavigator();
2593 getEditFrame<SCH_EDIT_FRAME>()->ToggleProperties();
2600 getEditFrame<SCH_EDIT_FRAME>()->ToggleLibraryTree();
2686 auto invalidateTextVars =
2689 if(
text->HasTextVars() )
2691 text->ClearRenderCache();
2692 text->ClearBoundingBoxCache();
2699 item->RunOnChildren(
2700 [&invalidateTextVars](
SCH_ITEM* aChild )
2703 invalidateTextVars(
text );
2705 RECURSE_MODE::NO_RECURSE );
2707 if( item->GetExcludedFromSim() )
2712 invalidateTextVars(
text );
2807 if(
Pgm().GetCommonSettings()->m_Api.enable_server )
2808 Pgm().GetPluginManager().ReloadPlugins();
2821 std::map<KIID, EDA_ITEM*> ids;
2829 auto it = ids.find( aItem->m_Uuid );
2831 if( it != ids.end() && it->second != aItem )
2834 const_cast<KIID&
>( aItem->m_Uuid ) =
KIID();
2837 ids[ aItem->m_Uuid ] = aItem;
2849 processItem( item );
2862 processItem( item );
2864 item->RunOnChildren(
2867 processItem( item );
2869 RECURSE_MODE::NO_RECURSE );
2883 errors += duplicates;
2884 details += wxString::Format(
_(
"%d duplicate IDs replaced.\n" ), duplicates );
2894 wxString msg = wxString::Format(
_(
"%d potential problems repaired." ), errors );
2910 if( !
Pgm().GetCommonSettings()->m_Input.hotkey_feedback )
2916 wxArrayString gridsLabels;
2919 gridsLabels.Add(
grid.UserUnitsMessageText(
m_frame ) );
2927 popup->
Popup(
_(
"Grid" ), gridsLabels, currentIdx );
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
static TOOL_ACTION updatePcbFromSchematic
static TOOL_ACTION revert
static TOOL_ACTION saveAs
static TOOL_ACTION pluginsReload
static TOOL_ACTION pickerTool
static TOOL_ACTION showSymbolEditor
static TOOL_ACTION pasteSpecial
static TOOL_ACTION pageSettings
static TOOL_ACTION showSearch
static TOOL_ACTION selectionActivate
Activation of the selection tool.
static TOOL_ACTION duplicate
static TOOL_ACTION doDelete
static TOOL_ACTION updateSchematicFromPcb
static TOOL_ACTION selectionClear
Clear the current selection.
static TOOL_ACTION showProperties
static TOOL_ACTION copyAsText
static TOOL_ACTION refreshPreview
static TOOL_ACTION selectItems
Select a list of items (specified as the event parameter)
static wxString m_DrawingSheetFileName
the name of the drawing sheet file, or empty to use the default drawing sheet
int GetCount() const
Return the number of objects in the list.
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Modify a given item in the model.
COMMIT & Added(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Notify observers that aItem has been added.
Calculate the connectivity of a schematic and generates netlists.
CONNECTION_SUBGRAPH * FindSubgraphByName(const wxString &aNetName, const SCH_SHEET_PATH &aPath)
Return the subgraph for a given net name on a given sheet.
const std::vector< CONNECTION_SUBGRAPH * > & GetAllSubgraphs(const wxString &aNetName) const
A subgraph is a set of items that are electrically connected on a single sheet.
PRIORITY GetDriverPriority()
Class DIALOG_INCREMENT_ANNOTATIONS_BASE.
wxTextCtrl * m_FirstRefDes
wxRadioButton * m_AllSheets
void SetWksFileName(const wxString &aFilename)
bool PrjConfigChanged()
Return true if the project configuration was modified.
bool Show(bool show) override
void SetInitialFocus(wxWindow *aWindow)
Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown.
virtual void PushCommandToUndoList(PICKED_ITEMS_LIST *aItem)
Add a command to undo in the undo list.
virtual int GetRedoCommandCount() const
virtual void ClearUndoRedoList()
Clear the undo and redo list using ClearUndoORRedoList()
virtual PICKED_ITEMS_LIST * PopCommandFromRedoList()
Return the last command to undo and remove it from list, nothing is deleted.
virtual PICKED_ITEMS_LIST * PopCommandFromUndoList()
Return the last command to undo and remove it from list, nothing is deleted.
virtual int GetUndoCommandCount() const
virtual void PushCommandToRedoList(PICKED_ITEMS_LIST *aItem)
Add a command to redo in the redo list.
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...
HOTKEY_CYCLE_POPUP * GetHotkeyPopup()
void ReleaseFile()
Release the current file marked in use.
void ScriptingConsoleEnableDisable()
Toggle the scripting console visibility.
bool LibraryFileBrowser(bool doOpen, wxFileName &aFilename, const wxString &wildcard, const wxString &ext, bool isDirectory=false, bool aIsGlobal=false, const wxString &aGlobalPath=wxEmptyString)
virtual void CreateHotkeyPopup()
GAL_TYPE GetBackend() const
Return the type of backend currently used by GAL canvas.
void ForceRefresh()
Force a redraw.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
A base class for most all the KiCad significant classes used in schematics and boards.
virtual VECTOR2I GetPosition() const
EDA_ITEM_FLAGS GetEditFlags() const
KICAD_T Type() const
Returns the type of object.
EDA_GROUP * GetParentGroup() const
virtual bool IsType(const std::vector< KICAD_T > &aScanTypes) const
Check whether the item is one of the listed types.
virtual void SetParent(EDA_ITEM *aParent)
EDA_ITEM * GetParent() const
bool IsBrightened() const
SHAPE_POLY_SET & GetPolyShape()
const VECTOR2I & GetEnd() const
Return the ending point of the graphic.
const VECTOR2I & GetStart() const
Return the starting point of the graphic.
std::vector< VECTOR2I > GetRectCorners() const
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
virtual const wxString & GetText() const
Return the string associated with the text object.
virtual bool IsVisible() const
PANEL_ANNOTATE m_AnnotatePanel
EE_TYPE OfType(KICAD_T aType) const
static const TOOL_EVENT ClearedEvent
static const TOOL_EVENT GridChangedByKeyEvent
static const TOOL_EVENT SelectedEvent
static const TOOL_EVENT SelectedItemsModified
Selected items were moved, this can be very high frequency on the canvas, use with care.
static const TOOL_EVENT PointSelectedEvent
static const TOOL_EVENT UnselectedEvent
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
virtual const wxString What() const
A composite of Problem() and Where()
An interface for classes handling user events controlling the view behavior such as zooming,...
VECTOR2D GetCursorPosition() const
Return the current cursor position in world coordinates.
An abstract base class for deriving all objects that can be added to a VIEW.
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const
For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has chan...
void SetLayerVisible(int aLayer, bool aVisible=true)
Control the visibility of a particular layer.
void UpdateAllItems(int aUpdateFlags)
Update all items in the view according to the given flags.
void Hide(VIEW_ITEM *aItem, bool aHide=true, bool aHideOverlay=false)
Temporarily hide the item in the view (e.g.
void AddToPreview(VIEW_ITEM *aItem, bool aTakeOwnership=true)
void MarkDirty()
Force redraw of view on the next rendering.
void UpdateAllItemsConditionally(int aUpdateFlags, std::function< bool(VIEW_ITEM *)> aCondition)
Update items in the view according to the given flags and condition.
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Set the item visibility.
bool EndsWith(const KIID_PATH &aPath) const
Test if aPath from the last path towards the first path.
wxString AsString() const
wxString AsString() const
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
KIWAY & Kiway() const
Return a reference to the KIWAY that this object has an opportunity to participate in.
A wxFrame capable of the OpenProjectFiles function, meaning it can load a portion of a KiCad project.
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
wxWindow * GetBlockingDialog()
Gets the window pointer to the blocking dialog (to send it signals)
A logical library item identifier and consists of various portions much like a URI.
int SetLibNickname(const UTF8 &aLibNickname)
Override the logical library name portion of the LIB_ID to aLibNickname.
Define a library symbol object.
const LIB_ID & GetLibId() const override
wxString GetName() const override
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
const wxString & GetNickName() const
const wxString GetFullURI(bool aSubstituted=false) const
Return the full location specifying URI for the LIB, either in original UI form or in environment var...
bool HasLibrary(const wxString &aNickname, bool aCheckEnabled=false) const
Test for the existence of aNickname in the library table.
void Save(const wxString &aFileName) const
Write this library table to aFileName in s-expression form.
static void ConvertToSpiceMarkup(wxString *aNetName)
Remove formatting wrappers and replace illegal spice net name characters with underscores.
Tree view item data for the net navigator.
static bool ParseBusGroup(const wxString &aGroup, wxString *name, std::vector< wxString > *aMemberList)
Parse a bus group label into the name and a list of components.
static bool ParseBusVector(const wxString &aBus, wxString *aName, std::vector< wxString > *aMemberList)
Parse a bus vector (e.g.
static wxString GetDefaultUserSymbolsPath()
Gets the default path we point users to create projects.
A holder to handle information on schematic or board items.
void PushItem(const ITEM_PICKER &aItem)
Push aItem to the top of the list.
void SetDescription(const wxString &aDescription)
void ReversePickersListOrder()
Reverse the order of pickers stored in this list.
static SYMBOL_LIB_TABLE * SchSymbolLibTable(PROJECT *aProject)
Accessor for project symbol library table.
virtual const wxString GetProjectPath() const
Return the full path of the project.
virtual const wxString GetProjectName() const
Return the short name of the project.
virtual bool IsNullProject() const
Check if this project is a null project (i.e.
static bool RescueProject(wxWindow *aParent, RESCUER &aRescuer, bool aRunningOnDemand)
size_t GetCandidateCount()
Return the number of rescue candidates found.
Holds all the data relating to one schematic.
SCH_SHEET_LIST BuildSheetListSortedByPageNumbers() const
wxString GetFileName() const
Helper to retrieve the filename from the root sheet screen.
SCHEMATIC_SETTINGS & Settings() const
SCH_SHEET_LIST Hierarchy() const
Return the full schematic flattened hierarchical sheet list.
EMBEDDED_FILES * GetEmbeddedFiles() override
CONNECTION_GRAPH * ConnectionGraph() const
SCH_SHEET_PATH & CurrentSheet() const
static TOOL_ACTION showPcbNew
static TOOL_ACTION assignFootprints
static TOOL_ACTION lineModeNext
static TOOL_ACTION toggleOPCurrents
static TOOL_ACTION clearHighlight
static TOOL_ACTION editSymbolFields
static TOOL_ACTION importFPAssignments
static TOOL_ACTION toggleAnnotateAuto
static TOOL_ACTION editLibSymbolWithLibEdit
static TOOL_ACTION toggleERCWarnings
static TOOL_ACTION schematicSetup
static TOOL_ACTION toggleDirectiveLabels
static TOOL_ACTION highlightNetTool
static TOOL_ACTION toggleHiddenFields
static TOOL_ACTION saveCurrSheetCopyAs
static TOOL_ACTION exportSymbolsToNewLibrary
static TOOL_ACTION repairSchematic
static TOOL_ACTION remapSymbols
static TOOL_ACTION lineMode45
static TOOL_ACTION editSymbolLibraryLinks
static TOOL_ACTION simTune
static TOOL_ACTION generateBOM
static TOOL_ACTION showHierarchy
static TOOL_ACTION showNetNavigator
static TOOL_ACTION markSimExclusions
static TOOL_ACTION editWithLibEdit
static TOOL_ACTION toggleERCErrors
static TOOL_ACTION incrementAnnotations
static TOOL_ACTION rescueSymbols
static TOOL_ACTION generateBOMLegacy
static TOOL_ACTION toggleOPVoltages
static TOOL_ACTION simProbe
static TOOL_ACTION lineMode90
static TOOL_ACTION lineModeFree
static TOOL_ACTION changeSheet
static TOOL_ACTION highlightNet
static TOOL_ACTION assignNetclass
static TOOL_ACTION annotate
static TOOL_ACTION showDesignBlockPanel
static TOOL_ACTION togglePinAltIcons
static TOOL_ACTION toggleERCExclusions
static TOOL_ACTION updateNetHighlighting
static TOOL_ACTION exportNetlist
static TOOL_ACTION drawSheetOnClipboard
static TOOL_ACTION exportSymbolsToLibrary
static TOOL_ACTION toggleHiddenPins
static TOOL_ACTION selectOnPCB
SCH_RENDER_SETTINGS * GetRenderSettings()
void AddToScreen(EDA_ITEM *aItem, SCH_SCREEN *aScreen=nullptr)
Add an item to the screen (and view) aScreen is the screen the item is located on,...
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
SYMBOL_LIB_TABLE * SelectSymLibTable(bool aOptional=false)
Display a dialog asking the user to select a symbol library table.
wxString SelectLibraryFromList()
Display a list of loaded libraries and allows the user to select a library.
void SyncView()
Mark all items for refresh.
EESCHEMA_SETTINGS * eeconfig() const
Base class for a bus or wire entry.
void Collect(SCH_SCREEN *aScreen, const std::vector< KICAD_T > &aScanTypes, const VECTOR2I &aPos, int aUnit=0, int aConvert=0)
Scan a EDA_ITEM using this class's Inspector method which does the collection.
virtual void Push(const wxString &aMessage=wxT("A commit"), int aCommitFlags=0) override
Execute the changes.
virtual void Revert() override
Revert the commit by restoring the modified items state.
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
wxString Name(bool aIgnoreSheet=false) const
SCH_ITEM * Driver() const
KIGFX::SCH_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
Handle actions specific to the schematic editor.
int PageSetup(const TOOL_EVENT &aEvent)
bool RescueLegacyProject(bool aRunningOnDemand)
int ToggleDirectiveLabels(const TOOL_EVENT &aEvent)
int SaveAs(const TOOL_EVENT &aEvent)
int MarkSimExclusions(const TOOL_EVENT &aEvent)
int Annotate(const TOOL_EVENT &aEvent)
int ToggleAnnotateRecursive(const TOOL_EVENT &aEvent)
int ShowSchematicSetup(const TOOL_EVENT &aEvent)
int HighlightNet(const TOOL_EVENT &aEvent)
Remove any net highlighting.
int ClearHighlight(const TOOL_EVENT &aEvent)
Update net highlighting after an edit.
int EditSymbolFields(const TOOL_EVENT &aEvent)
bool m_duplicateIsHoverSelection
int GenerateBOMLegacy(const TOOL_EVENT &aEvent)
int HighlightNetCursor(const TOOL_EVENT &aEvent)
int CopyAsText(const TOOL_EVENT &aEvent)
int ImportFPAssignments(const TOOL_EVENT &aEvent)
int ChangeLineMode(const TOOL_EVENT &aEvent)
void doCrossProbeSchToPcb(const TOOL_EVENT &aEvent, bool aForce)
int ExportSymbolsToLibrary(const TOOL_EVENT &aEvent)
int SaveCurrSheetCopyAs(const TOOL_EVENT &aEvent)
Saves the currently-open schematic sheet to an other name.
bool rescueProject(RESCUER &aRescuer, bool aRunningOnDemand)
int CrossProbeToPcb(const TOOL_EVENT &aEvent)
Equivalent to the above, but initiated by the user.
int Quit(const TOOL_EVENT &aEvent)
int RemapSymbols(const TOOL_EVENT &aEvent)
int DrawSheetOnClipboard(const TOOL_EVENT &aEvent)
SCH_SHEET_PATH updatePastedSheet(SCH_SHEET *aSheet, const SCH_SHEET_PATH &aPastePath, const KIID_PATH &aClipPath, bool aForceKeepAnnotations, SCH_SHEET_LIST *aPastedSheets, std::map< SCH_SHEET_PATH, SCH_REFERENCE_LIST > &aPastedSymbols)
int TogglePinAltIcons(const TOOL_EVENT &aEvent)
int RescueSymbols(const TOOL_EVENT &aEvent)
Perform rescue operations to recover old projects from before certain changes were made.
int AssignNetclass(const TOOL_EVENT &aEvent)
std::string m_duplicateClipboard
int ExportNetlist(const TOOL_EVENT &aEvent)
int Open(const TOOL_EVENT &aEvent)
int Paste(const TOOL_EVENT &aEvent)
int ToggleOPVoltages(const TOOL_EVENT &aEvent)
int Copy(const TOOL_EVENT &aEvent)
int ToggleERCWarnings(const TOOL_EVENT &aEvent)
int NextLineMode(const TOOL_EVENT &aEvent)
int Redo(const TOOL_EVENT &aEvent)
Clipboard support.
int UpdatePCB(const TOOL_EVENT &aEvent)
int UpdateFromPCB(const TOOL_EVENT &aEvent)
int ToggleAnnotateAuto(const TOOL_EVENT &aEvent)
int ToggleHiddenPins(const TOOL_EVENT &aEvent)
int Duplicate(const TOOL_EVENT &aEvent)
int IncrementAnnotations(const TOOL_EVENT &aEvent)
bool searchSupplementaryClipboard(const wxString &aSheetFilename, SCH_SCREEN **aScreen)
int GridFeedback(const TOOL_EVENT &aEvent)
int ShowSearch(const TOOL_EVENT &aEvent)
int EditWithSymbolEditor(const TOOL_EVENT &aEvent)
int SimTune(const TOOL_EVENT &aEvent)
Highlight net under the cursor.
int EditSymbolLibraryLinks(const TOOL_EVENT &aEvent)
int New(const TOOL_EVENT &aEvent)
std::map< wxString, SCH_SCREEN * > m_supplementaryClipboard
int ExplicitCrossProbeToPcb(const TOOL_EVENT &aEvent)
int ToggleOPCurrents(const TOOL_EVENT &aEvent)
int ShowPcbNew(const TOOL_EVENT &aEvent)
int UpdateNetHighlighting(const TOOL_EVENT &aEvent)
Launch a tool to highlight nets.
int ToggleERCErrors(const TOOL_EVENT &aEvent)
int TogglePythonConsole(const TOOL_EVENT &aEvent)
int ShowHierarchy(const TOOL_EVENT &aEvent)
void setTransitions() override
This method is meant to be overridden in order to specify handlers for events.
bool m_highlightBusMembers
int ShowNetNavigator(const TOOL_EVENT &aEvent)
int SimProbe(const TOOL_EVENT &aEvent)
void updatePastedSymbol(SCH_SYMBOL *aSymbol, const SCH_SHEET_PATH &aPastePath, const KIID_PATH &aClipPath, bool aForceKeepAnnotations)
int ShowCvpcb(const TOOL_EVENT &aEvent)
int ToggleLibraryTree(const TOOL_EVENT &aEvent)
int RepairSchematic(const TOOL_EVENT &aEvent)
std::set< SCH_SYMBOL * > m_pastedSymbols
void prunePastedSymbolInstances()
Remove all pasted symbol instances that do not belong to the current project.
int Cut(const TOOL_EVENT &aEvent)
int ToggleProperties(const TOOL_EVENT &aEvent)
std::map< KIID_PATH, SCH_SYMBOL_INSTANCE > m_clipboardSymbolInstances
int Save(const TOOL_EVENT &aEvent)
bool RescueSymbolLibTableProject(bool aRunningOnDemand)
Notifies pcbnew about the selected item.
bool doCopy(bool aUseDuplicateClipboard=false)
< copy selection to clipboard or to m_duplicateClipboard
int Undo(const TOOL_EVENT &aEvent)
int ToggleERCExclusions(const TOOL_EVENT &aEvent)
int Plot(const TOOL_EVENT &aEvent)
int Print(const TOOL_EVENT &aEvent)
int Revert(const TOOL_EVENT &aEvent)
int GenerateBOM(const TOOL_EVENT &aEvent)
int ReloadPlugins(const TOOL_EVENT &aEvent)
void setPastedSymbolInstances(const SCH_SCREEN *aScreen)
int ToggleHiddenFields(const TOOL_EVENT &aEvent)
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.
bool IsSyncingSelection()
void RefreshOperatingPointDisplay()
Refresh the display of any operating points.
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag and update other data struc...
bool OpenProjectFiles(const std::vector< wxString > &aFileSet, int aCtl=0) override
Open a project or set of files given by aFileList.
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.
void InitSheet(SCH_SHEET *aSheet, const wxString &aNewFilename)
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.
void SendSelectItemsToPcb(const std::vector< EDA_ITEM * > &aItems, bool aForce)
Send items to board editor for selection.
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.
void SendCrossProbeClearHighlight()
Tell Pcbnew to clear the existing highlighted net, if one exists.
void HardRedraw() override
Rebuild the GAL and redraw the screen.
SCHEMATIC * m_schematic
The currently loaded schematic.
SCH_SHEET_PATH & GetCurrentSheet() const
const SCH_ITEM * GetSelectedNetNavigatorItem() const
SCHEMATIC & Schematic() const
bool saveSchematicFile(SCH_SHEET *aSheet, const wxString &aSavePath)
Save aSheet to a schematic file.
void DrawCurrentSheetToClipboard()
Use the wxWidgets print code to draw an image of the current sheet onto the clipboard.
void RefreshNetNavigator(const NET_NAVIGATOR_ITEM_DATA *aSelection=nullptr)
void UpdateHierarchyNavigator(bool aRefreshNetNavigator=true, bool aClear=false)
Update the hierarchy navigation tree and history.
void SetSheetNumberAndCount()
Set the m_ScreenNumber and m_NumberOfScreens members for screens.
void RecalculateConnections(SCH_COMMIT *aCommit, SCH_CLEANUP_FLAGS aCleanupFlags)
Generate the connection data for the entire schematic hierarchy.
void PutDataInPreviousState(PICKED_ITEMS_LIST *aList)
Restore an undo or redo command to put data pointed by aList in the previous state.
const wxString & GetHighlightedConnection() const
void UpdateNetHighlightStatus()
void SelectNetNavigatorItem(const NET_NAVIGATOR_ITEM_DATA *aSelection=nullptr)
DIALOG_SYMBOL_FIELDS_TABLE * GetSymbolFieldsTableDialog()
void SetCrossProbeConnection(const SCH_CONNECTION *aConnection)
Send a connection (net or bus) to Pcbnew for highlighting.
bool SaveProject(bool aSaveAs=false)
Save the currently-open schematic (including its hierarchy) and associated project.
void SetText(const wxString &aText) override
A SCH_IO derivation for loading schematic files using the new s-expression file format.
void LoadContent(LINE_READER &aReader, SCH_SHEET *aSheet, int aVersion=SEXPR_SCHEMATIC_FILE_VERSION)
void Format(SCH_SHEET *aSheet)
static SCH_FILE_T EnumFromStr(const wxString &aFileType)
Return the #SCH_FILE_T from the corresponding plugin type name: "kicad", "legacy",...
Base class for any item which can be embedded within the SCHEMATIC container class,...
virtual bool IsConnectable() const
const SYMBOL * GetParentSymbol() const
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
virtual void SetLastResolvedState(const SCH_ITEM *aItem)
void SetConnectivityDirty(bool aDirty=true)
bool IsConnectivityDirty() const
virtual void SetUnit(int aUnit)
SCH_CONNECTION * Connection(const SCH_SHEET_PATH *aSheet=nullptr) const
Retrieve the connection associated with this object in the given sheet.
virtual std::vector< VECTOR2I > GetConnectionPoints() const
Add all the connection points for this item to aPoints.
Segment description base class to describe items which have 2 end points (track, wire,...
Container to create a flattened list of symbols because in a complex hierarchy, a symbol can be used ...
void SortByReferenceOnly()
Sort the list of references by reference.
void SplitReferences()
Attempt to split all reference designators into a name (U) and number (1).
void AddItem(const SCH_REFERENCE &aItem)
A helper to define a symbol's reference designator in a schematic.
void SetRef(const wxString &aReference)
void Split()
Attempt to split the reference designator into a name (U) and number (1).
bool IsSplitNeeded()
Determine if this reference needs to be split or if it likely already has been.
void SetSheetNumber(int aSheetNumber)
wxString GetRefNumber() const
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
void UpdateSymbolLinks(REPORTER *aReporter=nullptr)
Initialize the LIB_SYMBOL reference for each SCH_SYMBOL found in the full schematic.
void PruneOrphanedSheetInstances(const wxString &aProjectName, const SCH_SHEET_LIST &aValidSheetPaths)
void PruneOrphanedSymbolInstances(const wxString &aProjectName, const SCH_SHEET_LIST &aValidSheetPaths)
bool HasNoFullyDefinedLibIds()
Test all of the schematic symbols to see if all LIB_ID objects library nickname is not set.
void Append(SCH_ITEM *aItem, bool aUpdateLibSymbol=true)
void Clear(bool aFree=true)
Delete all draw items and clears the project settings.
void UpdateSymbolLinks(REPORTER *aReporter=nullptr)
Initialize the LIB_SYMBOL reference for each SCH_SYMBOL found in this schematic from the project SYMB...
std::set< wxString > GetSheetNames() const
const std::map< wxString, LIB_SYMBOL * > & GetLibSymbols() const
Fetch a list of unique LIB_SYMBOL object pointers required to properly render each SCH_SYMBOL in this...
EE_RTREE & Items()
Get the full RTree, usually for iterating.
const wxString & GetFileName() const
bool Remove(SCH_ITEM *aItem, bool aUpdateLibSymbol=true)
Remove aItem from the schematic associated with this screen.
bool CheckIfOnDrawList(const SCH_ITEM *aItem) const
void MigrateSimModels()
Migrate any symbols having V6 simulation models to their V7 equivalents.
VECTOR2I GetCenter() const
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
void FillItemMap(std::map< KIID, EDA_ITEM * > &aMap)
Fill an item cache for temporary use when many items need to be fetched.
void SortByPageNumbers(bool aUpdateVirtualPageNums=true)
Sort the list of sheets by page number.
SCH_SHEET_LIST FindAllSheetsForScreen(const SCH_SCREEN *aScreen) const
Return a SCH_SHEET_LIST with a copy of all the SCH_SHEET_PATH using a particular screen.
void GetSymbols(SCH_REFERENCE_LIST &aReferences, bool aIncludePowerSymbols=true, bool aForceIncludeOrphanSymbols=false) const
Add a SCH_REFERENCE object to aReferences for each symbol in the list of sheets.
bool PageNumberExists(const wxString &aPageNumber) const
bool ContainsSheet(const SCH_SHEET *aSheet) const
bool HasPath(const KIID_PATH &aPath) const
bool TestForRecursion(const SCH_SHEET_LIST &aSrcSheetHierarchy, const wxString &aDestFileName)
Test every SCH_SHEET_PATH in this SCH_SHEET_LIST to verify if adding the sheets stored in aSrcSheetHi...
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
void GetSymbols(SCH_REFERENCE_LIST &aReferences, bool aIncludePowerSymbols=true, bool aForceIncludeOrphanSymbols=false) const
Adds SCH_REFERENCE object to aReferences for each symbol in the sheet.
KIID_PATH Path() const
Get the sheet path as an KIID_PATH.
void UpdateAllScreenReferences() const
Update all the symbol references for this sheet path.
SCH_SCREEN * LastScreen()
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
void push_back(SCH_SHEET *aSheet)
Forwarded method from std::vector.
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
wxString GetFileName() const
Return the filename corresponding to this sheet.
void RemoveInstance(const KIID_PATH &aInstancePath)
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this sheet.
bool SearchHierarchy(const wxString &aFilename, SCH_SCREEN **aScreen)
Search the existing hierarchy for an instance of screen loaded from aFileName.
void AddInstance(const SCH_SHEET_INSTANCE &aInstance)
SCH_SCREEN * GetScreen() const
void SetScreen(SCH_SCREEN *aScreen)
Set the SCH_SCREEN associated with this sheet to aScreen.
std::vector< SCH_SHEET_PIN * > & GetPins()
const std::vector< SCH_SHEET_INSTANCE > & GetInstances() const
const std::vector< SCH_SYMBOL_INSTANCE > & GetInstances() const
wxString GetSchSymbolLibraryName() const
void ClearAnnotation(const SCH_SHEET_PATH *aSheetPath, bool aResetPrefix)
Clear exiting symbol annotation.
void AddHierarchicalReference(const KIID_PATH &aPath, const wxString &aRef, int aUnit)
Add a full hierarchical reference to this symbol.
bool IsMissingLibSymbol() const
Check to see if the library symbol is set to the dummy library symbol.
std::vector< SCH_PIN * > GetPins(const SCH_SHEET_PATH *aSheet) const
Retrieve a list of the SCH_PINs for the given sheet path.
const LIB_ID & GetLibId() const override
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
void SetLibSymbol(LIB_SYMBOL *aLibSymbol)
Set this schematic symbol library symbol reference to aLibSymbol.
const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const override
bool IsPower() const override
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this symbol.
void SetReferencePoint(const VECTOR2I &aP)
const VECTOR2I & CVertex(int aIndex, int aOutline, int aHole) const
Return the index-th vertex in a given hole outline within a given outline.
The SIMULATOR_FRAME holds the main user-interface for running simulations.
void AddCurrentTrace(const wxString &aDeviceName)
Add a current trace for a given device to the current plot.
void AddVoltageTrace(const wxString &aNetName)
Add a voltage trace for a given net to the current plot.
SIM_MODEL & CreateModel(SIM_MODEL::TYPE aType, const std::vector< SCH_PIN * > &aPins, REPORTER &aReporter)
int FindModelPinIndex(const std::string &aSymbolPinNumber)
const SPICE_GENERATOR & SpiceGenerator() const
virtual std::vector< std::string > CurrentNames(const SPICE_ITEM &aItem) const
Is a LINE_READER that reads from a multiline 8 bit wide std::string.
The symbol library editor main window.
bool IsLibraryTreeShown() const override
void LoadSymbol(const wxString &aLibrary, const wxString &aSymbol, int Unit)
void LoadSymbolFromSchematic(SCH_SYMBOL *aSymbol)
Load a symbol from the schematic to edit in place.
void ToggleLibraryTree() override
Class to handle modifications to the symbol libraries.
bool CreateLibrary(const wxString &aFilePath, SYMBOL_LIB_TABLE &aTable)
Create an empty library and adds it to the library table.
SYMBOL_LIB_TABLE_ROW * GetLibrary(const wxString &aLibrary) const
Find a single library within the (aggregate) library table.
Hold a record identifying a symbol library accessed by the appropriate symbol library SCH_IO object i...
const wxString GetType() const override
Return the type of symbol library table represented by this row.
static SYMBOL_LIB_TABLE & GetGlobalLibTable()
static const wxString GetSymbolLibTableFileName()
static wxString GetGlobalTableFileName()
Fetch the global symbol library table file name.
SYMBOL_LIB_TABLE_ROW * FindRow(const wxString &aNickName, bool aCheckIfEnabled=false)
Return an SYMBOL_LIB_TABLE_ROW if aNickName is found in this table or in any chained fallBack table f...
Symbol library viewer main window.
A wrapper for reporting to a wxString object.
bool HasMessage() const override
Returns true if the reporter client is non-empty.
const wxString & GetMessages() const
bool SaveClipboard(const std::string &aTextUTF8)
Store information to the system clipboard.
std::string GetClipboardUTF8()
Return the information currently stored in the system clipboard.
std::unique_ptr< wxImage > GetImageFromClipboard()
Get image data from the clipboard, if there is any.
wxString EnsureFileExtension(const wxString &aFilename, const wxString &aExtension)
It's annoying to throw up nag dialogs when the extension isn't right.
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Display a yes/no dialog with aMessage and returns the user response.
void DisplayInfoMessage(wxWindow *aParent, const wxString &aMessage, const wxString &aExtraInfo)
Display an informational message box with aMessage.
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
void DisplayError(wxWindow *aParent, const wxString &aText)
Display an error or warning message box with aMessage.
This file is part of the common library.
int InvokeDialogCreateBOM(SCH_EDIT_FRAME *aCaller)
Create and show DIALOG_BOM and return whatever DIALOG_BOM::ShowModal() returns.
bool InvokeDialogEditSymbolsLibId(SCH_EDIT_FRAME *aCaller)
Run a dialog to modify the LIB_ID of symbols for instance when a symbol has moved from a symbol libra...
int InvokeDialogNetList(SCH_EDIT_FRAME *aCaller)
std::vector< EDA_ITEM * > EDA_ITEMS
Define list of drawing items for screens.
#define IS_PASTED
Modifier on IS_NEW which indicates it came from clipboard.
#define IS_NEW
New item, just created.
#define ENDPOINT
ends. (Used to support dragging.)
#define IS_MOVING
Item being moved.
#define STARTPOINT
When a line is selected, these flags indicate which.
@ FRAME_SCH_SYMBOL_EDITOR
static const std::string KiCadSchematicFileExtension
static const std::string KiCadSymbolLibFileExtension
static wxString KiCadSymbolLibFileWildcard()
static wxString KiCadSchematicFileWildcard()
static const wxChar traceSchPaste[]
Flag to enable schematic paste debugging output.
#define NET_PLUGIN_CHANGE
Create and shows DIALOG_EXPORT_NETLIST and returns whatever DIALOG_EXPORT_NETLIST::ShowModal() return...
std::unique_ptr< T > IO_RELEASER
Helper to hold and release an IO_BASE object when exceptions are thrown.
#define THROW_IO_ERROR(msg)
#define KICTL_REVERT
reverting to a previously-saved (KiCad) file.
@ REPAINT
Item needs to be redrawn.
@ GEOMETRY
Position or shape has changed.
#define MAX_PAGE_SIZE_EESCHEMA_MILS
PGM_BASE & Pgm()
The global program "get" accessor.
static bool highlightNet(TOOL_MANAGER *aToolMgr, const VECTOR2D &aPosition)
ANNOTATE_ORDER_T
Schematic annotation order options.
ANNOTATE_ALGO_T
Schematic annotation type options.
std::vector< FAB_LAYER_COLOR > dummy
wxString UnescapeString(const wxString &aSource)
wxString From_UTF8(const char *cstring)
bool show_directive_labels
std::vector< GRID > grids
Common grid settings, available to every frame.
A simple container for sheet instance information.
A simple container for schematic symbol instance information.
static constexpr auto NOT_CONNECTED
Definition for symbol library class.
FIELD_T
The set of all field indices assuming an array like sequence that a SCH_COMPONENT or LIB_PART can hol...
VECTOR2< int32_t > VECTOR2I
Definition of file extensions used in Kicad.
#define FN_NORMALIZE_FLAGS
Default flags to pass to wxFileName::Normalize().