79#include <wx/filedlg.h>
81#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 );
393 for(
const std::pair<const LIB_ID, LIB_SYMBOL*>& it : libSymbols )
400 pi->SaveSymbol( dest.GetFullPath(), newSym );
404 msg.Printf(
_(
"Error saving symbol %s to library '%s'." ), newSym->
GetName(), row->
GetNickName() );
405 msg += wxS(
"\n\n" ) + ioe.
What();
415 for(
SCH_SYMBOL* symbol : symbolMap[it.first] )
419 wxCHECK2( parentScreen,
continue );
422 symbol->SetLibId(
id );
434 if( !
m_frame->Prj().IsNullProject() )
437 if( globalTable->
FindRow( targetLib ) )
442 globalTable->
Save( globalTablePath );
446 msg.Printf(
_(
"Error saving global library table:\n\n%s" ), ioe.
What() );
447 wxMessageBox( msg,
_(
"File Save Error" ), wxOK | wxICON_ERROR );
450 else if( projectTable && projectTable->
FindRow( targetLib ) )
454 wxString projectPath =
m_frame->Prj().GetProjectPath();
456 projectTable->
Save( projectTableFn.GetFullPath() );
460 msg.Printf(
_(
"Error saving project-specific library table:\n\n%s" ), ioe.
What() );
461 wxMessageBox( msg,
_(
"File Save Error" ), wxOK | wxICON_ERROR );
467 std::set<SCH_SCREEN*> processedScreens;
473 if( processedScreens.find( ( screen ) ) == processedScreens.end() )
475 processedScreens.insert( screen );
480 commit.
Push( wxS(
"Update Library Identifiers" ) );
487#define HITTEST_THRESHOLD_PIXELS 5
499 blocking_win->Close(
true );
531 if( !symbol || !libPin )
539 std::vector<EMBEDDED_FILES*> embeddedFilesStack;
540 embeddedFilesStack.push_back(
m_frame->Schematic().GetEmbeddedFiles() );
543 embeddedFilesStack.push_back( symbolEmbeddedFile );
556 if( currentNames.size() == 0 )
560 else if( currentNames.size() == 1 )
572 wxString
name = currentNames.at( modelPinIndex );
583 else if( item->
IsType( { SCH_ITEM_LOCATE_WIRE_T } ) || item->
IsType( { SCH_JUNCTION_T } ) )
603 collector.
Collect(
m_frame->GetScreen(), { SCH_ITEM_LOCATE_WIRE_T,
605 SCH_SHEET_PIN_T }, aPos );
637 wxString connectionName = ( conn ) ? conn->
Name() : wxString( wxS(
"" ) );
639 if(
m_frame->GetHighlightedConnection() != connectionName )
641 m_frame->SetHighlightedConnection( connectionName );
649 [
this](
const int& aFinalState )
654 if( !
m_frame->GetHighlightedConnection().IsEmpty() )
656 m_frame->SetHighlightedConnection( wxEmptyString );
699 item = item->GetParent();
712 blocking_win->Close(
true );
714 static_cast<SIMULATOR_FRAME*
>( simFrame )->AddTuner( sheetPath, symbol );
728 collector.
Collect(
m_frame->GetScreen(), { SCH_SYMBOL_T, SCH_FIELD_T }, aPos );
736 item =
static_cast<SCH_FIELD*
>( item )->GetParentSymbol();
751 [
this](
const int& aFinalState )
783 if( aPosition !=
CLEAR )
787 if(
erc.TestDuplicateSheetNames(
false ) > 0 )
789 wxMessageBox(
_(
"Error: duplicate sub-sheet names found in current sheet." ) );
807 std::vector<SCH_PIN*> pins = symbol->
GetPins();
809 if( pins.size() == 1 )
810 conn = pins[0]->Connection();
820 wxString connName = ( conn ) ? conn->Name() : wxString( wxS(
"" ) );
824 editFrame->SetStatusText( wxT(
"" ) );
827 editorControl->SetHighlightBusMembers(
false );
835 editorControl->SetHighlightBusMembers(
false );
841 editorControl->SetHighlightBusMembers( !editorControl->GetHighlightBusMembers() );
851 editorControl->UpdateNetHighlighting(
dummy );
882 std::vector<std::pair<SCH_CONNECTION*, VECTOR2D>> selectedConns;
891 selectedConns.emplace_back( conn, item->GetPosition() );
894 if( selectedConns.empty() )
896 m_frame->ShowInfoBarError(
_(
"No nets selected." ) );
903 const auto getNetNamePattern =
906 wxString netName = aConn.Name();
913 return prefix + wxT(
"*" );
915 return prefix + wxT(
".*" );
926 std::set<wxString> netNames;
928 for(
const auto& [conn, pos] : selectedConns )
930 std::optional<wxString> netNamePattern = getNetNamePattern( *conn );
932 if( !netNamePattern )
935 m_frame->ShowInfoBarError(
_(
"All selected nets must be labeled to assign a netclass." ) );
939 netNames.insert( *netNamePattern );
942 wxCHECK( !netNames.empty(), 0 );
945 [&](
const std::vector<wxString>& aNetNames )
947 for( SCH_ITEM* item : screen->Items() )
949 bool redraw = item->IsBrightened();
950 SCH_CONNECTION* itemConn = item->Connection();
952 if( itemConn && alg::contains( aNetNames, itemConn->Name() ) )
953 item->SetBrightened();
955 item->ClearBrightened();
957 redraw |= item->IsBrightened();
959 if( item->Type() == SCH_SYMBOL_T )
961 SCH_SYMBOL* symbol = static_cast<SCH_SYMBOL*>( item );
963 redraw |= symbol->HasBrightenedPins();
965 symbol->ClearBrightenedPins();
967 for( SCH_PIN* pin : symbol->GetPins() )
969 SCH_CONNECTION* pin_conn = pin->Connection();
971 if( pin_conn && alg::contains( aNetNames, pin_conn->Name() ) )
973 pin->SetBrightened();
978 else if( item->Type() == SCH_SHEET_T )
980 for( SCH_SHEET_PIN* pin : static_cast<SCH_SHEET*>( item )->GetPins() )
982 SCH_CONNECTION* pin_conn = pin->Connection();
984 redraw |= pin->IsBrightened();
986 if( pin_conn && alg::contains( aNetNames, pin_conn->Name() ) )
987 pin->SetBrightened();
989 pin->ClearBrightened();
991 redraw |= pin->IsBrightened();
996 getView()->Update( item, KIGFX::VIEW_UPDATE_FLAGS::REPAINT );
999 m_frame->GetCanvas()->ForceRefresh();
1002 if( dlg.ShowModal() )
1004 getView()->UpdateAllItemsConditionally(
1009 auto invalidateTextVars =
1012 if(
text->HasTextVars() )
1014 text->ClearRenderCache();
1015 text->ClearBoundingBoxCache();
1022 if(
dynamic_cast<SCH_LINE*
>( aItem ) )
1033 item->RunOnChildren(
1034 [&invalidateTextVars](
SCH_ITEM* aChild )
1037 invalidateTextVars(
text );
1042 m_frame->GetScreen()->Update( item,
false );
1046 invalidateTextVars(
text );
1064 wxString selectedName =
m_frame->GetHighlightedConnection();
1066 std::set<wxString> connNames;
1067 std::vector<EDA_ITEM*> itemsToRedraw;
1069 wxCHECK( screen && connectionGraph, 0 );
1071 if( !selectedName.IsEmpty() )
1073 connNames.emplace( selectedName );
1079 for(
const SCH_ITEM* item : sg->GetItems() )
1081 wxCHECK2( item,
continue );
1085 for(
const std::shared_ptr<SCH_CONNECTION>& member : connection->AllMembers() )
1088 connNames.emplace( member->Name() );
1100 for(
const auto& [
_, bus_sgs] : sg->GetBusParents() )
1103 connNames.emplace( bus_sg->GetNetName() );
1111 if( !item || !item->IsConnectable() )
1124 if( !
pin->IsBrightened() && connNames.count( pin_conn->Name() ) )
1126 pin->SetBrightened();
1127 redrawItem = symbol;
1129 else if(
pin->IsBrightened() && !connNames.count( pin_conn->Name() ) )
1131 pin->ClearBrightened();
1132 redrawItem = symbol;
1148 if( !field->
IsBrightened() && connNames.count( pinConn->Name() ) )
1151 redrawItem = symbol;
1153 else if( field->
IsBrightened() && !connNames.count( pinConn->Name() ) )
1156 redrawItem = symbol;
1168 wxCHECK2(
pin,
continue );
1172 if( !
pin->IsBrightened() && connNames.count( pin_conn->Name() ) )
1174 pin->SetBrightened();
1177 else if(
pin->IsBrightened() && !connNames.count( pin_conn->Name() ) )
1179 pin->ClearBrightened();
1189 if( !item->IsBrightened() && connNames.count( itemConn->Name() ) )
1191 item->SetBrightened();
1194 else if( item->IsBrightened() && !connNames.count( itemConn->Name() ) )
1196 item->ClearBrightened();
1203 itemsToRedraw.push_back( redrawItem );
1206 if( itemsToRedraw.size() )
1211 for(
EDA_ITEM* redrawItem : itemsToRedraw )
1214 m_frame->GetCanvas()->Refresh();
1248 if(
m_frame->GetUndoCommandCount() <= 0 )
1257 wxCHECK( undo_list, 0 );
1259 m_frame->PutDataInPreviousState( undo_list );
1263 m_frame->PushCommandToRedoList( undo_list );
1267 m_frame->GetCanvas()->Refresh();
1278 if(
m_frame->GetRedoCommandCount() == 0 )
1290 m_frame->PutDataInPreviousState( list );
1293 list->ReversePickersListOrder();
1294 m_frame->PushCommandToUndoList( list );
1298 m_frame->GetCanvas()->Refresh();
1311 if( selection.Empty() )
1314 if( aUseDuplicateClipboard )
1317 selection.SetScreen(
m_frame->GetScreen() );
1320 for(
EDA_ITEM* item : selection.GetItems() )
1327 else if( item->Type() ==
SCH_FIELD_T && selection.IsHover() )
1331 selection.Add( item->GetParent() );
1336 selection.Remove( item );
1341 static_cast<SCH_ITEM*
>( item )->RunOnChildren(
1344 selection.Add( aChild );
1354 plugin.
Format( &selection, &selPath, schematic, &formatter,
true );
1356 std::string prettyData = formatter.
GetString();
1359 if( selection.IsHover() )
1362 if( aUseDuplicateClipboard )
1395 wxTextEntry* textEntry =
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
1412 wxTextEntry* textEntry =
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
1431 if( selection.Empty() )
1436 if( selection.IsHover() )
1444 const KIID_PATH& aClipPath,
bool aForceKeepAnnotations )
1446 wxCHECK(
m_frame && aSymbol, );
1449 bool instanceFound =
false;
1456 if( ( tmp.m_Path.empty() && aClipPath.empty() ) || ( !aClipPath.empty() && tmp.m_Path.
EndsWith( aClipPath ) ) )
1459 instanceFound =
true;
1461 wxLogTrace(
traceSchPaste, wxS(
"Pasting found symbol instance with reference %s, unit %d:\n"
1462 "\tClipboard path: %s\n"
1463 "\tSymbol UUID: %s." ),
1474 pasteLookupPath.push_back( aSymbol->
m_Uuid );
1476 if( !instanceFound )
1478 wxLogTrace(
traceSchPaste, wxS(
"Clipboard symbol instance **not** found:\n\tClipboard path: %s\n"
1479 "\tSymbol UUID: %s." ),
1499 if( !aForceKeepAnnotations )
1508 const KIID_PATH& aClipPath,
bool aForceKeepAnnotations,
1512 wxCHECK( aSheet && aPastedSheets, aPastePath );
1517 aPastedSheets->push_back( sheetPath );
1524 if( item->IsConnectable() )
1525 item->SetConnectivityDirty();
1531 wxCHECK2( symbol,
continue );
1539 pin->SetConnectivityDirty();
1549 wxCHECK2( subsheet,
continue );
1557 pin->SetConnectivityDirty();
1562 newClipPath.push_back( subsheet->
m_Uuid );
1564 updatePastedSheet( subsheet, sheetPath, newClipPath, aForceKeepAnnotations, aPastedSheets,
1569 sheetPath.
GetSymbols( aPastedSymbols[aPastePath] );
1577 wxCHECK( aScreen, );
1585 wxCHECK2( symbol,
continue );
1589 KIID_PATH pathWithSymbol = symbolInstance.m_Path;
1591 pathWithSymbol.push_back( symbol->
m_Uuid );
1606 wxCHECK2( symbol,
continue );
1608 std::vector<KIID_PATH> instancePathsToRemove;
1612 if( instance.m_ProjectName !=
m_frame->Prj().GetProjectName() || instance.m_Path.empty() )
1613 instancePathsToRemove.emplace_back( instance.m_Path );
1617 symbol->RemoveInstance(
path );
1624 wxTextEntry* textEntry =
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
1633 std::string content;
1643 auto bitmap = std::make_unique<SCH_BITMAP>();
1645 bool ok = bitmap->GetReferenceImage().SetImage( *clipImg );
1658 if( content.empty() )
1681 "Do you want to continue?" ) );
1687 tempScreen->
Append( text_item );
1698 bool annotateAutomatic =
m_frame->eeconfig()->m_AnnotatePanel.automatic;
1703 bool forceRemoveAnnotations =
false;
1723 std::vector<SCH_ITEM*> sortedLoadedItems;
1724 bool sheetsPasted =
false;
1729 if( destFn.IsRelative() )
1730 destFn.MakeAbsolute(
m_frame->Prj().GetProjectPath() );
1737 std::map<wxString, SCH_SCREEN*> loadedScreens;
1741 if( item.LastScreen() )
1742 loadedScreens[item.Last()->GetFileName()] = item.LastScreen();
1753 std::set<wxString> existingRefsSet;
1756 existingRefsSet.insert( ref.GetRef() );
1759 std::map<KIID, EDA_ITEM*> itemMap;
1763 std::map<SCH_SHEET_PATH, SCH_REFERENCE_LIST> pastedSymbols;
1764 std::map<SCH_SHEET_PATH, SCH_SHEET_LIST> pastedSheets;
1769 sortedLoadedItems.push_back( item );
1771 loadedItems.push_back( item );
1774 sort( sortedLoadedItems.begin(), sortedLoadedItems.end(),
1777 SCH_SHEET* firstSheet = static_cast<SCH_SHEET*>( firstItem );
1778 SCH_SHEET* secondSheet = static_cast<SCH_SHEET*>( secondItem );
1779 return StrNumCmp( firstSheet->GetName(), secondSheet->GetName(), false ) < 0;
1783 for(
SCH_ITEM* item : sortedLoadedItems )
1785 loadedItems.push_back( item );
1792 if( srcFn.IsRelative() )
1793 srcFn.MakeAbsolute(
m_frame->Prj().GetProjectPath() );
1797 if( hierarchy.
TestForRecursion( sheetHierarchy, destFn.GetFullPath( wxPATH_UNIX ) ) )
1799 auto msg = wxString::Format(
_(
"The pasted sheet '%s'\n"
1800 "was dropped because the destination already has "
1801 "the sheet or one of its subsheets as a parent." ),
1804 loadedItems.pop_back();
1810 tempScreen->
Clear(
false );
1812 for(
EDA_ITEM* item : loadedItems )
1818 wxCHECK2( schItem,
continue );
1833 wxCHECK2( currentScreen,
continue );
1857 if( !existingRefsSet.contains( instance.m_Reference ) )
1859 forceKeepAnnotations = !forceRemoveAnnotations;
1875 if( existingRefsSet.contains( instance.m_Reference ) )
1877 needsNewKiid =
true;
1885 const_cast<KIID&
>( item->m_Uuid ) =
KIID();
1891 pin->SetConnectivityDirty();
1901 pastedSymbols[sheetPath].AddItem( schReference );
1910 wxString baseName = nameField->
GetText();
1911 wxString candidateName = baseName;
1914 while( !baseName.IsEmpty() && wxIsdigit( baseName.Last() ) )
1916 number = baseName.Last() + number;
1917 baseName.RemoveLast();
1922 hierarchy =
m_frame->Schematic().Hierarchy();
1924 int uniquifier = std::max( 0, wxAtoi( number ) ) + 1;
1926 while( existingSheetNames.count( candidateName ) )
1927 candidateName = wxString::Format( wxT(
"%s%d" ), baseName, uniquifier++ );
1929 nameField->
SetText( candidateName );
1930 existingSheetNames.emplace( candidateName );
1938 if( !fn.IsAbsolute() )
1941 fn.Normalize(
FN_NORMALIZE_FLAGS | wxPATH_NORM_ENV_VARS, currentSheetFileName.GetPath() );
1945 if( !
m_frame->Schematic().Root().SearchHierarchy( fn.GetFullPath( wxPATH_UNIX ), &existingScreen ) )
1947 if( loadedScreens.count( sheet->
GetFileName() ) > 0 )
1948 existingScreen = loadedScreens.at( sheet->
GetFileName() );
1953 if( existingScreen )
1959 if( !
m_frame->LoadSheetFromFile( sheet, &pasteRoot, fn.GetFullPath() ) )
1966 sheetsPasted =
true;
1969 clipPath.push_back( sheet->
m_Uuid );
1978 pin->SetConnectivityDirty();
1986 ( forceKeepAnnotations && annotateAutomatic ),
1987 &pastedSheets[sheetPath], pastedSymbols );
1996 const_cast<KIID&
>( item->m_Uuid ) =
KIID();
1998 if( srcItem && destItem )
2025 m_frame->Schematic().RefreshHierarchy();
2033 wxString pageNum = wxString::Format(
"%d", page );
2036 pageNum = wxString::Format(
"%d", ++page );
2040 sheetInstance.
m_Path = pastedSheet.Path();
2043 sheetInstance.
m_Path.pop_back();
2049 wxCHECK2( sheet,
continue );
2052 hierarchy.push_back( pastedSheet );
2055 std::vector<KIID_PATH> instancesToRemove;
2059 if( !hierarchy.
HasPath( instance.m_Path ) )
2060 instancesToRemove.push_back( instance.m_Path );
2063 for(
const KIID_PATH& instancePath : instancesToRemove )
2068 m_frame->SetSheetNumberAndCount();
2072 hierarchy =
m_frame->Schematic().Hierarchy();
2075 std::map<SCH_SHEET_PATH, SCH_REFERENCE_LIST> annotatedSymbols;
2080 for(
size_t i = 0; i < pastedSymbols[sheetPath].GetCount(); i++ )
2083 annotatedSymbols[sheetPath].AddItem( pastedSymbols[sheetPath][i] );
2086 for(
const SCH_SHEET_PATH& pastedSheetPath : pastedSheets[sheetPath] )
2088 for(
size_t i = 0; i < pastedSymbols[pastedSheetPath].GetCount(); i++ )
2091 annotatedSymbols[pastedSheetPath].AddItem( pastedSymbols[pastedSheetPath][i] );
2096 if( !annotatedSymbols.empty() )
2103 annotatedSymbols[
path].SortByReferenceOnly();
2108 annotatedSymbols[
path].ReannotateDuplicates( existingRefs, annotateAlgo );
2112 annotatedSymbols[
path].ReannotateByOptions( annotateOrder, annotateAlgo, annotateStartNum,
2113 existingRefs,
false, &hierarchy );
2116 annotatedSymbols[
path].UpdateAnnotation();
2119 for(
size_t i = 0; i < annotatedSymbols[
path].GetCount(); i++ )
2120 existingRefs.
AddItem( annotatedSymbols[
path][i] );
2124 annotatedSymbols[pastedSheetPath].SortByReferenceOnly();
2125 annotatedSymbols[pastedSheetPath].SetRefDesTracker( schematicSettings.
m_refDesTracker );
2129 annotatedSymbols[pastedSheetPath].ReannotateDuplicates( existingRefs, annotateAlgo );
2133 annotatedSymbols[pastedSheetPath].ReannotateByOptions( annotateOrder, annotateAlgo,
2134 annotateStartNum, existingRefs,
2135 false, &hierarchy );
2138 annotatedSymbols[pastedSheetPath].UpdateAnnotation();
2141 for(
size_t i = 0; i < annotatedSymbols[pastedSheetPath].GetCount(); i++ )
2142 existingRefs.
AddItem( annotatedSymbols[pastedSheetPath][i] );
2147 m_frame->GetCurrentSheet().UpdateAllScreenReferences();
2165 for(
int i = loadedItems.size() - 1; i >= 0; i-- )
2171 loadedItems.erase( loadedItems.begin() + i );
2184 if( !selection.Empty() )
2188 int closest_dist = INT_MAX;
2193 int dist = ( eventPos - pt ).EuclideanNorm();
2195 if( dist < closest_dist )
2197 selection.SetReferencePoint( pt );
2198 closest_dist = dist;
2203 for(
EDA_ITEM* item : selection.Items() )
2215 processPt(
pin->GetPosition() );
2221 processPt( item->GetPosition() );
2225 if( closest_dist == INT_MAX )
2227 for(
EDA_ITEM* item : selection.Items() )
2229 switch( item->Type() )
2232 processPt(
static_cast<SCH_LINE*
>( item )->GetStartPoint() );
2233 processPt(
static_cast<SCH_LINE*
>( item )->GetEndPoint() );
2253 for(
int ii = 0; ii < shape->
GetPolyShape().TotalVertices(); ++ii )
2260 processPt( shape->
GetEnd() );
2268 processPt( item->GetPosition() );
2277 else if( selection.GetTopLeftItem()->Type() ==
SCH_GROUP_T )
2284 group->RunOnChildren(
2296 selection.SetReferencePoint( item->
GetPosition() );
2298 selection.SetReferencePoint(
group->GetPosition() );
2304 selection.SetReferencePoint( item->
GetPosition() );
2310 commit.
Push(
_(
"Paste" ) );
2314 m_frame->UpdateHierarchyNavigator();
2319 m_frame->RefreshNetNavigator();
2341 if( selection.GetSize() >= 1 )
2344 if( selection.IsHover() )
2352 tableTool->EditTable( aEvent );
2362 m_frame->ShowInfoBarError(
_(
"Symbols with broken library symbol links cannot be edited." ) );
2372 blocking_win->Close(
true );
2401 dlg.
m_FirstRefDes->SetValidator( wxTextValidator( wxFILTER_EMPTY ) );
2415 int startNum = atoi( startRef.
GetRefNumber().utf8_string().c_str() );
2430 if( ref.GetRef() == startRef.
GetRef() )
2432 int num = atoi( ref.GetRefNumber().utf8_string().c_str() );
2434 if( num >= startNum )
2437 wxString fullRef = ref.GetRef();
2443 ref.GetSymbol()->SetRef( &sheet,
From_UTF8( fullRef.c_str() ) );
2448 if( !commit.
Empty() )
2449 commit.
Push(
_(
"Increment Annotations" ) );
2552 m_frame->DrawCurrentSheetToClipboard();
2598 m_frame->GetCanvas()->Refresh();
2610 m_frame->GetCanvas()->Refresh();
2622 m_frame->GetCanvas()->Refresh();
2634 m_frame->GetCanvas()->Refresh();
2646 m_frame->GetCanvas()->Refresh();
2657 m_frame->GetCanvas()->Refresh();
2668 m_frame->GetCanvas()->GetView()->UpdateAllItemsConditionally(
2673 auto invalidateTextVars =
2676 if(
text->HasTextVars() )
2678 text->ClearRenderCache();
2679 text->ClearBoundingBoxCache();
2686 item->RunOnChildren(
2687 [&invalidateTextVars](
SCH_ITEM* aChild )
2690 invalidateTextVars(
text );
2694 if( item->GetExcludedFromSim() )
2699 invalidateTextVars(
text );
2704 m_frame->GetCanvas()->Refresh();
2716 m_frame->RefreshOperatingPointDisplay();
2717 m_frame->GetCanvas()->Refresh();
2729 m_frame->RefreshOperatingPointDisplay();
2730 m_frame->GetCanvas()->Refresh();
2744 m_frame->GetCanvas()->Refresh();
2760 m_frame->eeconfig()->m_Drawing.line_mode++;
2778 m_frame->ScriptingConsoleEnableDisable();
2786 if(
Pgm().GetCommonSettings()->m_Api.enable_server )
2787 Pgm().GetPluginManager().ReloadPlugins();
2800 std::map<KIID, EDA_ITEM*> ids;
2808 auto it = ids.find( aItem->m_Uuid );
2810 if( it != ids.end() && it->second != aItem )
2813 const_cast<KIID&
>( aItem->m_Uuid ) =
KIID();
2816 ids[ aItem->m_Uuid ] = aItem;
2828 processItem( item );
2841 processItem( item );
2845 item->RunOnChildren(
2848 processItem( item );
2865 errors += duplicates;
2866 details += wxString::Format(
_(
"%d duplicate IDs replaced.\n" ), duplicates );
2869 m_frame->Schematic().RefreshHierarchy();
2876 wxString msg = wxString::Format(
_(
"%d potential problems repaired." ), errors );
2892 if( !
Pgm().GetCommonSettings()->m_Input.hotkey_feedback )
2896 int currentIdx =
m_toolMgr->GetSettings()->m_Window.grid.last_size_idx;
2898 wxArrayString gridsLabels;
2901 gridsLabels.Add(
grid.UserUnitsMessageText(
m_frame ) );
2903 if( !
m_frame->GetHotkeyPopup() )
2909 popup->
Popup(
_(
"Grid" ), gridsLabels, currentIdx );
2926 if( selection.Size() != 1 || selection[0]->Type() !=
SCH_GROUP_T )
2931 if( !
group->HasDesignBlockLink() )
2936 std::unique_ptr<DESIGN_BLOCK> designBlock( designBlockPane->
GetDesignBlock(
group->GetDesignBlockLibId(),
2942 msg.Printf(
_(
"Could not find design block %s." ),
group->GetDesignBlockLibId().GetUniStringLibId() );
2943 m_frame->GetInfoBar()->ShowMessageFor( msg, 5000, wxICON_WARNING );
2947 if( designBlock->GetSchematicFile().IsEmpty() )
2950 msg.Printf(
_(
"Design block %s does not have a schematic file." ),
2951 group->GetDesignBlockLibId().GetUniStringLibId() );
2952 m_frame->GetInfoBar()->ShowMessageFor( msg, 5000, wxICON_WARNING );
2973 if( selection.Size() != 1 || selection[0]->Type() !=
SCH_GROUP_T )
2978 if( !
group->HasDesignBlockLink() )
2983 std::unique_ptr<DESIGN_BLOCK> designBlock( designBlockPane->
GetDesignBlock(
group->GetDesignBlockLibId(),
2989 msg.Printf(
_(
"Could not find design block %s." ),
group->GetDesignBlockLibId().GetUniStringLibId() );
2990 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)
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.
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...
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.
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 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 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 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 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
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 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 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 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 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 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
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
Class to handle modifications to the symbol libraries.
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.
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
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...
@ 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().