26#include <unordered_set>
29#include <wx/clipbrd.h>
31#include <wx/filedlg.h>
33#include <wx/imagpng.h>
37#include <wx/mstream.h>
38#include <wx/textdlg.h>
39#include <wx/treectrl.h>
124constexpr int clipboardMaxBitmapSize = 4096;
125constexpr double clipboardBboxInflation = 0.02;
128std::vector<SCH_ITEM*> collectSelectionItems(
const SCH_SELECTION& aSelection )
130 std::vector<SCH_ITEM*> items;
131 items.reserve( aSelection.
GetSize() );
138 items.push_back( schItem );
151 bbox.
GetHeight() * clipboardBboxInflation );
157bool generateHtmlFromPngData(
const wxMemoryBuffer& aPngData, wxMemoryBuffer& aHtmlBuffer )
159 if( aPngData.GetDataLen() == 0 )
162 std::vector<uint8_t> pngVec(
static_cast<const uint8_t*
>( aPngData.GetData() ),
163 static_cast<const uint8_t*
>( aPngData.GetData() ) + aPngData.GetDataLen() );
165 std::vector<uint8_t> base64Data;
168 std::string html =
"<img src=\"data:image/png;base64,";
169 html.append(
reinterpret_cast<const char*
>( base64Data.data() ), base64Data.size() );
170 html.append(
"\" />" );
172 aHtmlBuffer.SetDataLen( 0 );
173 aHtmlBuffer.AppendData( html.data(), html.size() );
180 wxMemoryBuffer& aBuffer )
185 renderSettings.m_ShowHiddenPins =
false;
186 renderSettings.m_ShowHiddenFields =
false;
188 std::unique_ptr<SVG_PLOTTER> plotter = std::make_unique<SVG_PLOTTER>();
189 plotter->SetRenderSettings( &renderSettings );
195 plotter->SetPageSettings( pageInfo );
196 plotter->SetColorMode(
true );
199 plotter->SetViewport( plot_offset,
schIUScale.IU_PER_MILS / 10, 1.0,
false );
200 plotter->SetCreator( wxT(
"Eeschema-SVG" ) );
202 wxFileName tempFile( wxFileName::CreateTempFileName( wxS(
"kicad_svg" ) ) );
204 if( !plotter->OpenFile( tempFile.GetFullPath() ) )
206 wxRemoveFile( tempFile.GetFullPath() );
214 plotter->StartPlot( wxT(
"1" ) );
215 aFrame->
GetScreen()->
Plot( plotter.get(), plotOpts, collectSelectionItems( aSelection ) );
220 wxRemoveFile( tempFile.GetFullPath() );
231 int aWidth,
int aHeight,
bool aUseAlpha,
bool aIncludeDrawingSheet )
233 wxImage
image( aWidth, aHeight,
false );
238 double actualPPI = std::max( actualPPI_x, actualPPI_y );
240 VECTOR2D pageSizeIn( (
double) aWidth / actualPPI, (
double) aHeight / actualPPI );
252 std::unique_ptr<KIGFX::SCH_PAINTER> painter = std::make_unique<KIGFX::SCH_PAINTER>( gal.get() );
253 std::unique_ptr<KIGFX::VIEW> view = std::make_unique<KIGFX::VIEW>();
255 painter->SetSchematic( &aFrame->
Schematic() );
256 view->SetGAL( gal.get() );
257 view->SetPainter( painter.get() );
259 view->SetScale( 1.0 );
262 gal->SetSheetSize( pageSizeIn );
266 std::vector<std::unique_ptr<SCH_ITEM>> clonedItems;
267 clonedItems.reserve( aSelection.
GetSize() );
277 clonedItems.emplace_back( clone );
294 view->SetLayerVisible( i,
true );
301 std::unique_ptr<DS_PROXY_VIEW_ITEM> drawingSheet;
303 if( aIncludeDrawingSheet )
321 drawingSheet->SetVariantName(
TO_UTF8( currentVariant ) );
322 drawingSheet->SetVariantDesc(
TO_UTF8( variantDesc ) );
324 view->Add( drawingSheet.get() );
327 view->SetCenter( aBBox.
Centre() );
328 view->UseDrawPriority(
true );
344 const BOX2I& aBBox,
bool aUseAlpha,
bool aIncludeDrawingSheet )
346 const double c_targetPPI = 300;
347 const double c_targetPixelsPerMM = c_targetPPI / 25.4;
351 if( size.
x <= 0 || size.
y <= 0 )
358 if( bitmapWidth > clipboardMaxBitmapSize || bitmapHeight > clipboardMaxBitmapSize )
360 double scaleDown = (double) clipboardMaxBitmapSize / std::max( bitmapWidth, bitmapHeight );
361 bitmapWidth =
KiROUND( bitmapWidth * scaleDown );
362 bitmapHeight =
KiROUND( bitmapHeight * scaleDown );
365 if( bitmapWidth <= 0 || bitmapHeight <= 0 )
368 wxImage
result = renderSelectionToBitmap( aFrame, aSelection, aBBox, bitmapWidth, bitmapHeight, aUseAlpha,
369 aIncludeDrawingSheet );
408 wxFileDialog dlg(
m_frame,
_(
"Schematic Files" ), curr_fn.GetPath(), curr_fn.GetFullName(),
413 if( dlg.ShowModal() == wxID_CANCEL )
418 m_frame->saveSchematicFile( curr_sheet, newFilename,
true );
430 bool wasOnSubsheet = (
m_frame->GetCurrentSheet().Last() != &root );
445 msg.Printf(
_(
"Revert '%s' (and all sub-sheets) to last version saved?" ), schematic.
GetFileName() );
474 m_frame->ShowSchematicSetupDialog();
496 m_frame->GetCanvas()->GetView()->MarkDirty();
498 m_frame->GetCanvas()->Refresh();
504 m_frame->RollbackSchematicFromUndo();
527 m_frame->GetCanvas()->GetBackend() );
536 m_frame->GetCanvas()->GetBackend() );
554 if( aRunningOnDemand )
564 m_frame->GetCanvas()->Refresh();
578 m_frame->GetCanvas()->Refresh(
true );
606 m_frame->Schematic().OnSchSelectionChanged();
628 m_frame->SendSelectItemsToPcb( selection.GetItemsSortedBySelectionOrder(), aForce );
634 bool savePowerSymbols =
false;
640 targetLib =
m_frame->SelectLibrary(
_(
"Export Symbols" ),
_(
"Export symbols to library:" ),
641 { {
_(
"Include power symbols in export" ), &savePowerSymbols },
642 {
_(
"Update schematic symbols to link to exported symbols" ), &map }
645 if( targetLib.empty() )
652 std::map<LIB_ID, LIB_SYMBOL*> libSymbols;
653 std::map<LIB_ID, std::vector<SCH_SYMBOL*>> symbolMap;
655 for(
size_t i = 0; i < symbols.
GetCount(); ++i )
661 if( libSymbols.count(
id ) )
664 "Two symbols have the same LIB_ID but are different!" );
668 libSymbols[id] = libSymbol;
671 symbolMap[id].emplace_back( symbol );
678 auto optRow = adapter->
GetRow( targetLib );
679 wxCHECK( optRow, 0 );
688 for(
const std::pair<const LIB_ID, LIB_SYMBOL*>& it : libSymbols )
691 std::unique_ptr<LIB_SYMBOL> newSym = origSym->
Flatten();
692 const wxString newSymName = newSym->GetName();
696 pi->SaveSymbol( dest.GetFullPath(), std::move( newSym ) );
700 msg.Printf(
_(
"Error saving symbol %s to library '%s'." ), newSymName, row->
Nickname() );
701 msg += wxS(
"\n\n" ) + ioe.
What();
711 for(
SCH_SYMBOL* symbol : symbolMap[it.first] )
715 wxCHECK2( parentScreen,
continue );
718 symbol->SetLibId(
id );
726 std::set<SCH_SCREEN*> processedScreens;
732 if( processedScreens.find( ( screen ) ) == processedScreens.end() )
734 processedScreens.insert( screen );
739 commit.
Push( wxS(
"Update Library Identifiers" ) );
746#define HITTEST_THRESHOLD_PIXELS 5
750 static const std::vector<KICAD_T> voltageProbeTypes = {
763 blocking_win->Close(
true );
788 wxString variant =
m_frame->Schematic().GetCurrentVariant();
799 if( !symbol || !libPin )
807 std::vector<EMBEDDED_FILES*> embeddedFilesStack;
808 embeddedFilesStack.push_back(
m_frame->Schematic().GetEmbeddedFiles() );
811 embeddedFilesStack.push_back( symbolEmbeddedFile );
822 std::vector<std::string> currentNames =
model.SpiceGenerator().CurrentNames( spiceItem );
824 if( currentNames.size() == 0 )
828 else if( currentNames.size() == 1 )
836 int modelPinIndex =
model.FindModelPinIndex( libPin->
GetNumber().ToStdString() );
840 wxString
name = currentNames.at( modelPinIndex );
851 else if( item->
IsType( voltageProbeTypes ) )
861 wxString spiceNet = *
name;
877 wxString connectionName;
879 if( item && item->IsType( voltageProbeTypes ) )
888 else if( item && item->Type() !=
SCH_PIN_T )
909 if(
m_frame->GetHighlightedConnection() != connectionName )
911 m_frame->SetHighlightedConnection( connectionName );
919 [
this](
const int& aFinalState )
924 if( !
m_frame->GetHighlightedConnection().IsEmpty() )
926 m_frame->SetHighlightedConnection( wxEmptyString );
969 item = item->GetParent();
982 blocking_win->Close(
true );
984 static_cast<SIMULATOR_FRAME*
>( simFrame )->AddTuner( sheetPath, symbol );
998 collector.
Collect(
m_frame->GetScreen(), { SCH_SYMBOL_T, SCH_FIELD_T }, aPos );
1006 item =
static_cast<SCH_FIELD*
>( item )->GetParentSymbol();
1021 [
this](
const int& aFinalState )
1063 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"highlightNet: pos=(%f,%f) clear=%d", aPosition.
x, aPosition.
y,
1064 ( aPosition ==
CLEAR ) );
1068 std::optional<wxString> connName;
1072 if( aPosition !=
CLEAR )
1076 if(
erc.TestDuplicateSheetNames(
false ) > 0 )
1078 wxMessageBox(
_(
"Error: duplicate sub-sheet names found in current sheet." ) );
1084 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"highlightNet: item=%p type=%d", (
void*) item, item ? (
int) item->
Type()
1093 symbol =
dynamic_cast<SCH_SYMBOL*
>( item->GetParent() );
1097 std::vector<SCH_PIN*> pins = symbol->
GetPins( &aSheetPath );
1099 if( pins.size() == 1 )
1100 connName = pins[0]->GetConnectionName( &editFrame->
GetCurrentSheet() );
1110 if( !connName || connName->IsEmpty() )
1112 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"highlightNet: no connection under cursor" );
1113 editFrame->SetStatusText( wxT(
"" ) );
1118 editorControl->SetHighlightBusMembers(
false );
1126 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"highlightNet: setting highlighted connection to %s", *connName );
1127 editorControl->SetHighlightBusMembers(
false );
1141 editorControl->SetHighlightBusMembers(
false );
1145 editorControl->SetHighlightBusMembers( !editorControl->GetHighlightBusMembers() );
1156 editorControl->UpdateNetHighlighting(
dummy );
1157 wxLogTrace(
"KICAD_SCH_HIGHLIGHT",
"highlightNet: done" );
1180 auto& chains =
m_frame->Schematic().NetChains();
1184 const auto name = item ? item->GetConnectionName( &
m_frame->GetCurrentSheet() ) : std::nullopt;
1186 wxString newConnection;
1192 newChain =
chain->GetName();
1194 if( !
chain->GetNets().empty() )
1195 m_frame->SendCrossProbeNetName( *
chain->GetNets().begin() );
1199 newConnection = *
name;
1205 m_frame->SendCrossProbeClearHighlight();
1209 m_frame->SetHighlightedNetChain( newChain );
1210 m_frame->SetHighlightedConnection( newConnection );
1211 m_frame->UpdateNetHighlightStatus();
1247 for(
const auto& [symbol, screen] : chains.GetBridgeSymbols( *
chain, net ) )
1249 commit.
Modify( symbol, screen );
1253 commit.
Push(
_(
"Remove from Net Chain" ) );
1265 m_frame->SetHighlightedNetChain( wxEmptyString );
1282 const auto getNetNamePattern =
1283 [](
const auto& aConn ) -> std::optional<wxString>
1285 wxString netName = aConn.Name();
1292 return prefix + wxT(
"*" );
1294 return prefix + wxT(
".*" );
1299 return std::nullopt;
1305 std::set<wxString> netNames;
1310 std::optional<wxString> netNamePattern;
1314 const auto connection = schematic.Connectivity().Connection( schItem->
m_Uuid,
path.PathRef() );
1319 netNamePattern = getNetNamePattern( *connection );
1328 netNamePattern = getNetNamePattern( *connection );
1331 if( !netNamePattern )
1334 m_frame->ShowInfoBarError(
_(
"All selected nets must be labeled to assign a netclass." ) );
1338 netNames.insert( *netNamePattern );
1341 if( netNames.empty() )
1343 m_frame->ShowInfoBarError(
_(
"No nets selected." ) );
1350 [&](
const std::vector<wxString>& aNetNames )
1352 std::unordered_set<SCH_ITEM*> highlighted;
1353 const SCH_CONNECTIVITY::NAVIGATION_QUERY query( schematic );
1355 for( const wxString& name : aNetNames )
1356 query.CollectNetItems( name, path, highlighted );
1358 for( SCH_ITEM* item : screen->Items() )
1360 bool redraw = setNetHighlight( item, highlighted.contains( item ) );
1362 item->RunOnChildren(
1363 [&]( SCH_ITEM* aChild )
1365 redraw |= setNetHighlight( aChild, highlighted.contains( aChild ) );
1367 RECURSE_MODE::NO_RECURSE );
1370 getView()->Update( item, KIGFX::VIEW_UPDATE_FLAGS::REPAINT );
1373 m_frame->GetCanvas()->ForceRefresh();
1376 if( dlg.ShowModal() )
1378 getView()->UpdateAllItemsConditionally(
1383 auto invalidateTextVars =
1386 if(
text->HasTextVars() )
1388 text->ClearRenderCache();
1389 text->ClearBoundingBoxCache();
1396 if(
dynamic_cast<SCH_LINE*
>( aItem ) )
1406 invalidateTextVars(
text );
1410 item->RunOnChildren(
1411 [&invalidateTextVars](
SCH_ITEM* aChild )
1414 invalidateTextVars(
text );
1419 m_frame->GetScreen()->UpdateDisplayBounds( item );
1435 if( !selectionTool )
1452 const auto connection =
m_frame->Schematic().Connectivity().Connection(
1455 if( connection && !connection->IsUnconnected() )
1456 netName = connection->Name();
1460 netName = connection->GetNetName();
1463 if( !netName.IsEmpty() )
1468 if( netName.IsEmpty() )
1469 netName =
m_frame->GetHighlightedConnection();
1471 if( netName.IsEmpty() )
1473 m_frame->ShowInfoBarError(
_(
"No connected net selected." ) );
1477 m_frame->FindNetInInspector( netName );
1489 wxCHECK( screen, 0 );
1491 const wxString selectedName =
m_frame->GetHighlightedConnection();
1492 const wxString chainName =
m_frame->GetHighlightedNetChain();
1494 :
m_frame->Schematic().NetChains().GetNetChainByName( chainName );
1495 std::unordered_set<SCH_ITEM*> highlighted;
1497 if( !selectedName.IsEmpty() ||
chain )
1501 if( !selectedName.IsEmpty() )
1506 for(
const wxString&
name :
chain->GetNets() )
1511 bool changed =
false;
1520 bool powerHighlight =
false;
1522 if( symbol && symbol->
IsPower() )
1524 std::vector<SCH_PIN*> pins = symbol->
GetPins( &sheetPath );
1525 powerHighlight = !pins.empty() && highlighted.contains( pins.front() );
1531 bool highlight = highlighted.contains( child );
1535 const auto* field =
static_cast<SCH_FIELD*
>( child );
1551 m_frame->GetCanvas()->Refresh();
1592 DisplayError( editFrame,
_(
"Unable to replace the net chain terminal pin." ) );
1615 if(
SCH_NETCHAIN* sig = chains.GetNetChainForNet( *netName ) )
1617 const wxString oldName = sig->GetName();
1618 const wxString newName = wxGetTextFromUser(
_(
"Net chain name:" ),
_(
"Name Net Chain" ), oldName );
1620 if( newName.IsEmpty() || newName == oldName )
1625 DisplayError( editFrame,
_(
"Chain name cannot contain spaces, quotes, or parentheses." ) );
1629 if( !chains.RenameCommittedNetChain( oldName, newName ) )
1631 DisplayError( editFrame, wxString::Format(
_(
"Unable to rename net chain '%s' to '%s'." ),
1632 oldName, newName ) );
1651 if( selection.GetSize() != 2 )
1657 if( !
pinA || !pinB )
1667 DisplayError( editFrame,
_(
"No potential net chain connects the selected pins." ) );
1672 for(
const wxString& net : potential->
GetNets() )
1674 if(
SCH_NETCHAIN* owner = chains.GetNetChainForNet( net ) )
1676 DisplayError( editFrame, wxString::Format(
_(
"The selected pins are already in net chain '%s'." ),
1677 owner->GetName() ) );
1686 wxString msg = wxString::Format(
_(
"Create Net Chain between %s:%s and %s:%s" ),
1705 int dx = bbox.
GetWidth() / 4;
if( dx < 100 ) dx = 100;
1706 int dy = bbox.
GetHeight() / 4;
if( dy < 100 ) dy = 100;
1708 if(
auto canvas = editFrame->
GetCanvas() )
1710 canvas->GetView()->SetCenter( bbox.
GetCenter() );
1712 auto view = canvas->GetView();
1715 BOX2D viewBox = view->GetBoundary();
1718 double scale = std::min( scaleX, scaleY );
1720 view->SetScale(
scale );
1724 const auto restoreHighlight =
1733 wxString
name = wxGetTextFromUser( msg,
_(
"Create Net Chain" ), suggestion, editFrame );
1735 if(
name.IsEmpty() )
1744 DisplayError( editFrame,
_(
"Chain name cannot contain spaces, quotes, or parentheses." ) );
1748 if( chains.GetNetChainByName(
name ) )
1751 DisplayError( editFrame, wxString::Format(
_(
"A net chain named '%s' already exists." ),
name ) );
1755 if( !chains.CreateNetChainFromPotential( potential,
name ) )
1758 DisplayError( editFrame, wxString::Format(
_(
"Unable to create net chain '%s'." ),
name ) );
1769 editFrame->Refresh();
1787 std::vector<SCH_SYMBOL*> symbols;
1792 symbols.push_back( sym );
1795 if( symbols.size() >= 1 )
1798 if( symbols.size() >= 2 )
1802 if( symbols.empty() && sel.
GetSize() == 1 )
1806 if( schItem && schItem->
IsType( { SCH_PIN_T, SCH_ITEM_LOCATE_WIRE_T, SCH_ITEM_LOCATE_BUS_T } ) )
1825 if(
m_frame->GetUndoCommandCount() <= 0 )
1834 wxCHECK( undo_list, 0 );
1836 m_frame->PutDataInPreviousState( undo_list );
1840 m_frame->PushCommandToRedoList( undo_list );
1844 m_frame->GetCanvas()->Refresh();
1855 if(
m_frame->GetRedoCommandCount() == 0 )
1867 m_frame->PutDataInPreviousState( list );
1870 list->ReversePickersListOrder();
1871 m_frame->PushCommandToUndoList( list );
1875 m_frame->GetCanvas()->Refresh();
1888 if( selection.Empty() )
1891 if( aUseDuplicateClipboard )
1894 selection.SetScreen(
m_frame->GetScreen() );
1897 for(
EDA_ITEM* item : selection.GetItems() )
1904 else if( item->Type() ==
SCH_FIELD_T && selection.IsHover() )
1908 selection.Add( item->GetParent() );
1913 selection.Remove( item );
1918 static_cast<SCH_ITEM*
>( item )->RunOnChildren(
1921 selection.Add( aChild );
1932 plugin.
Format( &selection, &selPath, schematic, &formatter,
true );
1934 std::string prettyData = formatter.
GetString();
1937 if( !aUseDuplicateClipboard )
1941 result &= wxTheClipboard->Open();
1945 wxDataObjectComposite* data =
new wxDataObjectComposite();
1948 wxCustomDataObject* kicadObj =
new wxCustomDataObject( wxDataFormat(
"application/kicad" ) );
1949 kicadObj->SetData( prettyData.size(), prettyData.data() );
1950 data->Add( kicadObj );
1952 BOX2I selectionBox = expandedSelectionBox( selection );
1957 wxImage
image = renderSelectionToImageForClipboard(
m_frame, selection, selectionBox,
true,
false );
1958 wxMemoryBuffer pngBuffer;
1965 wxMemoryBuffer htmlBuffer;
1967 if( generateHtmlFromPngData( pngBuffer, htmlBuffer ) )
1969 wxCustomDataObject* htmlObj =
new wxCustomDataObject( wxDF_HTML );
1970 htmlObj->SetData( htmlBuffer.GetDataLen(), htmlBuffer.GetData() );
1971 data->Add( htmlObj );
1976 wxLogDebug( wxS(
"Failed to generate bitmap for clipboard" ) );
1980 wxMemoryBuffer svgBuffer;
1982 if( plotSelectionToSvg(
m_frame, selection, selectionBox, svgBuffer ) )
1984 wxCustomDataObject* svgObj =
new wxCustomDataObject( wxDataFormat(
"image/svg+xml" ) );
1985 svgObj->SetData( svgBuffer.GetDataLen(), svgBuffer.GetData() );
1986 data->Add( svgObj );
1990 wxLogDebug( wxS(
"Failed to generate SVG for clipboard" ) );
1995 data->Add(
new wxTextDataObject( wxString::FromUTF8( prettyData ) ) );
1997 result &= wxTheClipboard->SetData( data );
1998 result &= wxTheClipboard->Flush();
1999 wxTheClipboard->Close();
2003 if( selection.IsHover() )
2006 if( aUseDuplicateClipboard )
2039 wxTextEntry* textEntry =
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
2056 wxTextEntry* textEntry =
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
2075 if( selection.Empty() )
2080 if( selection.IsHover() )
2088 const KIID_PATH& aClipPath,
bool aForceKeepAnnotations )
2090 wxCHECK(
m_frame && aSymbol, );
2093 bool instanceFound =
false;
2100 if( ( tmp.m_Path.empty() && aClipPath.empty() ) || ( !aClipPath.empty() && tmp.m_Path.
EndsWith( aClipPath ) ) )
2103 instanceFound =
true;
2105 wxLogTrace(
traceSchPaste, wxS(
"Pasting found symbol instance with reference %s, unit %d:\n"
2106 "\tClipboard path: %s\n"
2107 "\tSymbol UUID: %s." ),
2118 pasteLookupPath.push_back( aSymbol->
m_Uuid );
2120 if( !instanceFound )
2122 wxLogTrace(
traceSchPaste, wxS(
"Clipboard symbol instance **not** found:\n\tClipboard path: %s\n"
2123 "\tSymbol UUID: %s." ),
2143 if( !aForceKeepAnnotations )
2152 const KIID_PATH& aClipPath,
bool aForceKeepAnnotations,
2156 wxCHECK( aSheet && aPastedSheets, aPastePath );
2161 aPastedSheets->push_back( sheetPath );
2170 if( item->IsConnectable() )
2171 item->SetConnectivityDirty();
2177 wxCHECK2( symbol,
continue );
2191 pin->SetConnectivityDirty();
2201 wxCHECK2( subsheet,
continue );
2214 pin->SetConnectivityDirty();
2219 newClipPath.push_back( subsheet->
m_Uuid );
2221 updatePastedSheet( subsheet, sheetPath, newClipPath, aForceKeepAnnotations, aPastedSheets, aPastedSymbols );
2233 wxCHECK( aScreen, );
2241 wxCHECK2( symbol,
continue );
2245 KIID_PATH pathWithSymbol = symbolInstance.m_Path;
2247 pathWithSymbol.push_back( symbol->
m_Uuid );
2262 wxCHECK2( symbol,
continue );
2271 const wxString& aLibSymbolName )
2278 if( aClipboardScreen )
2280 auto clipIt = aClipboardScreen->
GetLibSymbols().find( aLibSymbolName );
2283 return clipIt->second;
2288 auto destIt = aDestScreen->
GetLibSymbols().find( aLibSymbolName );
2291 return destIt->second;
2300 wxTextEntry* textEntry =
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
2309 std::string content;
2324 if( content.empty() )
2330 auto bitmap = std::make_unique<SCH_BITMAP>();
2332 if( bitmap->GetReferenceImage().SetImage( clipImg->ConvertToImage() ) )
2360 "Do you want to continue?" ) );
2366 tempScreen->
Append( text_item );
2372 bool hasTableCells =
false;
2374 for(
EDA_ITEM* item : currentSelection )
2378 hasTableCells =
true;
2391 clipboardTable =
static_cast<SCH_TABLE*
>( item );
2396 if( clipboardTable )
2414 commit.
Push(
_(
"Paste Cells" ) );
2434 bool annotateAutomatic =
m_frame->eeconfig()->m_AnnotatePanel.automatic;
2439 bool forceRemoveAnnotations =
false;
2459 std::vector<SCH_ITEM*> sortedLoadedItems;
2460 bool sheetsPasted =
false;
2465 if( destFn.IsRelative() )
2466 destFn.MakeAbsolute(
m_frame->Prj().GetProjectPath() );
2473 std::map<wxString, SCH_SCREEN*> loadedScreens;
2477 if( item.LastScreen() )
2478 loadedScreens[item.Last()->GetFileName()] = item.LastScreen();
2489 std::set<wxString> existingRefsSet;
2492 existingRefsSet.insert( ref.GetRef() );
2495 std::map<KIID, EDA_ITEM*> itemMap;
2499 std::map<SCH_SHEET_PATH, SCH_REFERENCE_LIST> pastedSymbols;
2500 std::map<SCH_SHEET_PATH, SCH_SHEET_LIST> pastedSheets;
2505 sortedLoadedItems.push_back( item );
2507 loadedItems.push_back( item );
2510 sort( sortedLoadedItems.begin(), sortedLoadedItems.end(),
2513 SCH_SHEET* firstSheet = static_cast<SCH_SHEET*>( firstItem );
2514 SCH_SHEET* secondSheet = static_cast<SCH_SHEET*>( secondItem );
2515 return StrNumCmp( firstSheet->GetName(), secondSheet->GetName(), false ) < 0;
2519 for(
SCH_ITEM* item : sortedLoadedItems )
2521 loadedItems.push_back( item );
2528 if( srcFn.IsRelative() )
2529 srcFn.MakeAbsolute(
m_frame->Prj().GetProjectPath() );
2533 if( hierarchy.
TestForRecursion( sheetHierarchy, destFn.GetFullPath( wxPATH_UNIX ) ) )
2535 auto msg = wxString::Format(
_(
"The pasted sheet '%s'\n"
2536 "was dropped because the destination already has "
2537 "the sheet or one of its subsheets as a parent." ),
2540 loadedItems.pop_back();
2546 tempScreen->
Clear(
false );
2548 for(
EDA_ITEM* item : loadedItems )
2554 wxCHECK2( schItem,
continue );
2568 wxCHECK2( currentScreen,
continue );
2580 if( !existingRefsSet.contains( instance.m_Reference ) )
2582 forceKeepAnnotations = !forceRemoveAnnotations;
2598 if( existingRefsSet.contains( instance.m_Reference ) )
2600 needsNewKiid =
true;
2608 const_cast<KIID&
>( item->m_Uuid ) =
KIID();
2614 pin->SetConnectivityDirty();
2624 pastedSymbols[sheetPath].AddItem( schReference );
2633 wxString baseName = nameField->
GetText();
2634 wxString candidateName = baseName;
2637 while( !baseName.IsEmpty() && wxIsdigit( baseName.Last() ) )
2639 number = baseName.Last() + number;
2640 baseName.RemoveLast();
2645 hierarchy =
m_frame->Schematic().Hierarchy();
2647 int uniquifier = std::max( 0, wxAtoi( number ) ) + 1;
2649 while( existingSheetNames.count( candidateName ) )
2650 candidateName = wxString::Format( wxT(
"%s%d" ), baseName, uniquifier++ );
2652 nameField->
SetText( candidateName );
2653 existingSheetNames.emplace( candidateName );
2661 if( !fn.IsAbsolute() )
2664 fn.Normalize(
FN_NORMALIZE_FLAGS | wxPATH_NORM_ENV_VARS, currentSheetFileName.GetPath() );
2668 if( !
m_frame->Schematic().Root().SearchHierarchy( fn.GetFullPath( wxPATH_UNIX ), &existingScreen ) )
2670 if( loadedScreens.count( sheet->
GetFileName() ) > 0 )
2671 existingScreen = loadedScreens.at( sheet->
GetFileName() );
2676 if( existingScreen )
2682 if( !
m_frame->LoadSheetFromFile( sheet, &pasteRoot, fn.GetFullPath() ) )
2689 sheetsPasted =
true;
2692 clipPath.push_back( sheet->
m_Uuid );
2701 pin->SetConnectivityDirty();
2709 ( forceKeepAnnotations && annotateAutomatic ),
2710 &pastedSheets[sheetPath], pastedSymbols );
2719 const_cast<KIID&
>( item->m_Uuid ) =
KIID();
2721 if( srcItem && destItem )
2732 if( !
group->GetName().IsEmpty() )
2756 m_frame->Schematic().RefreshHierarchy();
2765 wxString pageNum = wxString::Format(
"%d", page );
2768 pageNum = wxString::Format(
"%d", ++page );
2770 int virtualPageNumber = page;
2777 pastedSheet.SetVirtualPageNumber( virtualPageNumber );
2781 sheetInstance.
m_Path = pastedSheet.Path();
2784 sheetInstance.
m_Path.pop_back();
2790 wxCHECK2( sheet,
continue );
2793 hierarchy.push_back( pastedSheet );
2796 std::vector<KIID_PATH> instancesToRemove;
2800 if( !hierarchy.
HasPath( instance.m_Path ) )
2801 instancesToRemove.push_back( instance.m_Path );
2804 for(
const KIID_PATH& instancePath : instancesToRemove )
2809 for(
auto&[
path, refs] : pastedSymbols )
2813 if( ref.GetSheetPath() == pastedSheet )
2815 ref.GetSheetPath().SetVirtualPageNumber( virtualPageNumber );
2816 ref.SetSheetNumber( virtualPageNumber );
2823 m_frame->SetSheetNumberAndCount();
2827 hierarchy =
m_frame->Schematic().Hierarchy();
2830 std::map<SCH_SHEET_PATH, SCH_REFERENCE_LIST> annotatedSymbols;
2835 for(
size_t i = 0; i < pastedSymbols[sheetPath].GetCount(); i++ )
2838 annotatedSymbols[sheetPath].AddItem( pastedSymbols[sheetPath][i] );
2841 for(
const SCH_SHEET_PATH& pastedSheetPath : pastedSheets[sheetPath] )
2843 for(
size_t i = 0; i < pastedSymbols[pastedSheetPath].GetCount(); i++ )
2846 annotatedSymbols[pastedSheetPath].AddItem( pastedSymbols[pastedSheetPath][i] );
2851 if( !annotatedSymbols.empty() )
2858 annotatedSymbols[
path].SortByReferenceOnly();
2863 annotatedSymbols[
path].ReannotateDuplicates( existingRefs, annotateAlgo );
2867 annotatedSymbols[
path].ReannotateByOptions( annotateOrder, annotateAlgo, annotateStartNum,
2868 existingRefs,
false, &hierarchy );
2871 annotatedSymbols[
path].UpdateAnnotation();
2874 for(
size_t i = 0; i < annotatedSymbols[
path].GetCount(); i++ )
2875 existingRefs.
AddItem( annotatedSymbols[
path][i] );
2879 annotatedSymbols[pastedSheetPath].SortByReferenceOnly();
2880 annotatedSymbols[pastedSheetPath].SetRefDesTracker( schematicSettings.
m_refDesTracker );
2884 annotatedSymbols[pastedSheetPath].ReannotateDuplicates( existingRefs, annotateAlgo );
2888 annotatedSymbols[pastedSheetPath].ReannotateByOptions( annotateOrder, annotateAlgo,
2889 annotateStartNum, existingRefs,
2890 false, &hierarchy );
2893 annotatedSymbols[pastedSheetPath].UpdateAnnotation();
2896 for(
size_t i = 0; i < annotatedSymbols[pastedSheetPath].GetCount(); i++ )
2897 existingRefs.
AddItem( annotatedSymbols[pastedSheetPath][i] );
2902 m_frame->GetCurrentSheet().UpdateAllScreenReferences();
2920 for(
int i = loadedItems.size() - 1; i >= 0; i-- )
2926 loadedItems.erase( loadedItems.begin() + i );
2939 if( !selection.Empty() )
2943 int closest_dist = INT_MAX;
2948 int dist = ( eventPos - pt ).EuclideanNorm();
2950 if( dist < closest_dist )
2952 selection.SetReferencePoint( pt );
2953 closest_dist = dist;
2957 std::vector<SCH_ITEM*> anchorCandidates =
FlattenGroups( selection.Items() );
2960 for(
EDA_ITEM* item : anchorCandidates )
2972 processPt(
pin->GetPosition() );
2978 processPt( item->GetPosition() );
2982 if( closest_dist == INT_MAX )
2984 for(
EDA_ITEM* item : anchorCandidates )
2986 switch( item->Type() )
2992 processPt(
static_cast<SCH_LINE*
>( item )->GetStartPoint() );
2993 processPt(
static_cast<SCH_LINE*
>( item )->GetEndPoint() );
3013 for(
int ii = 0; ii < shape->
GetPolyShape().TotalVertices(); ++ii )
3020 processPt( shape->
GetEnd() );
3028 processPt( item->GetPosition() );
3037 else if( selection.GetTopLeftItem()->Type() ==
SCH_GROUP_T )
3044 group->RunOnChildren(
3056 selection.SetReferencePoint( item->
GetPosition() );
3058 selection.SetReferencePoint(
group->GetPosition() );
3064 selection.SetReferencePoint( item->
GetPosition() );
3070 commit.
Push(
_(
"Paste" ) );
3073 m_frame->RefreshNetNavigator();
3094 if( selection.GetSize() >= 1 )
3097 if( selection.IsHover() )
3105 tableTool->EditTable( aEvent );
3115 m_frame->ShowInfoBarError(
_(
"Symbols with broken library symbol links cannot be edited." ) );
3125 blocking_win->Close(
true );
3154 dlg.
m_FirstRefDes->SetValidator( wxTextValidator( wxFILTER_EMPTY ) );
3168 int startNum = atoi( startRef.
GetRefNumber().utf8_string().c_str() );
3183 if( ref.GetRef() == startRef.
GetRef() )
3185 int num = atoi( ref.GetRefNumber().utf8_string().c_str() );
3187 if( num >= startNum )
3190 wxString fullRef = ref.GetRef();
3196 ref.GetSymbol()->SetRef( &sheet,
From_UTF8( fullRef.c_str() ) );
3201 if( !commit.
Empty() )
3202 commit.
Push(
_(
"Increment Annotations" ) );
3244 if( !
m_frame->Schematic().GetCurrentVariant().IsEmpty() )
3247 _(
"Bulk Edit Symbol Library Links is not available when a design variant is "
3248 "active. Switch to the default variant first." ) );
3329 sheetSelection.
Add( item );
3336 wxImage
image = renderSelectionToImageForClipboard(
m_frame, sheetSelection, pageBBox,
true,
true );
3342 if( wxTheClipboard->Open() )
3344 wxDataObjectComposite* data =
new wxDataObjectComposite();
3348 wxTheClipboard->SetData( data );
3349 wxTheClipboard->Flush();
3350 wxTheClipboard->Close();
3355 wxLogMessage(
_(
"Cannot create the schematic image" ) );
3410 m_frame->GetCanvas()->Refresh();
3424 m_frame->GetCanvas()->Refresh();
3436 m_frame->GetCanvas()->Refresh();
3448 m_frame->GetCanvas()->Refresh();
3460 m_frame->GetCanvas()->Refresh();
3471 m_frame->GetCanvas()->Refresh();
3480 wxString variant =
m_frame->Schematic().GetCurrentVariant();
3484 m_frame->GetCanvas()->GetView()->UpdateAllItemsConditionally(
3489 auto invalidateTextVars =
3492 if(
text->HasTextVars() )
3494 text->ClearRenderCache();
3495 text->ClearBoundingBoxCache();
3502 item->RunOnChildren(
3503 [&invalidateTextVars](
SCH_ITEM* aChild )
3506 invalidateTextVars(
text );
3510 if( item->GetExcludedFromSim( sheetPath, variant ) )
3515 invalidateTextVars(
text );
3520 m_frame->GetCanvas()->Refresh();
3532 m_frame->RefreshOperatingPointDisplay();
3533 m_frame->GetCanvas()->Refresh();
3545 m_frame->RefreshOperatingPointDisplay();
3546 m_frame->GetCanvas()->Refresh();
3560 m_frame->GetCanvas()->Refresh();
3578 m_frame->eeconfig()->m_Drawing.line_mode++;
3598 switch(
static_cast<LINE_MODE>(
m_frame->eeconfig()->m_Drawing.line_mode ) )
3612 if( !
Pgm().GetCommonSettings()->m_Input.hotkey_feedback )
3616 int currentIdx =
m_toolMgr->GetSettings()->m_Window.grid.last_size_idx;
3618 wxArrayString gridsLabels;
3621 gridsLabels.Add(
grid.UserUnitsMessageText(
m_frame ) );
3623 if( !
m_frame->GetHotkeyPopup() )
3629 popup->
Popup(
_(
"Grid" ), gridsLabels, currentIdx );
3646 if( selection.Size() != 1 || selection[0]->Type() !=
SCH_GROUP_T )
3651 if( !
group->HasDesignBlockLink() )
3656 std::unique_ptr<DESIGN_BLOCK> designBlock( designBlockPane->
GetDesignBlock(
group->GetDesignBlockLibId(),
3662 if( designBlock->GetSchematicFile().IsEmpty() )
3665 msg.Printf(
_(
"Design block %s does not have a schematic file." ),
3666 group->GetDesignBlockLibId().GetUniStringLibId() );
3667 m_frame->GetInfoBar()->ShowMessageFor( msg, 5000, wxICON_WARNING );
3688 if( selection.Size() != 1 || selection[0]->Type() !=
SCH_GROUP_T )
3693 if( !
group->HasDesignBlockLink() )
3698 std::unique_ptr<DESIGN_BLOCK> designBlock( designBlockPane->
GetDesignBlock(
group->GetDesignBlockLibId(),
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.
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, wxString *aErrorMsg=nullptr)
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.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
A base class for most all the KiCad significant classes used in schematics and boards.
virtual VECTOR2I GetPosition() const
EDA_ITEM_FLAGS GetEditFlags() const
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.
void SetNetHighlighted(bool aHighlighted)
virtual EDA_ITEM * Clone() const
Create a duplicate of this item with linked list members set to NULL.
bool IsNetHighlighted() const
Net highlighting must not clear brightening owned by find or picker tools.
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
Runs the electrical rules checks and adds a SCH_MARKER for each violation.
static const TOOL_EVENT ClearedEvent
static const TOOL_EVENT GridChangedByKeyEvent
Used for hotkey feedback.
static const TOOL_EVENT SelectedEvent
static const TOOL_EVENT SelectedItemsModified
Selected item had a property changed (except movement)
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
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.
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
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)
Convert an escaped schematic net name to SPICE, preserving literal slashes when mapping ground names.
Tree view item data for the net navigator.
static bool ParseBusGroup(const wxString &aGroup, wxString *name, std::vector< wxString > *aMemberList, size_t *aPrefixEnd=nullptr)
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.
SCH_CONNECTIVITY::NETCHAIN_MANAGER & NetChains() const
wxString GetVariantDescription(const wxString &aVariantName) const
Return the description for a variant.
wxString GetFileName() const
Helper to retrieve the filename from the root sheet screen.
SCHEMATIC_SETTINGS & Settings() const
SCH_SHEET_LIST Hierarchy() const
Return the full schematic flattened hierarchical sheet list.
PROJECT & Project() const
Return a reference to the project this schematic is part of.
wxString GetCurrentVariant() const
Return the current variant being edited.
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 copyVariant
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 renameVariant
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.
Commit for the schematic and symbol editors.
void Revert() override
Revert the commit by restoring the modified items state.
void Push(const wxString &aMessage=wxEmptyString, int aCommitFlags=0) override
Execute the changes.
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
One UI operation's hierarchy index.
void CollectNetItems(const wxString &aName, const SCH_SHEET_PATH &aSheet, std::unordered_set< SCH_ITEM * > &aItems, bool aIncludeBusParents=false, bool aIncludeBusMembers=false) const
bool ReplaceNetChainTerminalPin(const TERMINAL_CHANGE &aChange)
static wxString NetKeyForItem(const SCH_ITEM &aItem, const SCH_SHEET_PATH &aPath)
bool NetChainsBuilt() const
Returns true once RebuildNetChains() has completed at least once on this graph.
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 under the cursor.
int ClearHighlight(const TOOL_EVENT &aEvent)
Remove any net highlighting.
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)
int HighlightNetCursor(const TOOL_EVENT &aEvent)
Launch a tool to highlight nets.
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)
Notifies pcbnew about the selected item.
void SetHighlightBusMembers(bool aHighlightBusMembers)
int CopyVariant(const TOOL_EVENT &aEvent)
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)
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)
Replace one of a net chain's terminal pins.
int SimTune(const TOOL_EVENT &aEvent)
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)
Equivalent to the above, but initiated by the user.
int ToggleOPCurrents(const TOOL_EVENT &aEvent)
int ShowPcbNew(const TOOL_EVENT &aEvent)
int UpdateNetHighlighting(const TOOL_EVENT &aEvent)
Update net highlighting after an edit.
int ToggleERCErrors(const TOOL_EVENT &aEvent)
int ShowHierarchy(const TOOL_EVENT &aEvent)
int OnAngleSnapModeChanged(const TOOL_EVENT &aEvent)
void setTransitions() override
Set up handlers for various events.
bool m_highlightBusMembers
static const LIB_SYMBOL * ChoosePasteLibSymbol(const SCH_SCREEN *aClipboardScreen, const SCH_SCREEN *aDestScreen, const wxString &aLibSymbolName)
Choose which cached library symbol a pasted instance should adopt.
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)
Highlight net chain under the cursor.
int ToggleLibraryTree(const TOOL_EVENT &aEvent)
int RenameVariant(const TOOL_EVENT &aEvent)
std::set< SCH_SYMBOL * > m_pastedSymbols
void prunePastedSymbolInstances()
Reconcile every pasted symbol's instances against the current project.
int Cut(const TOOL_EVENT &aEvent)
Clipboard support.
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)
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 OnModify() override
Must be called after a schematic change in order to set the "modify" flag and update other data struc...
void ToggleLibraryTree() override
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
bool RecalculateConnections(SCH_COMMIT *aCommit, SCH_CLEANUP_FLAGS aCleanupFlags, PROGRESS_REPORTER *aProgressReporter=nullptr, bool aCleanupDone=false)
Generate the connection data for the entire schematic hierarchy.
void SendCrossProbeClearHighlight()
Tell Pcbnew to clear the existing highlighted net, if one exists.
SCH_SHEET_PATH & GetCurrentSheet() const
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 SetHighlightedConnection(const wxString &aConnection, const NET_NAVIGATOR_ITEM_DATA *aSelection=nullptr, bool aForceNetNavigatorRefresh=false)
void SetHighlightedNetChain(const wxString &aNetChain)
void SetCrossProbeConnection(const wxString &aName)
Send a connection (net or bus) to Pcbnew for highlighting.
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 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 file type from the corresponding plugin type name: "kicad", "legacy", etc.
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)
Set the dirty flag.
bool IsConnectivityDirty() const
std::optional< wxString > GetConnectionName(const SCH_SHEET_PATH *aSheet=nullptr, bool aLocal=false, bool aIgnoreSheet=false) const
Return the active connection name; absent for missing or stale published rows.
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.
bool HasBusConnection(const SCH_SHEET_PATH *aSheet=nullptr) const
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 std::set< wxString > & GetNets() const
const wxString & GetName() const
static bool IsValidName(const wxString &aName)
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() const
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 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.
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.
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 UpdateSymbolLinks(REPORTER *aReporter=nullptr, LEGACY_SYMBOL_LIBS *aLegacyLibs=nullptr, SYMBOL_LIBRARY_ADAPTER *aLibraries=nullptr)
Initialize the LIB_SYMBOL reference for each SCH_SYMBOL found in this schematic from the project LIBR...
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 * 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
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
std::vector< SCH_PIN * > GetGraphicalPins(int aUnit, int aBodyStyle) const override
void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction, RECURSE_MODE aMode) 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.
virtual void Add(EDA_ITEM *aItem)
A null aItem is ignored; the selection never holds null members.
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, std::span< const wxString > 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 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)
#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
bool m_ConnectivityEngine
Use the schematic connectivity engine instead of CONNECTION_GRAPH.
#define THROW_IO_ERROR(msg)
macro which captures the "call site" values of FILE_, __FUNCTION & LINE
static const std::string KiCadSchematicFileExtension
static wxString KiCadSchematicFileWildcard()
static const wxChar traceSchPaste[]
Flag to enable schematic paste debugging output.
static wxString From_UTF8(const char *cstring)
Convert a UTF8 encoded C string to a wxString for all wxWidgets build modes.
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
#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.
bool LoadFileToMemory(const wxString &aFileName, wxMemoryBuffer &aBuffer)
Load the contents of a file into a memory buffer.
#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 setNetHighlight(SCH_ITEM *aItem, bool aHighlight)
#define HITTEST_THRESHOLD_PIXELS
static void recalculateIfStale(SCH_EDIT_FRAME *aFrame, SCH_ITEM *aItem)
static bool highlightNet(TOOL_MANAGER *aToolMgr, const SCH_SHEET_PATH &aSheetPath, const VECTOR2D &aPosition)
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)
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
@ 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