78#include <wx/filedlg.h>
80#include <wx/treectrl.h>
131 wxFileDialog dlg(
m_frame,
_(
"Schematic Files" ), curr_fn.GetPath(), curr_fn.GetFullName(),
134 if( dlg.ShowModal() == wxID_CANCEL )
139 m_frame->saveSchematicFile( curr_sheet, newFilename );
149 if(
m_frame->GetCurrentSheet().Last() != &root )
159 msg.Printf(
_(
"Revert '%s' (and all sub-sheets) to last version saved?" ), schematic.
GetFileName() );
167 screen->SetContentModified(
false );
178 m_frame->ShowSchematicSetupDialog();
200 m_frame->GetCanvas()->GetView()->MarkDirty();
202 m_frame->GetCanvas()->Refresh();
208 m_frame->RollbackSchematicFromUndo();
231 m_frame->GetCanvas()->GetBackend() );
240 m_frame->GetCanvas()->GetBackend() );
258 if( aRunningOnDemand )
268 m_frame->GetCanvas()->Refresh();
282 m_frame->GetCanvas()->Refresh(
true );
338 m_frame->SendSelectItemsToPcb( selection.GetItemsSortedBySelectionOrder(), aForce );
344 bool savePowerSymbols =
false;
350 targetLib =
m_frame->SelectLibrary(
_(
"Export Symbols" ),
_(
"Export symbols to library:" ),
351 { {
_(
"Include power symbols in export" ), &savePowerSymbols },
352 {
_(
"Update schematic symbols to link to exported symbols" ), &map }
355 if( targetLib.empty() )
360 sheets.
GetSymbols( symbols, savePowerSymbols );
362 std::map<LIB_ID, LIB_SYMBOL*> libSymbols;
363 std::map<LIB_ID, std::vector<SCH_SYMBOL*>> symbolMap;
365 for(
size_t i = 0; i < symbols.
GetCount(); ++i )
371 if( libSymbols.count(
id ) )
374 "Two symbols have the same LIB_ID but are different!" );
378 libSymbols[id] = libSymbol;
381 symbolMap[id].emplace_back( symbol );
388 auto optRow = adapter->
GetRow( targetLib );
389 wxCHECK( optRow, 0 );
398 for(
const std::pair<const LIB_ID, LIB_SYMBOL*>& it : libSymbols )
405 pi->SaveSymbol( dest.GetFullPath(), newSym );
409 msg.Printf(
_(
"Error saving symbol %s to library '%s'." ), newSym->
GetName(), row->
Nickname() );
410 msg += wxS(
"\n\n" ) + ioe.
What();
420 for(
SCH_SYMBOL* symbol : symbolMap[it.first] )
424 wxCHECK2( parentScreen,
continue );
427 symbol->SetLibId(
id );
437 globalTable->
Save().map_error(
440 wxMessageBox( wxString::Format(
_(
"Error saving global library table:\n\n%s" ),
442 _(
"File Save Error" ), wxOK | wxICON_ERROR );
445 else if( std::optional<LIBRARY_TABLE*> optTable = adapter->
ProjectTable() )
447 ( *optTable )->Save().map_error(
450 wxMessageBox( wxString::Format(
_(
"Error saving project-specific library table:\n\n%s" ),
452 _(
"File Save Error" ), wxOK | wxICON_ERROR );
458 std::set<SCH_SCREEN*> processedScreens;
464 if( processedScreens.find( ( screen ) ) == processedScreens.end() )
466 processedScreens.insert( screen );
471 commit.
Push( wxS(
"Update Library Identifiers" ) );
478#define HITTEST_THRESHOLD_PIXELS 5
490 blocking_win->Close(
true );
522 if( !symbol || !libPin )
530 std::vector<EMBEDDED_FILES*> embeddedFilesStack;
531 embeddedFilesStack.push_back(
m_frame->Schematic().GetEmbeddedFiles() );
534 embeddedFilesStack.push_back( symbolEmbeddedFile );
547 if( currentNames.size() == 0 )
551 else if( currentNames.size() == 1 )
563 wxString
name = currentNames.at( modelPinIndex );
574 else if( item->
IsType( { SCH_ITEM_LOCATE_WIRE_T } ) || item->
IsType( { SCH_JUNCTION_T } ) )
594 collector.
Collect(
m_frame->GetScreen(), { SCH_ITEM_LOCATE_WIRE_T,
596 SCH_SHEET_PIN_T }, aPos );
628 wxString connectionName = ( conn ) ? conn->
Name() : wxString( wxS(
"" ) );
630 if(
m_frame->GetHighlightedConnection() != connectionName )
632 m_frame->SetHighlightedConnection( connectionName );
640 [
this](
const int& aFinalState )
645 if( !
m_frame->GetHighlightedConnection().IsEmpty() )
647 m_frame->SetHighlightedConnection( wxEmptyString );
690 item = item->GetParent();
703 blocking_win->Close(
true );
705 static_cast<SIMULATOR_FRAME*
>( simFrame )->AddTuner( sheetPath, symbol );
719 collector.
Collect(
m_frame->GetScreen(), { SCH_SYMBOL_T, SCH_FIELD_T }, aPos );
727 item =
static_cast<SCH_FIELD*
>( item )->GetParentSymbol();
742 [
this](
const int& aFinalState )
774 if( aPosition !=
CLEAR )
778 if(
erc.TestDuplicateSheetNames(
false ) > 0 )
780 wxMessageBox(
_(
"Error: duplicate sub-sheet names found in current sheet." ) );
798 std::vector<SCH_PIN*> pins = symbol->
GetPins();
800 if( pins.size() == 1 )
801 conn = pins[0]->Connection();
811 wxString connName = ( conn ) ? conn->Name() : wxString( wxS(
"" ) );
815 editFrame->SetStatusText( wxT(
"" ) );
818 editorControl->SetHighlightBusMembers(
false );
826 editorControl->SetHighlightBusMembers(
false );
832 editorControl->SetHighlightBusMembers( !editorControl->GetHighlightBusMembers() );
842 editorControl->UpdateNetHighlighting(
dummy );
873 std::vector<std::pair<SCH_CONNECTION*, VECTOR2D>> selectedConns;
882 selectedConns.emplace_back( conn, item->GetPosition() );
885 if( selectedConns.empty() )
887 m_frame->ShowInfoBarError(
_(
"No nets selected." ) );
894 const auto getNetNamePattern =
897 wxString netName = aConn.Name();
904 return prefix + wxT(
"*" );
906 return prefix + wxT(
".*" );
917 std::set<wxString> netNames;
919 for(
const auto& [conn, pos] : selectedConns )
921 std::optional<wxString> netNamePattern = getNetNamePattern( *conn );
923 if( !netNamePattern )
926 m_frame->ShowInfoBarError(
_(
"All selected nets must be labeled to assign a netclass." ) );
930 netNames.insert( *netNamePattern );
933 wxCHECK( !netNames.empty(), 0 );
936 [&](
const std::vector<wxString>& aNetNames )
938 for( SCH_ITEM* item : screen->Items() )
940 bool redraw = item->IsBrightened();
941 SCH_CONNECTION* itemConn = item->Connection();
943 if( itemConn && alg::contains( aNetNames, itemConn->Name() ) )
944 item->SetBrightened();
946 item->ClearBrightened();
948 redraw |= item->IsBrightened();
950 if( item->Type() == SCH_SYMBOL_T )
952 SCH_SYMBOL* symbol = static_cast<SCH_SYMBOL*>( item );
954 redraw |= symbol->HasBrightenedPins();
956 symbol->ClearBrightenedPins();
958 for( SCH_PIN* pin : symbol->GetPins() )
960 SCH_CONNECTION* pin_conn = pin->Connection();
962 if( pin_conn && alg::contains( aNetNames, pin_conn->Name() ) )
964 pin->SetBrightened();
969 else if( item->Type() == SCH_SHEET_T )
971 for( SCH_SHEET_PIN* pin : static_cast<SCH_SHEET*>( item )->GetPins() )
973 SCH_CONNECTION* pin_conn = pin->Connection();
975 redraw |= pin->IsBrightened();
977 if( pin_conn && alg::contains( aNetNames, pin_conn->Name() ) )
978 pin->SetBrightened();
980 pin->ClearBrightened();
982 redraw |= pin->IsBrightened();
987 getView()->Update( item, KIGFX::VIEW_UPDATE_FLAGS::REPAINT );
990 m_frame->GetCanvas()->ForceRefresh();
993 if( dlg.ShowModal() )
995 getView()->UpdateAllItemsConditionally(
1000 auto invalidateTextVars =
1003 if(
text->HasTextVars() )
1005 text->ClearRenderCache();
1006 text->ClearBoundingBoxCache();
1013 if(
dynamic_cast<SCH_LINE*
>( aItem ) )
1024 item->RunOnChildren(
1025 [&invalidateTextVars](
SCH_ITEM* aChild )
1028 invalidateTextVars(
text );
1033 m_frame->GetScreen()->Update( item,
false );
1037 invalidateTextVars(
text );
1052 if( !selectionTool )
1063 if( !conn->GetNetName().IsEmpty() )
1065 netName = conn->GetNetName();
1072 if( netName.IsEmpty() )
1073 netName =
m_frame->GetHighlightedConnection();
1075 if( netName.IsEmpty() )
1077 m_frame->ShowInfoBarError(
_(
"No connected net selected." ) );
1081 m_frame->FindNetInInspector( netName );
1094 wxString selectedName =
m_frame->GetHighlightedConnection();
1096 std::set<wxString> connNames;
1097 std::vector<EDA_ITEM*> itemsToRedraw;
1099 wxCHECK( screen && connectionGraph, 0 );
1101 if( !selectedName.IsEmpty() )
1103 connNames.emplace( selectedName );
1109 for(
const SCH_ITEM* item : sg->GetItems() )
1111 wxCHECK2( item,
continue );
1115 for(
const std::shared_ptr<SCH_CONNECTION>& member : connection->AllMembers() )
1118 connNames.emplace( member->Name() );
1130 for(
const auto& [
_, bus_sgs] : sg->GetBusParents() )
1133 connNames.emplace( bus_sg->GetNetName() );
1141 if( !item || !item->IsConnectable() )
1154 if( !
pin->IsBrightened() && connNames.count( pin_conn->Name() ) )
1156 pin->SetBrightened();
1157 redrawItem = symbol;
1159 else if(
pin->IsBrightened() && !connNames.count( pin_conn->Name() ) )
1161 pin->ClearBrightened();
1162 redrawItem = symbol;
1178 if( !field->
IsBrightened() && connNames.count( pinConn->Name() ) )
1181 redrawItem = symbol;
1183 else if( field->
IsBrightened() && !connNames.count( pinConn->Name() ) )
1186 redrawItem = symbol;
1198 wxCHECK2(
pin,
continue );
1202 if( !
pin->IsBrightened() && connNames.count( pin_conn->Name() ) )
1204 pin->SetBrightened();
1207 else if(
pin->IsBrightened() && !connNames.count( pin_conn->Name() ) )
1209 pin->ClearBrightened();
1219 if( !item->IsBrightened() && connNames.count( itemConn->Name() ) )
1221 item->SetBrightened();
1224 else if( item->IsBrightened() && !connNames.count( itemConn->Name() ) )
1226 item->ClearBrightened();
1233 itemsToRedraw.push_back( redrawItem );
1236 if( itemsToRedraw.size() )
1241 for(
EDA_ITEM* redrawItem : itemsToRedraw )
1244 m_frame->GetCanvas()->Refresh();
1278 if(
m_frame->GetUndoCommandCount() <= 0 )
1287 wxCHECK( undo_list, 0 );
1289 m_frame->PutDataInPreviousState( undo_list );
1293 m_frame->PushCommandToRedoList( undo_list );
1297 m_frame->GetCanvas()->Refresh();
1308 if(
m_frame->GetRedoCommandCount() == 0 )
1320 m_frame->PutDataInPreviousState( list );
1323 list->ReversePickersListOrder();
1324 m_frame->PushCommandToUndoList( list );
1328 m_frame->GetCanvas()->Refresh();
1341 if( selection.Empty() )
1344 if( aUseDuplicateClipboard )
1347 selection.SetScreen(
m_frame->GetScreen() );
1350 for(
EDA_ITEM* item : selection.GetItems() )
1357 else if( item->Type() ==
SCH_FIELD_T && selection.IsHover() )
1361 selection.Add( item->GetParent() );
1366 selection.Remove( item );
1371 static_cast<SCH_ITEM*
>( item )->RunOnChildren(
1374 selection.Add( aChild );
1384 plugin.
Format( &selection, &selPath, schematic, &formatter,
true );
1386 std::string prettyData = formatter.
GetString();
1389 if( selection.IsHover() )
1392 if( aUseDuplicateClipboard )
1425 wxTextEntry* textEntry =
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
1442 wxTextEntry* textEntry =
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
1461 if( selection.Empty() )
1466 if( selection.IsHover() )
1474 const KIID_PATH& aClipPath,
bool aForceKeepAnnotations )
1476 wxCHECK(
m_frame && aSymbol, );
1479 bool instanceFound =
false;
1486 if( ( tmp.m_Path.empty() && aClipPath.empty() ) || ( !aClipPath.empty() && tmp.m_Path.
EndsWith( aClipPath ) ) )
1489 instanceFound =
true;
1491 wxLogTrace(
traceSchPaste, wxS(
"Pasting found symbol instance with reference %s, unit %d:\n"
1492 "\tClipboard path: %s\n"
1493 "\tSymbol UUID: %s." ),
1504 pasteLookupPath.push_back( aSymbol->
m_Uuid );
1506 if( !instanceFound )
1508 wxLogTrace(
traceSchPaste, wxS(
"Clipboard symbol instance **not** found:\n\tClipboard path: %s\n"
1509 "\tSymbol UUID: %s." ),
1529 if( !aForceKeepAnnotations )
1538 const KIID_PATH& aClipPath,
bool aForceKeepAnnotations,
1542 wxCHECK( aSheet && aPastedSheets, aPastePath );
1547 aPastedSheets->push_back( sheetPath );
1554 if( item->IsConnectable() )
1555 item->SetConnectivityDirty();
1561 wxCHECK2( symbol,
continue );
1569 pin->SetConnectivityDirty();
1579 wxCHECK2( subsheet,
continue );
1587 pin->SetConnectivityDirty();
1592 newClipPath.push_back( subsheet->
m_Uuid );
1594 updatePastedSheet( subsheet, sheetPath, newClipPath, aForceKeepAnnotations, aPastedSheets,
1599 sheetPath.
GetSymbols( aPastedSymbols[aPastePath] );
1607 wxCHECK( aScreen, );
1615 wxCHECK2( symbol,
continue );
1619 KIID_PATH pathWithSymbol = symbolInstance.m_Path;
1621 pathWithSymbol.push_back( symbol->
m_Uuid );
1636 wxCHECK2( symbol,
continue );
1638 std::vector<KIID_PATH> instancePathsToRemove;
1642 if( instance.m_ProjectName !=
m_frame->Prj().GetProjectName() || instance.m_Path.empty() )
1643 instancePathsToRemove.emplace_back( instance.m_Path );
1647 symbol->RemoveInstance(
path );
1654 wxTextEntry* textEntry =
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
1663 std::string content;
1673 auto bitmap = std::make_unique<SCH_BITMAP>();
1675 bool ok = bitmap->GetReferenceImage().SetImage( *clipImg );
1688 if( content.empty() )
1711 "Do you want to continue?" ) );
1717 tempScreen->
Append( text_item );
1728 bool annotateAutomatic =
m_frame->eeconfig()->m_AnnotatePanel.automatic;
1733 bool forceRemoveAnnotations =
false;
1753 std::vector<SCH_ITEM*> sortedLoadedItems;
1754 bool sheetsPasted =
false;
1759 if( destFn.IsRelative() )
1760 destFn.MakeAbsolute(
m_frame->Prj().GetProjectPath() );
1767 std::map<wxString, SCH_SCREEN*> loadedScreens;
1771 if( item.LastScreen() )
1772 loadedScreens[item.Last()->GetFileName()] = item.LastScreen();
1783 std::set<wxString> existingRefsSet;
1786 existingRefsSet.insert( ref.GetRef() );
1789 std::map<KIID, EDA_ITEM*> itemMap;
1793 std::map<SCH_SHEET_PATH, SCH_REFERENCE_LIST> pastedSymbols;
1794 std::map<SCH_SHEET_PATH, SCH_SHEET_LIST> pastedSheets;
1799 sortedLoadedItems.push_back( item );
1801 loadedItems.push_back( item );
1804 sort( sortedLoadedItems.begin(), sortedLoadedItems.end(),
1807 SCH_SHEET* firstSheet = static_cast<SCH_SHEET*>( firstItem );
1808 SCH_SHEET* secondSheet = static_cast<SCH_SHEET*>( secondItem );
1809 return StrNumCmp( firstSheet->GetName(), secondSheet->GetName(), false ) < 0;
1813 for(
SCH_ITEM* item : sortedLoadedItems )
1815 loadedItems.push_back( item );
1822 if( srcFn.IsRelative() )
1823 srcFn.MakeAbsolute(
m_frame->Prj().GetProjectPath() );
1827 if( hierarchy.
TestForRecursion( sheetHierarchy, destFn.GetFullPath( wxPATH_UNIX ) ) )
1829 auto msg = wxString::Format(
_(
"The pasted sheet '%s'\n"
1830 "was dropped because the destination already has "
1831 "the sheet or one of its subsheets as a parent." ),
1834 loadedItems.pop_back();
1840 tempScreen->
Clear(
false );
1842 for(
EDA_ITEM* item : loadedItems )
1848 wxCHECK2( schItem,
continue );
1863 wxCHECK2( currentScreen,
continue );
1887 if( !existingRefsSet.contains( instance.m_Reference ) )
1889 forceKeepAnnotations = !forceRemoveAnnotations;
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();
1952 hierarchy =
m_frame->Schematic().Hierarchy();
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() )
1971 fn.Normalize(
FN_NORMALIZE_FLAGS | wxPATH_NORM_ENV_VARS, currentSheetFileName.GetPath() );
1975 if( !
m_frame->Schematic().Root().SearchHierarchy( fn.GetFullPath( wxPATH_UNIX ), &existingScreen ) )
1977 if( loadedScreens.count( sheet->
GetFileName() ) > 0 )
1978 existingScreen = loadedScreens.at( sheet->
GetFileName() );
1983 if( existingScreen )
1989 if( !
m_frame->LoadSheetFromFile( sheet, &pasteRoot, fn.GetFullPath() ) )
1996 sheetsPasted =
true;
1999 clipPath.push_back( sheet->
m_Uuid );
2008 pin->SetConnectivityDirty();
2016 ( forceKeepAnnotations && annotateAutomatic ),
2017 &pastedSheets[sheetPath], pastedSymbols );
2026 const_cast<KIID&
>( item->m_Uuid ) =
KIID();
2028 if( srcItem && destItem )
2055 m_frame->Schematic().RefreshHierarchy();
2063 wxString pageNum = wxString::Format(
"%d", page );
2066 pageNum = wxString::Format(
"%d", ++page );
2070 sheetInstance.
m_Path = pastedSheet.Path();
2073 sheetInstance.
m_Path.pop_back();
2079 wxCHECK2( sheet,
continue );
2082 hierarchy.push_back( pastedSheet );
2085 std::vector<KIID_PATH> instancesToRemove;
2089 if( !hierarchy.
HasPath( instance.m_Path ) )
2090 instancesToRemove.push_back( instance.m_Path );
2093 for(
const KIID_PATH& instancePath : instancesToRemove )
2098 m_frame->SetSheetNumberAndCount();
2102 hierarchy =
m_frame->Schematic().Hierarchy();
2105 std::map<SCH_SHEET_PATH, SCH_REFERENCE_LIST> annotatedSymbols;
2110 for(
size_t i = 0; i < pastedSymbols[sheetPath].GetCount(); i++ )
2113 annotatedSymbols[sheetPath].AddItem( pastedSymbols[sheetPath][i] );
2116 for(
const SCH_SHEET_PATH& pastedSheetPath : pastedSheets[sheetPath] )
2118 for(
size_t i = 0; i < pastedSymbols[pastedSheetPath].GetCount(); i++ )
2121 annotatedSymbols[pastedSheetPath].AddItem( pastedSymbols[pastedSheetPath][i] );
2126 if( !annotatedSymbols.empty() )
2133 annotatedSymbols[
path].SortByReferenceOnly();
2138 annotatedSymbols[
path].ReannotateDuplicates( existingRefs, annotateAlgo );
2142 annotatedSymbols[
path].ReannotateByOptions( annotateOrder, annotateAlgo, annotateStartNum,
2143 existingRefs,
false, &hierarchy );
2146 annotatedSymbols[
path].UpdateAnnotation();
2149 for(
size_t i = 0; i < annotatedSymbols[
path].GetCount(); i++ )
2150 existingRefs.
AddItem( annotatedSymbols[
path][i] );
2154 annotatedSymbols[pastedSheetPath].SortByReferenceOnly();
2155 annotatedSymbols[pastedSheetPath].SetRefDesTracker( schematicSettings.
m_refDesTracker );
2159 annotatedSymbols[pastedSheetPath].ReannotateDuplicates( existingRefs, annotateAlgo );
2163 annotatedSymbols[pastedSheetPath].ReannotateByOptions( annotateOrder, annotateAlgo,
2164 annotateStartNum, existingRefs,
2165 false, &hierarchy );
2168 annotatedSymbols[pastedSheetPath].UpdateAnnotation();
2171 for(
size_t i = 0; i < annotatedSymbols[pastedSheetPath].GetCount(); i++ )
2172 existingRefs.
AddItem( annotatedSymbols[pastedSheetPath][i] );
2177 m_frame->GetCurrentSheet().UpdateAllScreenReferences();
2195 for(
int i = loadedItems.size() - 1; i >= 0; i-- )
2201 loadedItems.erase( loadedItems.begin() + i );
2214 if( !selection.Empty() )
2218 int closest_dist = INT_MAX;
2223 int dist = ( eventPos - pt ).EuclideanNorm();
2225 if( dist < closest_dist )
2227 selection.SetReferencePoint( pt );
2228 closest_dist = dist;
2233 for(
EDA_ITEM* item : selection.Items() )
2245 processPt(
pin->GetPosition() );
2251 processPt( item->GetPosition() );
2255 if( closest_dist == INT_MAX )
2257 for(
EDA_ITEM* item : selection.Items() )
2259 switch( item->Type() )
2262 processPt(
static_cast<SCH_LINE*
>( item )->GetStartPoint() );
2263 processPt(
static_cast<SCH_LINE*
>( item )->GetEndPoint() );
2283 for(
int ii = 0; ii < shape->
GetPolyShape().TotalVertices(); ++ii )
2290 processPt( shape->
GetEnd() );
2298 processPt( item->GetPosition() );
2307 else if( selection.GetTopLeftItem()->Type() ==
SCH_GROUP_T )
2314 group->RunOnChildren(
2326 selection.SetReferencePoint( item->
GetPosition() );
2328 selection.SetReferencePoint(
group->GetPosition() );
2334 selection.SetReferencePoint( item->
GetPosition() );
2340 commit.
Push(
_(
"Paste" ) );
2344 m_frame->UpdateHierarchyNavigator();
2349 m_frame->RefreshNetNavigator();
2371 if( selection.GetSize() >= 1 )
2374 if( selection.IsHover() )
2382 tableTool->EditTable( aEvent );
2392 m_frame->ShowInfoBarError(
_(
"Symbols with broken library symbol links cannot be edited." ) );
2402 blocking_win->Close(
true );
2431 dlg.
m_FirstRefDes->SetValidator( wxTextValidator( wxFILTER_EMPTY ) );
2445 int startNum = atoi( startRef.
GetRefNumber().utf8_string().c_str() );
2460 if( ref.GetRef() == startRef.
GetRef() )
2462 int num = atoi( ref.GetRefNumber().utf8_string().c_str() );
2464 if( num >= startNum )
2467 wxString fullRef = ref.GetRef();
2473 ref.GetSymbol()->SetRef( &sheet,
From_UTF8( fullRef.c_str() ) );
2478 if( !commit.
Empty() )
2479 commit.
Push(
_(
"Increment Annotations" ) );
2582 m_frame->DrawCurrentSheetToClipboard();
2628 m_frame->GetCanvas()->Refresh();
2640 m_frame->GetCanvas()->Refresh();
2652 m_frame->GetCanvas()->Refresh();
2664 m_frame->GetCanvas()->Refresh();
2676 m_frame->GetCanvas()->Refresh();
2687 m_frame->GetCanvas()->Refresh();
2698 m_frame->GetCanvas()->GetView()->UpdateAllItemsConditionally(
2703 auto invalidateTextVars =
2706 if(
text->HasTextVars() )
2708 text->ClearRenderCache();
2709 text->ClearBoundingBoxCache();
2716 item->RunOnChildren(
2717 [&invalidateTextVars](
SCH_ITEM* aChild )
2720 invalidateTextVars(
text );
2724 if( item->GetExcludedFromSim() )
2729 invalidateTextVars(
text );
2734 m_frame->GetCanvas()->Refresh();
2746 m_frame->RefreshOperatingPointDisplay();
2747 m_frame->GetCanvas()->Refresh();
2759 m_frame->RefreshOperatingPointDisplay();
2760 m_frame->GetCanvas()->Refresh();
2774 m_frame->GetCanvas()->Refresh();
2792 m_frame->eeconfig()->m_Drawing.line_mode++;
2812 m_frame->ScriptingConsoleEnableDisable();
2820 if(
Pgm().GetCommonSettings()->m_Api.enable_server )
2821 Pgm().GetPluginManager().ReloadPlugins();
2829 switch(
static_cast<LINE_MODE>(
m_frame->eeconfig()->m_Drawing.line_mode ) )
2854 std::map<KIID, EDA_ITEM*> ids;
2862 auto it = ids.find( aItem->m_Uuid );
2864 if( it != ids.end() && it->second != aItem )
2867 const_cast<KIID&
>( aItem->m_Uuid ) =
KIID();
2870 ids[ aItem->m_Uuid ] = aItem;
2882 processItem( item );
2895 processItem( item );
2899 item->RunOnChildren(
2902 processItem( item );
2919 errors += duplicates;
2920 details += wxString::Format(
_(
"%d duplicate IDs replaced.\n" ), duplicates );
2923 m_frame->Schematic().RefreshHierarchy();
2930 wxString msg = wxString::Format(
_(
"%d potential problems repaired." ), errors );
2946 if( !
Pgm().GetCommonSettings()->m_Input.hotkey_feedback )
2950 int currentIdx =
m_toolMgr->GetSettings()->m_Window.grid.last_size_idx;
2952 wxArrayString gridsLabels;
2955 gridsLabels.Add(
grid.UserUnitsMessageText(
m_frame ) );
2957 if( !
m_frame->GetHotkeyPopup() )
2963 popup->
Popup(
_(
"Grid" ), gridsLabels, currentIdx );
2980 if( selection.Size() != 1 || selection[0]->Type() !=
SCH_GROUP_T )
2985 if( !
group->HasDesignBlockLink() )
2990 std::unique_ptr<DESIGN_BLOCK> designBlock( designBlockPane->
GetDesignBlock(
group->GetDesignBlockLibId(),
2996 msg.Printf(
_(
"Could not find design block %s." ),
group->GetDesignBlockLibId().GetUniStringLibId() );
2997 m_frame->GetInfoBar()->ShowMessageFor( msg, 5000, wxICON_WARNING );
3001 if( designBlock->GetSchematicFile().IsEmpty() )
3004 msg.Printf(
_(
"Design block %s does not have a schematic file." ),
3005 group->GetDesignBlockLibId().GetUniStringLibId() );
3006 m_frame->GetInfoBar()->ShowMessageFor( msg, 5000, wxICON_WARNING );
3027 if( selection.Size() != 1 || selection[0]->Type() !=
SCH_GROUP_T )
3032 if( !
group->HasDesignBlockLink() )
3037 std::unique_ptr<DESIGN_BLOCK> designBlock( designBlockPane->
GetDesignBlock(
group->GetDesignBlockLibId(),
3043 msg.Printf(
_(
"Could not find design block %s." ),
group->GetDesignBlockLibId().GetUniStringLibId() );
3044 m_frame->GetInfoBar()->ShowMessageFor( msg, 5000, wxICON_WARNING );
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 const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
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 & Added(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Notify observers that aItem has been added.
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr, RECURSE_MODE aRecurse=RECURSE_MODE::NO_RECURSE)
Modify a given item in the model.
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.
static PRIORITY GetDriverPriority(SCH_ITEM *aDriver)
Return the priority (higher is more important) of a candidate driver.
void SelectLibId(const LIB_ID &aLibId)
DESIGN_BLOCK * GetDesignBlock(const LIB_ID &aLibId, bool aUseCacheLib, bool aShowErrorMsg)
Load design block from design block library table.
Class DIALOG_INCREMENT_ANNOTATIONS_BASE.
wxTextCtrl * m_FirstRefDes
wxRadioButton * m_AllSheets
void SetWksFileName(const wxString &aFilename)
bool Show(bool show) override
void SetInitialFocus(wxWindow *aWindow)
Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown.
A base class for most all the KiCad significant classes used in schematics and boards.
virtual VECTOR2I GetPosition() const
EDA_ITEM_FLAGS GetEditFlags() const
virtual EDA_GROUP * GetParentGroup() const
KICAD_T Type() const
Returns the type of object.
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 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
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.
wxWindow * GetBlockingDialog()
Gets the window pointer to the blocking dialog (to send it signals)
std::optional< LIBRARY_TABLE * > ProjectTable() const
Retrieves the project library table for this adapter type, or nullopt if one doesn't exist.
LIBRARY_TABLE * GlobalTable() const
Retrieves the global library table for this adapter type.
std::optional< LIBRARY_TABLE_ROW * > GetRow(const wxString &aNickname, LIBRARY_TABLE_SCOPE aScope=LIBRARY_TABLE_SCOPE::BOTH) const
Like LIBRARY_MANAGER::GetRow but filtered to the LIBRARY_TABLE_TYPE of this adapter.
std::optional< wxString > GetFullURI(LIBRARY_TABLE_TYPE aType, const wxString &aNickname, bool aSubstituted=false) const
Return the full location specifying URI for the LIB, either in original UI form or in environment var...
LIBRARY_TABLE_SCOPE Scope() const
const wxString & Type() const
const wxString & Nickname() const
LIBRARY_RESULT< void > Save()
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
bool IsPower() const override
wxString GetName() const override
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
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.
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_LIBRARY_ADAPTER * SymbolLibAdapter(PROJECT *aProject)
Accessor for project symbol library manager adapter.
virtual bool HasMessage() const
Returns true if any messages were reported.
static bool RescueProject(wxWindow *aParent, RESCUER &aRescuer, bool aRunningOnDemand)
size_t GetCandidateCount()
Return the number of rescue candidates found.
These are loaded from Eeschema settings but then overwritten by the project settings.
std::shared_ptr< REFDES_TRACKER > m_refDesTracker
A list of previously used schematic reference designators.
Holds all the data relating to one schematic.
wxString GetFileName() const
Helper to retrieve the filename from the root sheet screen.
SCH_SHEET_LIST Hierarchy() const
Return the full schematic flattened hierarchical sheet list.
SCH_SHEET_PATH & CurrentSheet() const
static TOOL_ACTION showPcbNew
static TOOL_ACTION assignFootprints
static TOOL_ACTION lineModeNext
static TOOL_ACTION toggleOPCurrents
static TOOL_ACTION saveToLinkedDesignBlock
static TOOL_ACTION clearHighlight
static TOOL_ACTION removeVariant
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 findNetInInspector
static TOOL_ACTION toggleHiddenFields
static TOOL_ACTION saveCurrSheetCopyAs
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 placeImage
static TOOL_ACTION editWithLibEdit
static TOOL_ACTION toggleERCErrors
static TOOL_ACTION incrementAnnotations
static TOOL_ACTION saveSelectionToDesignBlock
static TOOL_ACTION rescueSymbols
static TOOL_ACTION angleSnapModeChanged
static TOOL_ACTION placeLinkedDesignBlock
static TOOL_ACTION generateBOMLegacy
static TOOL_ACTION placeDesignBlock
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
static TOOL_ACTION addVariant
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 aBodyStyle=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
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 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 FindNetInInspector(const TOOL_EVENT &aEvent)
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 AddVariant(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 PlaceLinkedDesignBlock(const TOOL_EVENT &aEvent)
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 SaveToLinkedDesignBlock(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 RemoveVariant(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)
int OnAngleSnapModeChanged(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 ToggleProperties() override
SCH_DESIGN_BLOCK_PANE * GetDesignBlockPane() const
void ToggleNetNavigator()
void ToggleLibraryTree() override
void SetHighlightedConnection(const wxString &aConnection, const NET_NAVIGATOR_ITEM_DATA *aSelection=nullptr)
void SendCrossProbeClearHighlight()
Tell Pcbnew to clear the existing highlighted net, if one exists.
SCH_SHEET_PATH & GetCurrentSheet() const
void RecalculateConnections(SCH_COMMIT *aCommit, SCH_CLEANUP_FLAGS aCleanupFlags, PROGRESS_REPORTER *aProgressReporter=nullptr)
Generate the connection data for the entire schematic hierarchy.
const SCH_ITEM * GetSelectedNetNavigatorItem() const
SCHEMATIC & Schematic() const
void ToggleSearch()
Toggle the show/hide state of Search pane.
void ToggleSchematicHierarchy()
Toggle the show/hide state of the left side schematic navigation panel.
const wxString & GetHighlightedConnection() const
void UpdateNetHighlightStatus()
void SelectNetNavigatorItem(const NET_NAVIGATOR_ITEM_DATA *aSelection=nullptr)
void SetCrossProbeConnection(const SCH_CONNECTION *aConnection)
Send a connection (net or bus) to Pcbnew for highlighting.
void SetText(const wxString &aText) override
A set of SCH_ITEMs (i.e., without duplicates).
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,...
SCH_PIN * GetLibPin() const
const wxString & GetNumber() const
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 #SYM...
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
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.
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.
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
EMBEDDED_FILES * GetEmbeddedFiles() override
SCH_SYMBOLs don't currently support embedded files, but their LIB_SYMBOL counterparts do.
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.
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)
void SetFilesStack(std::vector< EMBEDDED_FILES * > aFilesStack)
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
An interface to the global shared library manager that is schematic-specific and linked to one projec...
Class to handle modifications to the symbol libraries.
Symbol library viewer main window.
A wrapper for reporting to a wxString object.
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.
@ RECTANGLE
Use RECTANGLE instead of RECT to avoid collision in a Windows header.
@ FRAME_SCH_SYMBOL_EDITOR
static const std::string KiCadSchematicFileExtension
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)
macro which captures the "call site" values of FILE_, __FUNCTION & LINE
#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)
#define HITTEST_THRESHOLD_PIXELS
Class to handle a set of SCH_ITEMs.
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
FIELD_T
The set of all field indices assuming an array like sequence that a SCH_COMPONENT or LIB_PART can hol...
@ REFERENCE
Field Reference of part, i.e. "IC21".
@ VALUE
Field Value of part, i.e. "3.3K".
wxString result
Test unit parsing edge cases and error handling.
VECTOR2< int32_t > VECTOR2I
VECTOR2< double > VECTOR2D
Definition of file extensions used in Kicad.
#define FN_NORMALIZE_FLAGS
Default flags to pass to wxFileName::Normalize().