88#include <wx/filedlg.h>
90#include <wx/treectrl.h>
92#include <wx/textdlg.h>
103#include <wx/filefn.h>
104#include <wx/mstream.h>
105#include <wx/clipbrd.h>
106#include <wx/imagpng.h>
118constexpr int clipboardMaxBitmapSize = 4096;
119constexpr double clipboardBboxInflation = 0.02;
122bool loadFileToBuffer(
const wxString& aFileName, wxMemoryBuffer& aBuffer )
124 wxFFile file( aFileName, wxS(
"rb" ) );
126 if( !file.IsOpened() )
129 wxFileOffset size = file.Length();
134 void* data = aBuffer.GetWriteBuf( size );
136 if( file.Read( data, size ) !=
static_cast<size_t>( size ) )
138 aBuffer.UngetWriteBuf( 0 );
142 aBuffer.UngetWriteBuf( size );
147std::vector<SCH_ITEM*> collectSelectionItems(
const SCH_SELECTION& aSelection )
149 std::vector<SCH_ITEM*> items;
150 items.reserve( aSelection.
GetSize() );
157 items.push_back( schItem );
170 bbox.
GetHeight() * clipboardBboxInflation );
176bool generateHtmlFromPngData(
const wxMemoryBuffer& aPngData, wxMemoryBuffer& aHtmlBuffer )
178 if( aPngData.GetDataLen() == 0 )
181 std::vector<uint8_t> pngVec(
static_cast<const uint8_t*
>( aPngData.GetData() ),
182 static_cast<const uint8_t*
>( aPngData.GetData() ) + aPngData.GetDataLen() );
184 std::vector<uint8_t> base64Data;
187 std::string html =
"<img src=\"data:image/png;base64,";
188 html.append(
reinterpret_cast<const char*
>( base64Data.data() ), base64Data.size() );
189 html.append(
"\" />" );
191 aHtmlBuffer.SetDataLen( 0 );
192 aHtmlBuffer.AppendData( html.data(), html.size() );
199 wxMemoryBuffer& aBuffer )
204 renderSettings.m_ShowHiddenPins =
false;
205 renderSettings.m_ShowHiddenFields =
false;
207 std::unique_ptr<SVG_PLOTTER> plotter = std::make_unique<SVG_PLOTTER>();
208 plotter->SetRenderSettings( &renderSettings );
214 plotter->SetPageSettings( pageInfo );
215 plotter->SetColorMode(
true );
218 plotter->SetViewport( plot_offset,
schIUScale.IU_PER_MILS / 10, 1.0,
false );
219 plotter->SetCreator( wxT(
"Eeschema-SVG" ) );
221 wxFileName tempFile( wxFileName::CreateTempFileName( wxS(
"kicad_svg" ) ) );
223 if( !plotter->OpenFile( tempFile.GetFullPath() ) )
225 wxRemoveFile( tempFile.GetFullPath() );
233 plotter->StartPlot( wxT(
"1" ) );
234 aFrame->
GetScreen()->
Plot( plotter.get(), plotOpts, collectSelectionItems( aSelection ) );
238 bool ok = loadFileToBuffer( tempFile.GetFullPath(), aBuffer );
239 wxRemoveFile( tempFile.GetFullPath() );
250 int aWidth,
int aHeight,
bool aUseAlpha,
bool aIncludeDrawingSheet )
252 wxImage
image( aWidth, aHeight,
false );
257 double actualPPI = std::max( actualPPI_x, actualPPI_y );
259 VECTOR2D pageSizeIn( (
double) aWidth / actualPPI, (
double) aHeight / actualPPI );
271 std::unique_ptr<KIGFX::SCH_PAINTER> painter = std::make_unique<KIGFX::SCH_PAINTER>( gal.get() );
272 std::unique_ptr<KIGFX::VIEW> view = std::make_unique<KIGFX::VIEW>();
274 painter->SetSchematic( &aFrame->
Schematic() );
275 view->SetGAL( gal.get() );
276 view->SetPainter( painter.get() );
278 view->SetScale( 1.0 );
281 gal->SetSheetSize( pageSizeIn );
285 std::vector<std::unique_ptr<SCH_ITEM>> clonedItems;
286 clonedItems.reserve( aSelection.
GetSize() );
296 clonedItems.emplace_back( clone );
313 view->SetLayerVisible( i,
true );
320 std::unique_ptr<DS_PROXY_VIEW_ITEM> drawingSheet;
322 if( aIncludeDrawingSheet )
340 drawingSheet->SetVariantName(
TO_UTF8( currentVariant ) );
341 drawingSheet->SetVariantDesc(
TO_UTF8( variantDesc ) );
343 view->Add( drawingSheet.get() );
346 view->SetCenter( aBBox.
Centre() );
347 view->UseDrawPriority(
true );
363 const BOX2I& aBBox,
bool aUseAlpha,
bool aIncludeDrawingSheet )
365 const double c_targetPPI = 300;
366 const double c_targetPixelsPerMM = c_targetPPI / 25.4;
370 if( size.
x <= 0 || size.
y <= 0 )
377 if( bitmapWidth > clipboardMaxBitmapSize || bitmapHeight > clipboardMaxBitmapSize )
379 double scaleDown = (double) clipboardMaxBitmapSize / std::max( bitmapWidth, bitmapHeight );
380 bitmapWidth =
KiROUND( bitmapWidth * scaleDown );
381 bitmapHeight =
KiROUND( bitmapHeight * scaleDown );
384 if( bitmapWidth <= 0 || bitmapHeight <= 0 )
387 wxImage
result = renderSelectionToBitmap( aFrame, aSelection, aBBox, bitmapWidth, bitmapHeight, aUseAlpha,
388 aIncludeDrawingSheet );
427 wxFileDialog dlg(
m_frame,
_(
"Schematic Files" ), curr_fn.GetPath(), curr_fn.GetFullName(),
432 if( dlg.ShowModal() == wxID_CANCEL )
437 m_frame->saveSchematicFile( curr_sheet, newFilename );
449 bool wasOnSubsheet = (
m_frame->GetCurrentSheet().Last() != &root );
464 msg.Printf(
_(
"Revert '%s' (and all sub-sheets) to last version saved?" ), schematic.GetFileName() );
485 m_frame->OpenProjectFiles( std::vector<wxString>( 1, schematic.GetFileName() ),
KICTL_REVERT );
493 m_frame->ShowSchematicSetupDialog();
515 m_frame->GetCanvas()->GetView()->MarkDirty();
517 m_frame->GetCanvas()->Refresh();
523 m_frame->RollbackSchematicFromUndo();
534 if( schematic.HasNoFullyDefinedLibIds() )
546 m_frame->GetCanvas()->GetBackend() );
555 m_frame->GetCanvas()->GetBackend() );
573 if( aRunningOnDemand )
577 schematic.UpdateSymbolLinks();
583 m_frame->GetCanvas()->Refresh();
597 m_frame->GetCanvas()->Refresh(
true );
646 m_frame->SendSelectItemsToPcb( selection.GetItemsSortedBySelectionOrder(), aForce );
652 bool savePowerSymbols =
false;
658 targetLib =
m_frame->SelectLibrary(
_(
"Export Symbols" ),
_(
"Export symbols to library:" ),
659 { {
_(
"Include power symbols in export" ), &savePowerSymbols },
660 {
_(
"Update schematic symbols to link to exported symbols" ), &map }
663 if( targetLib.empty() )
670 std::map<LIB_ID, LIB_SYMBOL*> libSymbols;
671 std::map<LIB_ID, std::vector<SCH_SYMBOL*>> symbolMap;
673 for(
size_t i = 0; i < symbols.
GetCount(); ++i )
679 if( libSymbols.count(
id ) )
682 "Two symbols have the same LIB_ID but are different!" );
686 libSymbols[id] = libSymbol;
689 symbolMap[id].emplace_back( symbol );
696 auto optRow = adapter->
GetRow( targetLib );
697 wxCHECK( optRow, 0 );
706 for(
const std::pair<const LIB_ID, LIB_SYMBOL*>& it : libSymbols )
713 pi->SaveSymbol( dest.GetFullPath(), newSym );
717 msg.Printf(
_(
"Error saving symbol %s to library '%s'." ), newSym->
GetName(), row->
Nickname() );
718 msg += wxS(
"\n\n" ) + ioe.
What();
728 for(
SCH_SYMBOL* symbol : symbolMap[it.first] )
732 wxCHECK2( parentScreen,
continue );
735 symbol->SetLibId(
id );
743 std::set<SCH_SCREEN*> processedScreens;
749 if( processedScreens.find( ( screen ) ) == processedScreens.end() )
751 processedScreens.insert( screen );
756 commit.
Push( wxS(
"Update Library Identifiers" ) );
763#define HITTEST_THRESHOLD_PIXELS 5
775 blocking_win->Close(
true );
797 wxString variant =
m_frame->Schematic().GetCurrentVariant();
808 if( !symbol || !libPin )
816 std::vector<EMBEDDED_FILES*> embeddedFilesStack;
817 embeddedFilesStack.push_back(
m_frame->Schematic().GetEmbeddedFiles() );
820 embeddedFilesStack.push_back( symbolEmbeddedFile );
831 std::vector<std::string> currentNames =
model.SpiceGenerator().CurrentNames( spiceItem );
833 if( currentNames.size() == 0 )
837 else if( currentNames.size() == 1 )
845 int modelPinIndex =
model.FindModelPinIndex( libPin->
GetNumber().ToStdString() );
849 wxString
name = currentNames.at( modelPinIndex );
860 else if( item->
IsType( { SCH_ITEM_LOCATE_WIRE_T } ) || item->
IsType( { SCH_JUNCTION_T } ) )
880 collector.
Collect(
m_frame->GetScreen(), { SCH_ITEM_LOCATE_WIRE_T,
882 SCH_SHEET_PIN_T }, aPos );
914 wxString connectionName = ( conn ) ? conn->
Name() : wxString( wxS(
"" ) );
916 if(
m_frame->GetHighlightedConnection() != connectionName )
918 m_frame->SetHighlightedConnection( connectionName );
926 [
this](
const int& aFinalState )
931 if( !
m_frame->GetHighlightedConnection().IsEmpty() )
933 m_frame->SetHighlightedConnection( wxEmptyString );
976 item = item->GetParent();
989 blocking_win->Close(
true );
991 static_cast<SIMULATOR_FRAME*
>( simFrame )->AddTuner( sheetPath, symbol );
1005 collector.
Collect(
m_frame->GetScreen(), { SCH_SYMBOL_T, SCH_FIELD_T }, aPos );
1013 item =
static_cast<SCH_FIELD*
>( item )->GetParentSymbol();
1028 [
this](
const int& aFinalState )
1053 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"highlightNet: pos=(%f,%f) clear=%d", aPosition.
x, aPosition.
y,
1054 ( aPosition ==
CLEAR ) );
1062 if( aPosition !=
CLEAR )
1066 if(
erc.TestDuplicateSheetNames(
false ) > 0 )
1068 wxMessageBox(
_(
"Error: duplicate sub-sheet names found in current sheet." ) );
1074 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"highlightNet: item=%p type=%d", (
void*) item,
1075 item ? (
int) item->
Type() : -1 );
1080 if( item->IsConnectivityDirty() )
1084 symbol =
dynamic_cast<SCH_SYMBOL*
>( item->GetParent() );
1088 std::vector<SCH_PIN*> pins = symbol->
GetPins();
1090 if( pins.size() == 1 )
1091 conn = pins[0]->Connection();
1095 conn = item->Connection();
1096 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"highlightNet: conn=%p name=%s",
1097 (
void*) conn, conn ? conn->Name() : wxString(
"" ) );
1103 wxString connName = ( conn ) ? conn->Name() : wxString( wxS(
"" ) );
1107 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"highlightNet: no connection under cursor" );
1108 editFrame->SetStatusText( wxT(
"" ) );
1113 editorControl->SetHighlightBusMembers(
false );
1121 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"highlightNet: setting highlighted connection to %s",
1123 editorControl->SetHighlightBusMembers(
false );
1132 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"highlightNet: same net re-invoked; trying to expand to chain" );
1140 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"highlightNet: chains not built; rebuilding before expand" );
1148 wxString chainName = sig->GetName();
1149 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"highlightNet: expanding to chain '%s' (nets=%zu)",
1150 chainName, sig->GetNets().size() );
1153 editorControl->SetHighlightBusMembers(
false );
1158 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"highlightNet: no chain found; toggling bus members" );
1159 editorControl->SetHighlightBusMembers( !editorControl->GetHighlightBusMembers() );
1168 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"highlightNet: no graph; toggling bus members" );
1169 editorControl->SetHighlightBusMembers( !editorControl->GetHighlightBusMembers() );
1180 editorControl->UpdateNetHighlighting(
dummy );
1181 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"highlightNet: done" );
1205 wxString netChainName;
1208 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"HighlightNetChain: cursor=(%f,%f) gridSnap=%d",
1210 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"HighlightNetChain: item=%p type=%d",
1211 (
void*) item, item ? (
int) item->Type() : -1 );
1215 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"HighlightNetChain: chains not built; calling Recalculate(unconditional=true)" );
1223 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"HighlightNetChain: conn=%p name=%s",
1224 (
void*) conn, conn ? conn->
Name() : wxString(
"" ) );
1232 netChainName = sig->
GetName();
1233 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"HighlightNetChain: found chain=%s", netChainName );
1237 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"HighlightNetChain: no chain for net=%s; falling back to net highlight", conn->
Name() );
1244 if( !netChainName.IsEmpty() )
1246 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"HighlightNetChain: SetHighlightedNetChain(%s)", netChainName );
1257 const auto& nets =
chain->GetNets();
1267 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"HighlightNetChain: UpdateNetHighlighting done" );
1306 std::vector<SCH_PIN*> pins = symbol->
GetPins( &schematic.CurrentSheet() );
1308 if( pins.size() != 2 )
1339 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"RemoveFromNetChain: disabled=%d, rebuilding chains", disabled );
1342 m_frame->GetCanvas()->Refresh();
1355 m_frame->SetHighlightedNetChain( wxEmptyString );
1367 std::vector<std::pair<SCH_CONNECTION*, VECTOR2D>> selectedConns;
1376 selectedConns.emplace_back( conn, item->GetPosition() );
1379 if( selectedConns.empty() )
1381 m_frame->ShowInfoBarError(
_(
"No nets selected." ) );
1388 const auto getNetNamePattern =
1391 wxString netName = aConn.Name();
1398 return prefix + wxT(
"*" );
1400 return prefix + wxT(
".*" );
1405 return std::nullopt;
1411 std::set<wxString> netNames;
1413 for(
const auto& [conn, pos] : selectedConns )
1415 std::optional<wxString> netNamePattern = getNetNamePattern( *conn );
1417 if( !netNamePattern )
1420 m_frame->ShowInfoBarError(
_(
"All selected nets must be labeled to assign a netclass." ) );
1424 netNames.insert( *netNamePattern );
1427 wxCHECK( !netNames.empty(), 0 );
1430 [&](
const std::vector<wxString>& aNetNames )
1432 for( SCH_ITEM* item : screen->Items() )
1434 bool redraw = item->IsBrightened();
1435 SCH_CONNECTION* itemConn = item->Connection();
1437 if( itemConn && alg::contains( aNetNames, itemConn->Name() ) )
1438 item->SetBrightened();
1440 item->ClearBrightened();
1442 redraw |= item->IsBrightened();
1444 if( item->Type() == SCH_SYMBOL_T )
1446 SCH_SYMBOL* symbol = static_cast<SCH_SYMBOL*>( item );
1448 redraw |= symbol->HasBrightenedPins();
1450 symbol->ClearBrightenedPins();
1452 for( SCH_PIN* pin : symbol->GetPins() )
1454 SCH_CONNECTION* pin_conn = pin->Connection();
1456 if( pin_conn && alg::contains( aNetNames, pin_conn->Name() ) )
1458 pin->SetBrightened();
1463 else if( item->Type() == SCH_SHEET_T )
1465 for( SCH_SHEET_PIN* pin : static_cast<SCH_SHEET*>( item )->GetPins() )
1467 SCH_CONNECTION* pin_conn = pin->Connection();
1469 redraw |= pin->IsBrightened();
1471 if( pin_conn && alg::contains( aNetNames, pin_conn->Name() ) )
1472 pin->SetBrightened();
1474 pin->ClearBrightened();
1476 redraw |= pin->IsBrightened();
1481 getView()->Update( item, KIGFX::VIEW_UPDATE_FLAGS::REPAINT );
1484 m_frame->GetCanvas()->ForceRefresh();
1487 if( dlg.ShowModal() )
1489 getView()->UpdateAllItemsConditionally(
1494 auto invalidateTextVars =
1497 if(
text->HasTextVars() )
1499 text->ClearRenderCache();
1500 text->ClearBoundingBoxCache();
1507 if(
dynamic_cast<SCH_LINE*
>( aItem ) )
1518 item->RunOnChildren(
1519 [&invalidateTextVars](
SCH_ITEM* aChild )
1522 invalidateTextVars(
text );
1527 m_frame->GetScreen()->Update( item,
false );
1531 invalidateTextVars(
text );
1546 if( !selectionTool )
1557 if( !conn->GetNetName().IsEmpty() )
1559 netName = conn->GetNetName();
1566 if( netName.IsEmpty() )
1567 netName =
m_frame->GetHighlightedConnection();
1569 if( netName.IsEmpty() )
1571 m_frame->ShowInfoBarError(
_(
"No connected net selected." ) );
1575 m_frame->FindNetInInspector( netName );
1588 wxString selectedName =
m_frame->GetHighlightedConnection();
1590 std::set<wxString> connNames;
1591 std::vector<EDA_ITEM*> itemsToRedraw;
1593 wxCHECK( screen && connectionGraph, 0 );
1595 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"UpdateNetHighlighting: highlightedConn='%s' highlightedSignal='%s'",
1596 selectedName,
m_frame->GetHighlightedNetChain() );
1598 if( !selectedName.IsEmpty() )
1600 connNames.emplace( selectedName );
1610 for(
const SCH_ITEM* item : sg->GetItems() )
1612 wxCHECK2( item,
continue );
1616 for(
const std::shared_ptr<SCH_CONNECTION>& member : connection->AllMembers() )
1619 connNames.emplace( member->Name() );
1629 for(
const wxString& connName : std::vector<wxString>( connNames.begin(), connNames.end() ) )
1633 for(
const auto& [
_, bus_sgs] : sg->GetBusParents() )
1636 connNames.emplace( bus_sg->GetNetName() );
1640 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"UpdateNetHighlighting: connNames after connection='%zu'", connNames.size() );
1643 if( !
m_frame->GetHighlightedNetChain().IsEmpty() )
1647 for(
const wxString& n : sig->GetNets() )
1648 connNames.emplace( n );
1649 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"UpdateNetHighlighting: added %zu nets from chain '%s'",
1650 sig->GetNets().size(),
m_frame->GetHighlightedNetChain() );
1656 if( !item || !item->IsConnectable() )
1671 if( !
pin->IsBrightened() && connNames.count( pin_conn->
Name() ) )
1673 pin->SetBrightened();
1674 redrawItem = symbol;
1676 else if(
pin->IsBrightened() && !connNames.count( pin_conn->
Name() ) )
1678 pin->ClearBrightened();
1679 redrawItem = symbol;
1682 else if(
pin->IsBrightened() )
1684 pin->ClearBrightened();
1685 redrawItem = symbol;
1705 redrawItem = symbol;
1710 redrawItem = symbol;
1716 redrawItem = symbol;
1727 wxCHECK2(
pin,
continue );
1733 if( !
pin->IsBrightened() && connNames.count( pin_conn->
Name() ) )
1735 pin->SetBrightened();
1738 else if(
pin->IsBrightened() && !connNames.count( pin_conn->
Name() ) )
1740 pin->ClearBrightened();
1744 else if(
pin->IsBrightened() )
1746 pin->ClearBrightened();
1757 if( !item->IsBrightened() && connNames.count( itemConn->
Name() ) )
1759 item->SetBrightened();
1762 else if( item->IsBrightened() && !connNames.count( itemConn->
Name() ) )
1764 item->ClearBrightened();
1768 else if( item->IsBrightened() )
1770 item->ClearBrightened();
1776 itemsToRedraw.push_back( redrawItem );
1779 if( itemsToRedraw.size() )
1781 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"UpdateNetHighlighting: itemsToRedraw=%zu", itemsToRedraw.size() );
1785 for(
EDA_ITEM* redrawItem : itemsToRedraw )
1788 m_frame->GetCanvas()->Refresh();
1821 auto ids = aEvent.
Parameter<std::pair<wxString, wxString>>();
1822 wxString oldStr = ids.first;
1823 wxString newStr = ids.second;
1824 KIID oldPin( oldStr );
1825 KIID newPin( newStr );
1828 if( !sig.IsEmpty() )
1841 if( !
pin || !
pin->Connection() )
1849 wxString newName = wxGetTextFromUser(
_(
"Net chain name:" ),
_(
"Name Net Chain" ), sig->GetName() );
1851 if( !newName.IsEmpty() && newName != sig->GetName() )
1853 sig->SetName( newName );
1870 if( selection.GetSize() != 2 )
1876 if( !
pinA || !pinB )
1885 DisplayError( editFrame,
_(
"No potential net chain connects the selected pins." ) );
1893 wxString msg = wxString::Format(
_(
"Create Net Chain between %s:%s and %s:%s" ),
1912 int dx = bbox.
GetWidth() / 4;
if( dx < 100 ) dx = 100;
1913 int dy = bbox.
GetHeight() / 4;
if( dy < 100 ) dy = 100;
1915 if(
auto canvas = editFrame->
GetCanvas() )
1917 canvas->GetView()->SetCenter( bbox.
GetCenter() );
1919 auto view = canvas->GetView();
1922 BOX2D viewBox = view->GetBoundary();
1925 double scale = std::min( scaleX, scaleY );
1927 view->SetScale(
scale );
1931 wxString
name = wxGetTextFromUser( msg,
_(
"Create Net Chain" ), suggestion, editFrame );
1932 if(
name.IsEmpty() )
1949 editFrame->Refresh();
1974 std::vector<SCH_SYMBOL*> symbols;
1979 symbols.push_back( sym );
1982 if( symbols.size() >= 1 )
1985 if( symbols.size() >= 2 )
1989 if( symbols.empty() && sel.
GetSize() == 1 )
1995 if(
pin->Connection() )
2000 && schItem->
IsType( { SCH_ITEM_LOCATE_WIRE_T, SCH_ITEM_LOCATE_BUS_T } )
2019 if(
m_frame->GetUndoCommandCount() <= 0 )
2028 wxCHECK( undo_list, 0 );
2030 m_frame->PutDataInPreviousState( undo_list );
2034 m_frame->PushCommandToRedoList( undo_list );
2038 m_frame->GetCanvas()->Refresh();
2049 if(
m_frame->GetRedoCommandCount() == 0 )
2061 m_frame->PutDataInPreviousState( list );
2064 list->ReversePickersListOrder();
2065 m_frame->PushCommandToUndoList( list );
2069 m_frame->GetCanvas()->Refresh();
2082 if( selection.Empty() )
2085 if( aUseDuplicateClipboard )
2088 selection.SetScreen(
m_frame->GetScreen() );
2091 for(
EDA_ITEM* item : selection.GetItems() )
2098 else if( item->Type() ==
SCH_FIELD_T && selection.IsHover() )
2102 selection.Add( item->GetParent() );
2107 selection.Remove( item );
2112 static_cast<SCH_ITEM*
>( item )->RunOnChildren(
2115 selection.Add( aChild );
2126 plugin.
Format( &selection, &selPath, schematic, &formatter,
true );
2128 std::string prettyData = formatter.
GetString();
2131 if( !aUseDuplicateClipboard )
2135 result &= wxTheClipboard->Open();
2139 wxDataObjectComposite* data =
new wxDataObjectComposite();
2142 wxCustomDataObject* kicadObj =
new wxCustomDataObject( wxDataFormat(
"application/kicad" ) );
2143 kicadObj->SetData( prettyData.size(), prettyData.data() );
2144 data->Add( kicadObj );
2146 BOX2I selectionBox = expandedSelectionBox( selection );
2151 wxImage
image = renderSelectionToImageForClipboard(
m_frame, selection, selectionBox,
true,
false );
2152 wxMemoryBuffer pngBuffer;
2159 wxMemoryBuffer htmlBuffer;
2161 if( generateHtmlFromPngData( pngBuffer, htmlBuffer ) )
2163 wxCustomDataObject* htmlObj =
new wxCustomDataObject( wxDF_HTML );
2164 htmlObj->SetData( htmlBuffer.GetDataLen(), htmlBuffer.GetData() );
2165 data->Add( htmlObj );
2170 wxLogDebug( wxS(
"Failed to generate bitmap for clipboard" ) );
2174 wxMemoryBuffer svgBuffer;
2176 if( plotSelectionToSvg(
m_frame, selection, selectionBox, svgBuffer ) )
2178 wxCustomDataObject* svgObj =
new wxCustomDataObject( wxDataFormat(
"image/svg+xml" ) );
2179 svgObj->SetData( svgBuffer.GetDataLen(), svgBuffer.GetData() );
2180 data->Add( svgObj );
2184 wxLogDebug( wxS(
"Failed to generate SVG for clipboard" ) );
2189 data->Add(
new wxTextDataObject( wxString::FromUTF8( prettyData ) ) );
2191 result &= wxTheClipboard->SetData( data );
2192 result &= wxTheClipboard->Flush();
2193 wxTheClipboard->Close();
2197 if( selection.IsHover() )
2200 if( aUseDuplicateClipboard )
2233 wxTextEntry* textEntry =
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
2250 wxTextEntry* textEntry =
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
2269 if( selection.Empty() )
2274 if( selection.IsHover() )
2282 const KIID_PATH& aClipPath,
bool aForceKeepAnnotations )
2284 wxCHECK(
m_frame && aSymbol, );
2287 bool instanceFound =
false;
2294 if( ( tmp.m_Path.empty() && aClipPath.empty() ) || ( !aClipPath.empty() && tmp.m_Path.
EndsWith( aClipPath ) ) )
2297 instanceFound =
true;
2299 wxLogTrace(
traceSchPaste, wxS(
"Pasting found symbol instance with reference %s, unit %d:\n"
2300 "\tClipboard path: %s\n"
2301 "\tSymbol UUID: %s." ),
2312 pasteLookupPath.push_back( aSymbol->
m_Uuid );
2314 if( !instanceFound )
2316 wxLogTrace(
traceSchPaste, wxS(
"Clipboard symbol instance **not** found:\n\tClipboard path: %s\n"
2317 "\tSymbol UUID: %s." ),
2337 if( !aForceKeepAnnotations )
2346 const KIID_PATH& aClipPath,
bool aForceKeepAnnotations,
2350 wxCHECK( aSheet && aPastedSheets, aPastePath );
2355 aPastedSheets->push_back( sheetPath );
2364 if( item->IsConnectable() )
2365 item->SetConnectivityDirty();
2371 wxCHECK2( symbol,
continue );
2385 pin->SetConnectivityDirty();
2395 wxCHECK2( subsheet,
continue );
2408 pin->SetConnectivityDirty();
2413 newClipPath.push_back( subsheet->
m_Uuid );
2415 updatePastedSheet( subsheet, sheetPath, newClipPath, aForceKeepAnnotations, aPastedSheets, aPastedSymbols );
2427 wxCHECK( aScreen, );
2435 wxCHECK2( symbol,
continue );
2439 KIID_PATH pathWithSymbol = symbolInstance.m_Path;
2441 pathWithSymbol.push_back( symbol->
m_Uuid );
2456 wxCHECK2( symbol,
continue );
2458 std::vector<KIID_PATH> instancePathsToRemove;
2462 if( instance.m_ProjectName !=
m_frame->Prj().GetProjectName() || instance.m_Path.empty() )
2463 instancePathsToRemove.emplace_back( instance.m_Path );
2467 symbol->RemoveInstance(
path );
2474 wxTextEntry* textEntry =
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
2483 std::string content;
2498 if( content.empty() )
2504 auto bitmap = std::make_unique<SCH_BITMAP>();
2506 if( bitmap->GetReferenceImage().SetImage( clipImg->ConvertToImage() ) )
2534 "Do you want to continue?" ) );
2540 tempScreen->
Append( text_item );
2546 bool hasTableCells =
false;
2548 for(
EDA_ITEM* item : currentSelection )
2552 hasTableCells =
true;
2565 clipboardTable =
static_cast<SCH_TABLE*
>( item );
2570 if( clipboardTable )
2588 commit.
Push(
_(
"Paste Cells" ) );
2608 bool annotateAutomatic =
m_frame->eeconfig()->m_AnnotatePanel.automatic;
2613 bool forceRemoveAnnotations =
false;
2633 std::vector<SCH_ITEM*> sortedLoadedItems;
2634 bool sheetsPasted =
false;
2639 if( destFn.IsRelative() )
2640 destFn.MakeAbsolute(
m_frame->Prj().GetProjectPath() );
2647 std::map<wxString, SCH_SCREEN*> loadedScreens;
2651 if( item.LastScreen() )
2652 loadedScreens[item.Last()->GetFileName()] = item.LastScreen();
2663 std::set<wxString> existingRefsSet;
2666 existingRefsSet.insert( ref.GetRef() );
2669 std::map<KIID, EDA_ITEM*> itemMap;
2673 std::map<SCH_SHEET_PATH, SCH_REFERENCE_LIST> pastedSymbols;
2674 std::map<SCH_SHEET_PATH, SCH_SHEET_LIST> pastedSheets;
2679 sortedLoadedItems.push_back( item );
2681 loadedItems.push_back( item );
2684 sort( sortedLoadedItems.begin(), sortedLoadedItems.end(),
2687 SCH_SHEET* firstSheet = static_cast<SCH_SHEET*>( firstItem );
2688 SCH_SHEET* secondSheet = static_cast<SCH_SHEET*>( secondItem );
2689 return StrNumCmp( firstSheet->GetName(), secondSheet->GetName(), false ) < 0;
2693 for(
SCH_ITEM* item : sortedLoadedItems )
2695 loadedItems.push_back( item );
2702 if( srcFn.IsRelative() )
2703 srcFn.MakeAbsolute(
m_frame->Prj().GetProjectPath() );
2707 if( hierarchy.
TestForRecursion( sheetHierarchy, destFn.GetFullPath( wxPATH_UNIX ) ) )
2709 auto msg = wxString::Format(
_(
"The pasted sheet '%s'\n"
2710 "was dropped because the destination already has "
2711 "the sheet or one of its subsheets as a parent." ),
2714 loadedItems.pop_back();
2720 tempScreen->
Clear(
false );
2722 for(
EDA_ITEM* item : loadedItems )
2728 wxCHECK2( schItem,
continue );
2746 wxCHECK2( currentScreen,
continue );
2760 if( it !=
end && clipLibSymbol )
2765 if( clipLibSymbol->
IsLocalPower() != it->second->IsLocalPower()
2766 || clipLibSymbol->
IsGlobalPower() != it->second->IsGlobalPower() )
2768 libSymbol =
new LIB_SYMBOL( *clipLibSymbol );
2775 else if( it !=
end )
2779 else if( clipLibSymbol )
2781 libSymbol =
new LIB_SYMBOL( *clipLibSymbol );
2791 if( !existingRefsSet.contains( instance.m_Reference ) )
2793 forceKeepAnnotations = !forceRemoveAnnotations;
2809 if( existingRefsSet.contains( instance.m_Reference ) )
2811 needsNewKiid =
true;
2819 const_cast<KIID&
>( item->m_Uuid ) =
KIID();
2825 pin->SetConnectivityDirty();
2835 pastedSymbols[sheetPath].AddItem( schReference );
2844 wxString baseName = nameField->
GetText();
2845 wxString candidateName = baseName;
2848 while( !baseName.IsEmpty() && wxIsdigit( baseName.Last() ) )
2850 number = baseName.Last() + number;
2851 baseName.RemoveLast();
2856 hierarchy =
m_frame->Schematic().Hierarchy();
2858 int uniquifier = std::max( 0, wxAtoi( number ) ) + 1;
2860 while( existingSheetNames.count( candidateName ) )
2861 candidateName = wxString::Format( wxT(
"%s%d" ), baseName, uniquifier++ );
2863 nameField->
SetText( candidateName );
2864 existingSheetNames.emplace( candidateName );
2872 if( !fn.IsAbsolute() )
2875 fn.Normalize(
FN_NORMALIZE_FLAGS | wxPATH_NORM_ENV_VARS, currentSheetFileName.GetPath() );
2879 if( !
m_frame->Schematic().Root().SearchHierarchy( fn.GetFullPath( wxPATH_UNIX ), &existingScreen ) )
2881 if( loadedScreens.count( sheet->
GetFileName() ) > 0 )
2882 existingScreen = loadedScreens.at( sheet->
GetFileName() );
2887 if( existingScreen )
2893 if( !
m_frame->LoadSheetFromFile( sheet, &pasteRoot, fn.GetFullPath() ) )
2900 sheetsPasted =
true;
2903 clipPath.push_back( sheet->
m_Uuid );
2912 pin->SetConnectivityDirty();
2920 ( forceKeepAnnotations && annotateAutomatic ),
2921 &pastedSheets[sheetPath], pastedSymbols );
2930 const_cast<KIID&
>( item->m_Uuid ) =
KIID();
2932 if( srcItem && destItem )
2958 m_frame->Schematic().RefreshHierarchy();
2967 wxString pageNum = wxString::Format(
"%d", page );
2970 pageNum = wxString::Format(
"%d", ++page );
2972 int virtualPageNumber = page;
2979 pastedSheet.SetVirtualPageNumber( virtualPageNumber );
2983 sheetInstance.
m_Path = pastedSheet.Path();
2986 sheetInstance.
m_Path.pop_back();
2992 wxCHECK2( sheet,
continue );
2995 hierarchy.push_back( pastedSheet );
2998 std::vector<KIID_PATH> instancesToRemove;
3002 if( !hierarchy.
HasPath( instance.m_Path ) )
3003 instancesToRemove.push_back( instance.m_Path );
3006 for(
const KIID_PATH& instancePath : instancesToRemove )
3011 for(
auto&[
path, refs] : pastedSymbols )
3015 if( ref.GetSheetPath() == pastedSheet )
3017 ref.GetSheetPath().SetVirtualPageNumber( virtualPageNumber );
3018 ref.SetSheetNumber( virtualPageNumber );
3025 m_frame->SetSheetNumberAndCount();
3029 hierarchy =
m_frame->Schematic().Hierarchy();
3032 std::map<SCH_SHEET_PATH, SCH_REFERENCE_LIST> annotatedSymbols;
3037 for(
size_t i = 0; i < pastedSymbols[sheetPath].GetCount(); i++ )
3040 annotatedSymbols[sheetPath].AddItem( pastedSymbols[sheetPath][i] );
3043 for(
const SCH_SHEET_PATH& pastedSheetPath : pastedSheets[sheetPath] )
3045 for(
size_t i = 0; i < pastedSymbols[pastedSheetPath].GetCount(); i++ )
3048 annotatedSymbols[pastedSheetPath].AddItem( pastedSymbols[pastedSheetPath][i] );
3053 if( !annotatedSymbols.empty() )
3060 annotatedSymbols[
path].SortByReferenceOnly();
3065 annotatedSymbols[
path].ReannotateDuplicates( existingRefs, annotateAlgo );
3069 annotatedSymbols[
path].ReannotateByOptions( annotateOrder, annotateAlgo, annotateStartNum,
3070 existingRefs,
false, &hierarchy );
3073 annotatedSymbols[
path].UpdateAnnotation();
3076 for(
size_t i = 0; i < annotatedSymbols[
path].GetCount(); i++ )
3077 existingRefs.
AddItem( annotatedSymbols[
path][i] );
3081 annotatedSymbols[pastedSheetPath].SortByReferenceOnly();
3082 annotatedSymbols[pastedSheetPath].SetRefDesTracker( schematicSettings.
m_refDesTracker );
3086 annotatedSymbols[pastedSheetPath].ReannotateDuplicates( existingRefs, annotateAlgo );
3090 annotatedSymbols[pastedSheetPath].ReannotateByOptions( annotateOrder, annotateAlgo,
3091 annotateStartNum, existingRefs,
3092 false, &hierarchy );
3095 annotatedSymbols[pastedSheetPath].UpdateAnnotation();
3098 for(
size_t i = 0; i < annotatedSymbols[pastedSheetPath].GetCount(); i++ )
3099 existingRefs.
AddItem( annotatedSymbols[pastedSheetPath][i] );
3104 m_frame->GetCurrentSheet().UpdateAllScreenReferences();
3122 for(
int i = loadedItems.size() - 1; i >= 0; i-- )
3128 loadedItems.erase( loadedItems.begin() + i );
3141 if( !selection.Empty() )
3145 int closest_dist = INT_MAX;
3150 int dist = ( eventPos - pt ).EuclideanNorm();
3152 if( dist < closest_dist )
3154 selection.SetReferencePoint( pt );
3155 closest_dist = dist;
3160 for(
EDA_ITEM* item : selection.Items() )
3172 processPt(
pin->GetPosition() );
3178 processPt( item->GetPosition() );
3182 if( closest_dist == INT_MAX )
3184 for(
EDA_ITEM* item : selection.Items() )
3186 switch( item->Type() )
3189 processPt(
static_cast<SCH_LINE*
>( item )->GetStartPoint() );
3190 processPt(
static_cast<SCH_LINE*
>( item )->GetEndPoint() );
3210 for(
int ii = 0; ii < shape->
GetPolyShape().TotalVertices(); ++ii )
3217 processPt( shape->
GetEnd() );
3225 processPt( item->GetPosition() );
3234 else if( selection.GetTopLeftItem()->Type() ==
SCH_GROUP_T )
3241 group->RunOnChildren(
3253 selection.SetReferencePoint( item->
GetPosition() );
3255 selection.SetReferencePoint(
group->GetPosition() );
3261 selection.SetReferencePoint( item->
GetPosition() );
3267 commit.
Push(
_(
"Paste" ) );
3271 m_frame->UpdateHierarchyNavigator();
3276 m_frame->RefreshNetNavigator();
3298 if( selection.GetSize() >= 1 )
3301 if( selection.IsHover() )
3309 tableTool->EditTable( aEvent );
3319 m_frame->ShowInfoBarError(
_(
"Symbols with broken library symbol links cannot be edited." ) );
3329 blocking_win->Close(
true );
3358 dlg.
m_FirstRefDes->SetValidator( wxTextValidator( wxFILTER_EMPTY ) );
3372 int startNum = atoi( startRef.
GetRefNumber().utf8_string().c_str() );
3387 if( ref.GetRef() == startRef.
GetRef() )
3389 int num = atoi( ref.GetRefNumber().utf8_string().c_str() );
3391 if( num >= startNum )
3394 wxString fullRef = ref.GetRef();
3400 ref.GetSymbol()->SetRef( &sheet,
From_UTF8( fullRef.c_str() ) );
3405 if( !commit.
Empty() )
3406 commit.
Push(
_(
"Increment Annotations" ) );
3525 sheetSelection.
Add( item );
3532 wxImage
image = renderSelectionToImageForClipboard(
m_frame, sheetSelection, pageBBox,
true,
true );
3538 if( wxTheClipboard->Open() )
3540 wxDataObjectComposite* data =
new wxDataObjectComposite();
3544 wxTheClipboard->SetData( data );
3545 wxTheClipboard->Flush();
3546 wxTheClipboard->Close();
3551 wxLogMessage(
_(
"Cannot create the schematic image" ) );
3606 m_frame->GetCanvas()->Refresh();
3620 m_frame->GetCanvas()->Refresh();
3632 m_frame->GetCanvas()->Refresh();
3644 m_frame->GetCanvas()->Refresh();
3656 m_frame->GetCanvas()->Refresh();
3667 m_frame->GetCanvas()->Refresh();
3676 wxString variant =
m_frame->Schematic().GetCurrentVariant();
3680 m_frame->GetCanvas()->GetView()->UpdateAllItemsConditionally(
3685 auto invalidateTextVars =
3688 if(
text->HasTextVars() )
3690 text->ClearRenderCache();
3691 text->ClearBoundingBoxCache();
3698 item->RunOnChildren(
3699 [&invalidateTextVars](
SCH_ITEM* aChild )
3702 invalidateTextVars(
text );
3706 if( item->GetExcludedFromSim( sheetPath, variant ) )
3711 invalidateTextVars(
text );
3716 m_frame->GetCanvas()->Refresh();
3728 m_frame->RefreshOperatingPointDisplay();
3729 m_frame->GetCanvas()->Refresh();
3741 m_frame->RefreshOperatingPointDisplay();
3742 m_frame->GetCanvas()->Refresh();
3756 m_frame->GetCanvas()->Refresh();
3774 m_frame->eeconfig()->m_Drawing.line_mode++;
3794 switch(
static_cast<LINE_MODE>(
m_frame->eeconfig()->m_Drawing.line_mode ) )
3808 if( !
Pgm().GetCommonSettings()->m_Input.hotkey_feedback )
3812 int currentIdx =
m_toolMgr->GetSettings()->m_Window.grid.last_size_idx;
3814 wxArrayString gridsLabels;
3817 gridsLabels.Add(
grid.UserUnitsMessageText(
m_frame ) );
3819 if( !
m_frame->GetHotkeyPopup() )
3825 popup->
Popup(
_(
"Grid" ), gridsLabels, currentIdx );
3842 if( selection.Size() != 1 || selection[0]->Type() !=
SCH_GROUP_T )
3847 if( !
group->HasDesignBlockLink() )
3852 std::unique_ptr<DESIGN_BLOCK> designBlock( designBlockPane->
GetDesignBlock(
group->GetDesignBlockLibId(),
3858 msg.Printf(
_(
"Could not find design block %s." ),
group->GetDesignBlockLibId().GetUniStringLibId() );
3859 m_frame->GetInfoBar()->ShowMessageFor( msg, 5000, wxICON_WARNING );
3863 if( designBlock->GetSchematicFile().IsEmpty() )
3866 msg.Printf(
_(
"Design block %s does not have a schematic file." ),
3867 group->GetDesignBlockLibId().GetUniStringLibId() );
3868 m_frame->GetInfoBar()->ShowMessageFor( msg, 5000, wxICON_WARNING );
3889 if( selection.Size() != 1 || selection[0]->Type() !=
SCH_GROUP_T )
3894 if( !
group->HasDesignBlockLink() )
3899 std::unique_ptr<DESIGN_BLOCK> designBlock( designBlockPane->
GetDesignBlock(
group->GetDesignBlockLibId(),
3905 msg.Printf(
_(
"Could not find design block %s." ),
group->GetDesignBlockLibId().GetUniStringLibId() );
3906 m_frame->GetInfoBar()->ShowMessageFor( msg, 5000, wxICON_WARNING );
constexpr EDA_IU_SCALE schIUScale
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
static TOOL_ACTION updatePcbFromSchematic
static TOOL_ACTION revert
static TOOL_ACTION saveAs
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.
int GetVirtualPageNumber() const
static wxString m_DrawingSheetFileName
the name of the drawing sheet file, or empty to use the default drawing sheet
const wxString & GetPageNumber() const
void SetContentModified(bool aModified=true)
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
constexpr size_type GetWidth() const
constexpr Vec Centre() const
constexpr BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
constexpr const Vec GetCenter() const
constexpr size_type GetHeight() const
constexpr const Vec & GetOrigin() const
constexpr const SizeVec & GetSize() const
int GetCount() const
Return the number of objects in the list.
static const COLOR4D CLEAR
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.
SCH_NETCHAIN * GetNetChainByName(const wxString &aName)
CONNECTION_SUBGRAPH * FindSubgraphByName(const wxString &aNetName, const SCH_SHEET_PATH &aPath)
Return the subgraph for a given net name on a given sheet.
SCH_NETCHAIN * GetNetChainForNet(const wxString &aNet)
const std::vector< CONNECTION_SUBGRAPH * > & GetAllSubgraphs(const wxString &aNetName) const
SCH_NETCHAIN * CreateNetChainFromPotential(SCH_NETCHAIN *aPotential, const wxString &aName)
Promote a potential net chain to an actual user net chain with the provided name.
void Recalculate(const SCH_SHEET_LIST &aSheetList, bool aUnconditional=false, std::function< void(SCH_ITEM *)> *aChangedItemHandler=nullptr, PROGRESS_REPORTER *aProgressReporter=nullptr)
Update the connection graph for the given list of sheets.
const std::vector< std::unique_ptr< SCH_NETCHAIN > > & GetPotentialNetChains() const
Potential net chains are inferred groupings produced by RebuildNetChains() but not yet user-committed...
bool NetChainsBuilt() const
Returns true once RebuildNetChains() has completed at least once on this graph.
SCH_NETCHAIN * FindPotentialNetChainBetweenPins(SCH_PIN *aPinA, SCH_PIN *aPinB)
Locate a potential net chain that contains both pins (by subgraph net membership).
void ReplaceNetChainTerminalPin(const wxString &aNetChain, const KIID &aPrev, const KIID &aNew)
std::vector< wxString > GetEquivalentBusNames(const wxString &aBusName) const
Map a bus group name between its alias and expanded forms ({MIXED_BUS} <-> {FOO BAR HAM EGGS}...
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 EDA_ITEM * Clone() const
Create a duplicate of this item with linked list members set to NULL.
bool IsBrightened() const
virtual void SetParent(EDA_ITEM *aParent)
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 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()
static std::unique_ptr< CAIRO_PRINT_GAL > Create(GAL_DISPLAY_OPTIONS &aOptions, wxImage *aImage, double aDPI)
GAL_ANTIALIASING_MODE antialiasing_mode
The grid style to draw the grid in.
virtual bool HasNativeLandscapeRotation() const =0
void SetLayerColor(int aLayer, const COLOR4D &aColor)
Change the color used to draw a layer.
void SetDefaultFont(const wxString &aFont)
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
void SetIsPrinting(bool isPrinting)
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.
static constexpr int VIEW_MAX_LAYERS
Maximum number of layers that may be shown.
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_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)
Return the full location specifying URI for the LIB, either in original UI form or in environment var...
const wxString & Type() const
const wxString & Nickname() const
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
bool IsLocalPower() const override
bool IsGlobalPower() const override
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
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.
Describe the page size and margins of a paper page on which to eventually print or plot.
void SetHeightMils(double aHeightInMils)
void SetWidthMils(double aWidthInMils)
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.
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.
double GetHopOverScale()
Accessor that computes the current hop-over size.
std::shared_ptr< REFDES_TRACKER > m_refDesTracker
A list of previously used schematic reference designators.
Holds all the data relating to one schematic.
wxString GetVariantDescription(const wxString &aVariantName) const
Return the description for a variant.
SCHEMATIC_SETTINGS & Settings() const
SCH_SHEET_LIST Hierarchy() const
Return the full schematic flattened hierarchical sheet list.
PROJECT & Project() const
Return a reference to the project this schematic is part of.
wxString GetCurrentVariant() const
Return the current variant being edited.
CONNECTION_GRAPH * ConnectionGraph() const
const std::map< wxString, wxString > * GetProperties()
SCH_SHEET_PATH & CurrentSheet() const
static TOOL_ACTION showPcbNew
static TOOL_ACTION createNetChain
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 editVariantDescription
static TOOL_ACTION schematicSetup
static TOOL_ACTION toggleDirectiveLabels
static TOOL_ACTION highlightNetTool
static TOOL_ACTION removeFromNetChain
static TOOL_ACTION findNetInInspector
static TOOL_ACTION toggleHiddenFields
static TOOL_ACTION saveCurrSheetCopyAs
static TOOL_ACTION showRemoteSymbolPanel
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 highlightNetChain
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 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 updateDesignBlockFromSelection
static TOOL_ACTION replaceTerminalPin
static TOOL_ACTION togglePinAltIcons
static TOOL_ACTION toggleERCExclusions
static TOOL_ACTION updateNetHighlighting
static TOOL_ACTION createNetChainBetweenPins
static TOOL_ACTION exportNetlist
static TOOL_ACTION drawSheetOnClipboard
static TOOL_ACTION exportSymbolsToLibrary
static TOOL_ACTION toggleHiddenPins
static TOOL_ACTION selectOnPCB
static TOOL_ACTION addVariant
static TOOL_ACTION importNonKicadSchematic
static TOOL_ACTION nameNetChain
SCH_RENDER_SETTINGS * GetRenderSettings()
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
EESCHEMA_SETTINGS * eeconfig() const
COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const override
Returns a pointer to the active color theme settings.
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)
Highlight net chain under the cursor.
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 RemoveFromNetChain(const TOOL_EVENT &aEvent)
Remove any net highlighting.
int HighlightNetCursor(const TOOL_EVENT &aEvent)
Replace one of a net chain's terminal pins.
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 ToggleRemoteSymbolPanel(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 EditVariantDescription(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 ReplaceTerminalPin(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)
int ImportNonKicadSchematic(const TOOL_EVENT &aEvent)
int ShowCreateNetChain(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 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 NameNetChain(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 HighlightNetChain(const TOOL_EVENT &aEvent)
int ToggleLibraryTree(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 CreateNetChainBetweenPins(const TOOL_EVENT &aEvent)
int Print(const TOOL_EVENT &aEvent)
int Revert(const TOOL_EVENT &aEvent)
int GenerateBOM(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)
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
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.
wxString GetFullScreenDesc() const override
const wxString & GetHighlightedNetChain() const
void ToggleSchematicHierarchy()
Toggle the show/hide state of the left side schematic navigation panel.
void SendCrossProbeNetName(const wxString &aNetName)
Send a net name to Pcbnew for highlighting.
void SetHighlightedNetChain(const wxString &aNetChain)
const wxString & GetHighlightedConnection() const
void UpdateNetHighlightStatus()
wxString GetScreenDesc() const override
Return a human-readable description of the current screen.
void EditVariantDescription()
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 ToggleRemoteSymbolPanel()
virtual const wxString & GetText() const override
Return the string associated with the text object.
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
void SetLocked(bool aLocked) override
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)
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.
bool IsType(const std::vector< KICAD_T > &aScanTypes) const override
Check whether the item is one of the listed types.
Segment description base class to describe items which have 2 end points (track, wire,...
A net chain is a collection of nets that are connected together through passive components.
const wxString & GetName() const
SCH_PIN * GetLibPin() const
const wxString & GetNumber() const
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
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
void SetBackgroundColor(const COLOR4D &aColor) override
Set the background color.
const KIGFX::COLOR4D & GetBackgroundColor() const override
Return current background color settings.
bool m_ShowPinsElectricalType
void LoadColors(const COLOR_SETTINGS *aSettings) override
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
void PruneOrphanedSheetInstances(const wxString &aProjectName, const SCH_SHEET_LIST &aValidSheetPaths)
void PruneOrphanedSymbolInstances(const wxString &aProjectName, const SCH_SHEET_LIST &aValidSheetPaths)
const PAGE_INFO & GetPageSettings() const
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
SCHEMATIC * Schematic() const
TITLE_BLOCK & GetTitleBlock()
void Plot(PLOTTER *aPlotter, const SCH_PLOT_OPTS &aPlotOpts) const
Plot all the schematic objects to aPlotter.
void MigrateSimModels()
Migrate any symbols having V6 simulation models to their V7 equivalents.
BOX2I GetBoundingBox() const override
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.
int GetLastVirtualPageNumber() const
bool PageNumberExists(const wxString &aPageNumber) const
bool ContainsSheet(const SCH_SHEET *aSheet) const
bool HasPath(const KIID_PATH &aPath) const
void GetSymbols(SCH_REFERENCE_LIST &aReferences, SYMBOL_FILTER aSymbolFilter, bool aForceIncludeOrphanSymbols=false) const
Add a SCH_REFERENCE object to aReferences for each symbol in the list of sheets.
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...
bool IsSharedPath() const
Determine if this sheet path is shared in a complex hierarchy.
void GetSymbols(SCH_REFERENCE_LIST &aReferences, SYMBOL_FILTER aSymbolFilter, 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 * at(size_t aIndex) const
Forwarded method from std::vector.
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
PASSTHROUGH_MODE GetPassthroughMode() 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
std::vector< const SCH_PIN * > GetPins(const SCH_SHEET_PATH *aSheet) const
Retrieve a list of the SCH_PINs for the given sheet path.
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.
const LIB_ID & GetLibId() const override
void SetPassthroughMode(PASSTHROUGH_MODE aMode)
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.
virtual void Add(EDA_ITEM *aItem)
const std::deque< EDA_ITEM * > GetItems() const
virtual unsigned int GetSize() const override
Return the number of stored items.
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)
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.
virtual const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const =0
A wrapper for reporting to a wxString object.
std::unique_ptr< wxBitmap > GetImageFromClipboard()
Get image data from the clipboard, if there is any.
bool EncodeImageToPng(const wxImage &aImage, wxMemoryBuffer &aOutput)
Encode an image to PNG format with fast compression settings optimized for clipboard use.
bool AddTransparentImageToClipboardData(wxDataObjectComposite *aData, wxImage aImage)
Adds an image to clipboard data in a platform-specific way such that transparency is supported.
bool SaveClipboard(const std::string &aTextUTF8)
Store information to the system clipboard.
std::string GetClipboardUTF8()
Return the information currently stored in the system clipboard.
bool AddPngToClipboardData(wxDataObjectComposite *aData, const wxMemoryBuffer &aPngData, const wxImage *aFallbackImage)
Adds pre-encoded PNG data to clipboard in a platform-specific way.
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 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)
bool equivalent(SIM_MODEL::DEVICE_T a, SIM_MODEL::DEVICE_T b)
#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.
@ LAYER_DRAWINGSHEET
Sheet frame and title block.
@ LAYER_SCHEMATIC_DRAWINGSHEET
@ LAYER_SCHEMATIC_PAGE_LIMITS
@ REPAINT
Item needs to be redrawn.
@ GEOMETRY
Position or shape has changed.
@ TARGET_NONCACHED
Auxiliary rendering target (noncached)
void encode(const std::vector< uint8_t > &aInput, std::vector< uint8_t > &aOutput)
#define MAX_PAGE_SIZE_EESCHEMA_MILS
PGM_BASE & Pgm()
The global program "get" accessor.
Plotting engines similar to ps (PostScript, Gerber, svg)
static bool highlightNet(TOOL_MANAGER *aToolMgr, const VECTOR2D &aPosition)
#define HITTEST_THRESHOLD_PIXELS
Class to handle a set of SCH_ITEMs.
std::vector< EDA_ITEM * > EDA_ITEMS
ANNOTATE_ORDER_T
Schematic annotation order options.
ANNOTATE_ALGO_T
Schematic annotation type options.
@ SYMBOL_FILTER_NON_POWER
constexpr double SCH_WORLD_UNIT(1e-7/0.0254)
std::vector< FAB_LAYER_COLOR > dummy
wxString UnescapeString(const wxString &aSource)
wxString From_UTF8(const char *cstring)
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
Optional context derived from the user selection that opened the dialog.
wxString toRef
Second selected symbol reference, if any.
wxString fromRef
Selected symbol reference (or first of two)
wxString netName
Net name from a selected pin or wire/bus.
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".
IbisParser parser & reporter
const SHAPE_LINE_CHAIN chain
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().
#define ZOOM_MIN_LIMIT_EESCHEMA
#define ZOOM_MAX_LIMIT_EESCHEMA