78#include <wx/filedlg.h> 
   80#include <wx/treectrl.h> 
  131    wxFileDialog dlg( 
m_frame, 
_( 
"Schematic Files" ), curr_fn.GetPath(), curr_fn.GetFullName(),
 
  134    if( dlg.ShowModal() == wxID_CANCEL )
 
  139    m_frame->saveSchematicFile( curr_sheet, newFilename );
 
 
  149    if( 
m_frame->GetCurrentSheet().Last() != &root )
 
  159    msg.Printf( 
_( 
"Revert '%s' (and all sub-sheets) to last version saved?" ), schematic.
GetFileName() );
 
  167        screen->SetContentModified( 
false );    
 
 
  178    m_frame->ShowSchematicSetupDialog();
 
 
  200        m_frame->GetCanvas()->GetView()->MarkDirty();
 
  202        m_frame->GetCanvas()->Refresh();
 
  208        m_frame->RollbackSchematicFromUndo();
 
 
  231                            m_frame->GetCanvas()->GetBackend() );
 
 
  240                                      m_frame->GetCanvas()->GetBackend() );
 
 
  258        if( aRunningOnDemand )
 
  268        m_frame->GetCanvas()->Refresh();
 
 
  282    m_frame->GetCanvas()->Refresh( 
true );
 
 
  338    m_frame->SendSelectItemsToPcb( selection.GetItemsSortedBySelectionOrder(), aForce );
 
 
  344    bool                   savePowerSymbols = 
false;
 
  350    targetLib = 
m_frame->SelectLibrary( 
_( 
"Export Symbols" ), 
_( 
"Export symbols to library:" ),
 
  351                                        { { 
_( 
"Include power symbols in export" ), &savePowerSymbols },
 
  352                                          { 
_( 
"Update schematic symbols to link to exported symbols" ), &map }
 
  355    if( targetLib.empty() )
 
  360    sheets.
GetSymbols( symbols, savePowerSymbols );
 
  362    std::map<LIB_ID, LIB_SYMBOL*> libSymbols;
 
  363    std::map<LIB_ID, std::vector<SCH_SYMBOL*>> symbolMap;
 
  365    for( 
size_t i = 0; i < symbols.
GetCount(); ++i )
 
  371        if( libSymbols.count( 
id ) )
 
  374                          "Two symbols have the same LIB_ID but are different!" );
 
  378            libSymbols[id] = libSymbol;
 
  381        symbolMap[id].emplace_back( symbol );
 
  388    auto optRow = adapter->
GetRow( targetLib );
 
  389    wxCHECK( optRow, 0 );
 
  398    for( 
const std::pair<const LIB_ID, LIB_SYMBOL*>& it : libSymbols )
 
  405            pi->SaveSymbol( dest.GetFullPath(), newSym );
 
  409            msg.Printf( 
_( 
"Error saving symbol %s to library '%s'." ), newSym->
GetName(), row->
Nickname() );
 
  410            msg += wxS( 
"\n\n" ) + ioe.
What();
 
  420            for( 
SCH_SYMBOL* symbol : symbolMap[it.first] )
 
  424                wxCHECK2( parentScreen, 
continue );
 
  427                symbol->SetLibId( 
id );
 
  437        globalTable->
Save().map_error(
 
  440                wxMessageBox( wxString::Format( 
_( 
"Error saving global library table:\n\n%s" ),
 
  442                              _( 
"File Save Error" ), wxOK | wxICON_ERROR );
 
  445    else if( std::optional<LIBRARY_TABLE*> optTable = adapter->
ProjectTable() )
 
  447        ( *optTable )->Save().map_error(
 
  450                wxMessageBox( wxString::Format( 
_( 
"Error saving project-specific library table:\n\n%s" ),
 
  452                              _( 
"File Save Error" ), wxOK | wxICON_ERROR );
 
  458        std::set<SCH_SCREEN*> processedScreens;
 
  464            if( processedScreens.find( ( screen ) ) == processedScreens.end() )
 
  466                processedScreens.insert( screen );
 
  471        commit.
Push( wxS( 
"Update Library Identifiers" ) );
 
 
  478#define HITTEST_THRESHOLD_PIXELS 5 
  490        blocking_win->Close( 
true );
 
  522                    if( !symbol || !libPin )
 
  530                        std::vector<EMBEDDED_FILES*> embeddedFilesStack;
 
  531                        embeddedFilesStack.push_back( 
m_frame->Schematic().GetEmbeddedFiles() );
 
  534                            embeddedFilesStack.push_back( symbolEmbeddedFile );
 
  547                        if( currentNames.size() == 0 )
 
  551                        else if( currentNames.size() == 1 )
 
  563                            wxString 
name = currentNames.at( modelPinIndex );
 
  574                else if( item->
IsType( { SCH_ITEM_LOCATE_WIRE_T } ) || item->
IsType( { SCH_JUNCTION_T } ) )
 
  594                collector.
Collect( 
m_frame->GetScreen(), { SCH_ITEM_LOCATE_WIRE_T,
 
  596                                                           SCH_SHEET_PIN_T }, aPos );
 
  628                wxString connectionName = ( conn ) ? conn->
Name() : wxString( wxS( 
"" ) );
 
  630                if( 
m_frame->GetHighlightedConnection() != connectionName )
 
  632                    m_frame->SetHighlightedConnection( connectionName );
 
  640            [
this]( 
const int& aFinalState )
 
  645                if( !
m_frame->GetHighlightedConnection().IsEmpty() )
 
  647                    m_frame->SetHighlightedConnection( wxEmptyString );
 
 
  690                    item = item->GetParent();
 
  703                        blocking_win->Close( 
true );
 
  705                    static_cast<SIMULATOR_FRAME*
>( simFrame )->AddTuner( sheetPath, symbol );
 
  719                collector.
Collect( 
m_frame->GetScreen(), { SCH_SYMBOL_T, SCH_FIELD_T }, aPos );
 
  727                    item = 
static_cast<SCH_FIELD*
>( item )->GetParentSymbol();
 
  742            [
this]( 
const int& aFinalState )
 
 
  774    if( aPosition != 
CLEAR )
 
  778        if( 
erc.TestDuplicateSheetNames( 
false ) > 0 )
 
  780            wxMessageBox( 
_( 
"Error: duplicate sub-sheet names found in current sheet." ) );
 
  798                    std::vector<SCH_PIN*> pins = symbol->
GetPins();
 
  800                    if( pins.size() == 1 )
 
  801                        conn = pins[0]->Connection();
 
  811    wxString connName = ( conn ) ? conn->Name() : wxString( wxS( 
"" ) );
 
  815        editFrame->SetStatusText( wxT( 
"" ) );
 
  818        editorControl->SetHighlightBusMembers( 
false );
 
  826            editorControl->SetHighlightBusMembers( 
false );
 
  832            editorControl->SetHighlightBusMembers( !editorControl->GetHighlightBusMembers() );
 
  842    editorControl->UpdateNetHighlighting( 
dummy );
 
 
  873    std::vector<std::pair<SCH_CONNECTION*, VECTOR2D>> selectedConns;
 
  882        selectedConns.emplace_back( conn, item->GetPosition() );
 
  885    if( selectedConns.empty() )
 
  887        m_frame->ShowInfoBarError( 
_( 
"No nets selected." ) );
 
  894    const auto getNetNamePattern =
 
  897                wxString netName = aConn.Name();
 
  904                        return prefix + wxT( 
"*" );
 
  906                        return prefix + wxT( 
".*" );
 
  917    std::set<wxString> netNames;
 
  919    for( 
const auto& [conn, pos] : selectedConns )
 
  921        std::optional<wxString> netNamePattern = getNetNamePattern( *conn );
 
  923        if( !netNamePattern )
 
  926            m_frame->ShowInfoBarError( 
_( 
"All selected nets must be labeled to assign a netclass." ) );
 
  930        netNames.insert( *netNamePattern );
 
  933    wxCHECK( !netNames.empty(), 0 );
 
  936            [&]( 
const std::vector<wxString>& aNetNames )
 
  938                for( SCH_ITEM* item : screen->Items() )
 
  940                    bool            redraw   = item->IsBrightened();
 
  941                    SCH_CONNECTION* itemConn = item->Connection();
 
  943                    if( itemConn && alg::contains( aNetNames, itemConn->Name() ) )
 
  944                        item->SetBrightened();
 
  946                        item->ClearBrightened();
 
  948                    redraw |= item->IsBrightened();
 
  950                    if( item->Type() == SCH_SYMBOL_T )
 
  952                        SCH_SYMBOL* symbol = static_cast<SCH_SYMBOL*>( item );
 
  954                        redraw |= symbol->HasBrightenedPins();
 
  956                        symbol->ClearBrightenedPins();
 
  958                        for( SCH_PIN* pin : symbol->GetPins() )
 
  960                            SCH_CONNECTION* pin_conn = pin->Connection();
 
  962                            if( pin_conn && alg::contains( aNetNames, pin_conn->Name() ) )
 
  964                                pin->SetBrightened();
 
  969                    else if( item->Type() == SCH_SHEET_T )
 
  971                        for( SCH_SHEET_PIN* pin : static_cast<SCH_SHEET*>( item )->GetPins() )
 
  973                            SCH_CONNECTION* pin_conn = pin->Connection();
 
  975                            redraw |= pin->IsBrightened();
 
  977                            if( pin_conn && alg::contains( aNetNames, pin_conn->Name() ) )
 
  978                                pin->SetBrightened();
 
  980                                pin->ClearBrightened();
 
  982                            redraw |= pin->IsBrightened();
 
  987                        getView()->Update( item, KIGFX::VIEW_UPDATE_FLAGS::REPAINT );
 
  990                m_frame->GetCanvas()->ForceRefresh();
 
  993    if( dlg.ShowModal() )
 
  995        getView()->UpdateAllItemsConditionally(
 
 1000                    auto invalidateTextVars =
 
 1003                                if( 
text->HasTextVars() )
 
 1005                                    text->ClearRenderCache();
 
 1006                                    text->ClearBoundingBoxCache();
 
 1013                    if( 
dynamic_cast<SCH_LINE*
>( aItem ) )
 
 1024                        item->RunOnChildren(
 
 1025                                [&invalidateTextVars]( 
SCH_ITEM* aChild )
 
 1028                                        invalidateTextVars( 
text );
 
 1033                            m_frame->GetScreen()->Update( item, 
false );   
 
 1037                        invalidateTextVars( 
text );
 
 
 1052    if( !selectionTool )
 
 1063                if( !conn->GetNetName().IsEmpty() )
 
 1065                    netName = conn->GetNetName();
 
 1072    if( netName.IsEmpty() )
 
 1073        netName = 
m_frame->GetHighlightedConnection();
 
 1075    if( netName.IsEmpty() )
 
 1077        m_frame->ShowInfoBarError( 
_( 
"No connected net selected." ) );
 
 1081    m_frame->FindNetInInspector( netName );
 
 
 1094    wxString               selectedName = 
m_frame->GetHighlightedConnection();
 
 1096    std::set<wxString>     connNames;
 
 1097    std::vector<EDA_ITEM*> itemsToRedraw;
 
 1099    wxCHECK( screen && connectionGraph, 0 );
 
 1101    if( !selectedName.IsEmpty() )
 
 1103        connNames.emplace( selectedName );
 
 1109                for( 
const SCH_ITEM* item : sg->GetItems() )
 
 1111                    wxCHECK2( item, 
continue );
 
 1115                        for( 
const std::shared_ptr<SCH_CONNECTION>& member : connection->AllMembers() )
 
 1118                                connNames.emplace( member->Name() );
 
 1130            for( 
const auto& [
_, bus_sgs] : sg->GetBusParents() )
 
 1133                    connNames.emplace( bus_sg->GetNetName() );
 
 1141        if( !item || !item->IsConnectable() )
 
 1154                    if( !
pin->IsBrightened() && connNames.count( pin_conn->Name() ) )
 
 1156                        pin->SetBrightened();
 
 1157                        redrawItem = symbol;
 
 1159                    else if( 
pin->IsBrightened() && !connNames.count( pin_conn->Name() ) )
 
 1161                        pin->ClearBrightened();
 
 1162                        redrawItem = symbol;
 
 1178                        if( !field->
IsBrightened() && connNames.count( pinConn->Name() ) )
 
 1181                            redrawItem = symbol;
 
 1183                        else if( field->
IsBrightened() && !connNames.count( pinConn->Name() ) )
 
 1186                            redrawItem = symbol;
 
 1198                wxCHECK2( 
pin, 
continue );
 
 1202                    if( !
pin->IsBrightened() && connNames.count( pin_conn->Name() ) )
 
 1204                        pin->SetBrightened();
 
 1207                    else if( 
pin->IsBrightened() && !connNames.count( pin_conn->Name() ) )
 
 1209                        pin->ClearBrightened();
 
 1219                if( !item->IsBrightened() && connNames.count( itemConn->Name() ) )
 
 1221                    item->SetBrightened();
 
 1224                else if( item->IsBrightened() && !connNames.count( itemConn->Name() ) )
 
 1226                    item->ClearBrightened();
 
 1233            itemsToRedraw.push_back( redrawItem );
 
 1236    if( itemsToRedraw.size() )
 
 1241        for( 
EDA_ITEM* redrawItem : itemsToRedraw )
 
 1244        m_frame->GetCanvas()->Refresh();
 
 
 1278    if( 
m_frame->GetUndoCommandCount() <= 0 )
 
 1287    wxCHECK( undo_list, 0 );
 
 1289    m_frame->PutDataInPreviousState( undo_list );
 
 1293    m_frame->PushCommandToRedoList( undo_list );
 
 1297    m_frame->GetCanvas()->Refresh();
 
 
 1308    if( 
m_frame->GetRedoCommandCount() == 0 )
 
 1320    m_frame->PutDataInPreviousState( list );
 
 1323    list->ReversePickersListOrder();
 
 1324    m_frame->PushCommandToUndoList( list );
 
 1328    m_frame->GetCanvas()->Refresh();
 
 
 1341    if( selection.Empty() )
 
 1344    if( aUseDuplicateClipboard )
 
 1347    selection.SetScreen( 
m_frame->GetScreen() );
 
 1350    for( 
EDA_ITEM* item : selection.GetItems() )
 
 1357        else if( item->Type() == 
SCH_FIELD_T && selection.IsHover() )
 
 1361            selection.Add( item->GetParent() );
 
 1366            selection.Remove( item );
 
 1371            static_cast<SCH_ITEM*
>( item )->RunOnChildren(
 
 1374                        selection.Add( aChild );
 
 1384    plugin.
Format( &selection, &selPath, schematic, &formatter, 
true );
 
 1386    std::string prettyData = formatter.
GetString();
 
 1389    if( selection.IsHover() )
 
 1392    if( aUseDuplicateClipboard )
 
 
 1425    wxTextEntry* textEntry = 
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
 
 
 1442    wxTextEntry* textEntry = 
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
 
 
 1461    if( selection.Empty() )
 
 1466    if( selection.IsHover() )
 
 
 1474                                             const KIID_PATH& aClipPath, 
bool aForceKeepAnnotations )
 
 1476    wxCHECK( 
m_frame && aSymbol,  );
 
 1479    bool instanceFound = 
false;
 
 1486        if( ( tmp.m_Path.empty() && aClipPath.empty() ) || ( !aClipPath.empty() && tmp.m_Path.
EndsWith( aClipPath ) ) )
 
 1489            instanceFound = 
true;
 
 1491            wxLogTrace( 
traceSchPaste, wxS( 
"Pasting found symbol instance with reference %s, unit %d:\n" 
 1492                                            "\tClipboard path: %s\n" 
 1493                                            "\tSymbol UUID: %s." ),
 
 1504    pasteLookupPath.push_back( aSymbol->
m_Uuid );
 
 1506    if( !instanceFound )
 
 1508        wxLogTrace( 
traceSchPaste, wxS( 
"Clipboard symbol instance **not** found:\n\tClipboard path: %s\n" 
 1509                                        "\tSymbol UUID: %s." ),
 
 1529    if( !aForceKeepAnnotations )
 
 
 1538                                                      const KIID_PATH& aClipPath, 
bool aForceKeepAnnotations,
 
 1542    wxCHECK( aSheet && aPastedSheets, aPastePath );
 
 1547    aPastedSheets->push_back( sheetPath );
 
 1554        if( item->IsConnectable() )
 
 1555            item->SetConnectivityDirty();
 
 1561            wxCHECK2( symbol, 
continue );
 
 1569                    pin->SetConnectivityDirty();
 
 1579            wxCHECK2( subsheet, 
continue );
 
 1587                    pin->SetConnectivityDirty();
 
 1592            newClipPath.push_back( subsheet->
m_Uuid );
 
 1594            updatePastedSheet( subsheet, sheetPath, newClipPath, aForceKeepAnnotations, aPastedSheets,
 
 1599    sheetPath.
GetSymbols( aPastedSymbols[aPastePath] );
 
 
 1607    wxCHECK( aScreen,  );
 
 1615            wxCHECK2( symbol, 
continue );
 
 1619                KIID_PATH pathWithSymbol = symbolInstance.m_Path;
 
 1621                pathWithSymbol.push_back( symbol->
m_Uuid );
 
 
 1636        wxCHECK2( symbol, 
continue );
 
 1638        std::vector<KIID_PATH> instancePathsToRemove;
 
 1642            if( instance.m_ProjectName != 
m_frame->Prj().GetProjectName() || instance.m_Path.empty() )
 
 1643                instancePathsToRemove.emplace_back( instance.m_Path );
 
 1647            symbol->RemoveInstance( 
path );
 
 
 1654    wxTextEntry* textEntry = 
dynamic_cast<wxTextEntry*
>( wxWindow::FindFocus() );
 
 1663    std::string         content;
 
 1673        auto bitmap = std::make_unique<SCH_BITMAP>();
 
 1675        bool ok = bitmap->GetReferenceImage().SetImage( *clipImg );
 
 1688    if( content.empty() )
 
 1711                                            "Do you want to continue?" ) );
 
 1717        tempScreen->
Append( text_item );
 
 1728    bool annotateAutomatic = 
m_frame->eeconfig()->m_AnnotatePanel.automatic;
 
 1733    bool       forceRemoveAnnotations = 
false;
 
 1753    std::vector<SCH_ITEM*> sortedLoadedItems;
 
 1754    bool                   sheetsPasted = 
false;
 
 1759    if( destFn.IsRelative() )
 
 1760        destFn.MakeAbsolute( 
m_frame->Prj().GetProjectPath() );
 
 1767    std::map<wxString, SCH_SCREEN*> loadedScreens;
 
 1771        if( item.LastScreen() )
 
 1772            loadedScreens[item.Last()->GetFileName()] = item.LastScreen();
 
 1783    std::set<wxString> existingRefsSet;
 
 1786        existingRefsSet.insert( ref.GetRef() );
 
 1789    std::map<KIID, EDA_ITEM*> itemMap;
 
 1793    std::map<SCH_SHEET_PATH, SCH_REFERENCE_LIST> pastedSymbols;
 
 1794    std::map<SCH_SHEET_PATH, SCH_SHEET_LIST>     pastedSheets;
 
 1799            sortedLoadedItems.push_back( item );
 
 1801            loadedItems.push_back( item );
 
 1804    sort( sortedLoadedItems.begin(), sortedLoadedItems.end(),
 
 1807              SCH_SHEET* firstSheet = static_cast<SCH_SHEET*>( firstItem );
 
 1808              SCH_SHEET* secondSheet = static_cast<SCH_SHEET*>( secondItem );
 
 1809              return StrNumCmp( firstSheet->GetName(), secondSheet->GetName(), false ) < 0;
 
 1813    for( 
SCH_ITEM* item : sortedLoadedItems )
 
 1815        loadedItems.push_back( item );
 
 1822            if( srcFn.IsRelative() )
 
 1823                srcFn.MakeAbsolute( 
m_frame->Prj().GetProjectPath() );
 
 1827            if( hierarchy.
TestForRecursion( sheetHierarchy, destFn.GetFullPath( wxPATH_UNIX ) ) )
 
 1829                auto msg = wxString::Format( 
_( 
"The pasted sheet '%s'\n" 
 1830                                                "was dropped because the destination already has " 
 1831                                                "the sheet or one of its subsheets as a parent." ),
 
 1834                loadedItems.pop_back();
 
 1840    tempScreen->
Clear( 
false );
 
 1842    for( 
EDA_ITEM* item : loadedItems )
 
 1848        wxCHECK2( schItem, 
continue );
 
 1863            wxCHECK2( currentScreen, 
continue );
 
 1887                if( !existingRefsSet.contains( instance.m_Reference ) )
 
 1889                    forceKeepAnnotations = !forceRemoveAnnotations;
 
 1905                if( existingRefsSet.contains( instance.m_Reference ) )
 
 1907                    needsNewKiid = 
true;
 
 1915                const_cast<KIID&
>( item->m_Uuid ) = 
KIID();
 
 1921                    pin->SetConnectivityDirty();
 
 1931                        pastedSymbols[sheetPath].AddItem( schReference );
 
 1940            wxString    baseName       = nameField->
GetText();
 
 1941            wxString    candidateName  = baseName;
 
 1944            while( !baseName.IsEmpty() && wxIsdigit( baseName.Last() ) )
 
 1946                number = baseName.Last() + number;
 
 1947                baseName.RemoveLast();
 
 1952            hierarchy = 
m_frame->Schematic().Hierarchy();
 
 1954            int uniquifier = std::max( 0, wxAtoi( number ) ) + 1;
 
 1956            while( existingSheetNames.count( candidateName ) )
 
 1957                candidateName = wxString::Format( wxT( 
"%s%d" ), baseName, uniquifier++ );
 
 1959            nameField->
SetText( candidateName );
 
 1960            existingSheetNames.emplace( candidateName );
 
 1968            if( !fn.IsAbsolute() )
 
 1971                fn.Normalize(  
FN_NORMALIZE_FLAGS | wxPATH_NORM_ENV_VARS, currentSheetFileName.GetPath() );
 
 1975            if( !
m_frame->Schematic().Root().SearchHierarchy( fn.GetFullPath( wxPATH_UNIX ), &existingScreen ) )
 
 1977                if( loadedScreens.count( sheet->
GetFileName() ) > 0 )
 
 1978                    existingScreen = loadedScreens.at( sheet->
GetFileName() );
 
 1983            if( existingScreen )
 
 1989                if( !
m_frame->LoadSheetFromFile( sheet, &pasteRoot, fn.GetFullPath() ) )
 
 1996            sheetsPasted = 
true;
 
 1999            clipPath.push_back( sheet->
m_Uuid );
 
 2008                pin->SetConnectivityDirty();
 
 2016                                                            ( forceKeepAnnotations && annotateAutomatic ),
 
 2017                                                            &pastedSheets[sheetPath], pastedSymbols );
 
 2026            const_cast<KIID&
>( item->m_Uuid ) = 
KIID();
 
 2028            if( srcItem && destItem )
 
 2055        m_frame->Schematic().RefreshHierarchy();
 
 2063                wxString pageNum = wxString::Format( 
"%d", page );
 
 2066                    pageNum = wxString::Format( 
"%d", ++page );
 
 2070                sheetInstance.
m_Path = pastedSheet.Path();
 
 2073                sheetInstance.
m_Path.pop_back();
 
 2079                wxCHECK2( sheet, 
continue );
 
 2082                hierarchy.push_back( pastedSheet );
 
 2085                std::vector<KIID_PATH> instancesToRemove;
 
 2089                    if( !hierarchy.
HasPath( instance.m_Path ) )
 
 2090                        instancesToRemove.push_back( instance.m_Path );
 
 2093                for( 
const KIID_PATH& instancePath : instancesToRemove )
 
 2098        m_frame->SetSheetNumberAndCount();
 
 2102        hierarchy = 
m_frame->Schematic().Hierarchy();
 
 2105    std::map<SCH_SHEET_PATH, SCH_REFERENCE_LIST> annotatedSymbols;
 
 2110        for( 
size_t i = 0; i < pastedSymbols[sheetPath].GetCount(); i++ )
 
 2113                annotatedSymbols[sheetPath].AddItem( pastedSymbols[sheetPath][i] );
 
 2116        for( 
const SCH_SHEET_PATH& pastedSheetPath : pastedSheets[sheetPath] )
 
 2118            for( 
size_t i = 0; i < pastedSymbols[pastedSheetPath].GetCount(); i++ )
 
 2121                    annotatedSymbols[pastedSheetPath].AddItem( pastedSymbols[pastedSheetPath][i] );
 
 2126    if( !annotatedSymbols.empty() )
 
 2133            annotatedSymbols[
path].SortByReferenceOnly();
 
 2138                annotatedSymbols[
path].ReannotateDuplicates( existingRefs, annotateAlgo );
 
 2142                annotatedSymbols[
path].ReannotateByOptions( annotateOrder, annotateAlgo, annotateStartNum,
 
 2143                                                            existingRefs, 
false, &hierarchy );
 
 2146            annotatedSymbols[
path].UpdateAnnotation();
 
 2149            for( 
size_t i = 0; i < annotatedSymbols[
path].GetCount(); i++ )
 
 2150                existingRefs.
AddItem( annotatedSymbols[
path][i] );
 
 2154                annotatedSymbols[pastedSheetPath].SortByReferenceOnly();
 
 2155                annotatedSymbols[pastedSheetPath].SetRefDesTracker( schematicSettings.
m_refDesTracker );
 
 2159                    annotatedSymbols[pastedSheetPath].ReannotateDuplicates( existingRefs, annotateAlgo );
 
 2163                    annotatedSymbols[pastedSheetPath].ReannotateByOptions( annotateOrder, annotateAlgo,
 
 2164                                                                           annotateStartNum, existingRefs,
 
 2165                                                                           false, &hierarchy );
 
 2168                annotatedSymbols[pastedSheetPath].UpdateAnnotation();
 
 2171                for( 
size_t i = 0; i < annotatedSymbols[pastedSheetPath].GetCount(); i++ )
 
 2172                    existingRefs.
AddItem( annotatedSymbols[pastedSheetPath][i] );
 
 2177    m_frame->GetCurrentSheet().UpdateAllScreenReferences();
 
 2195    for( 
int i = loadedItems.size() - 1; i >= 0; i-- )
 
 2201            loadedItems.erase( loadedItems.begin() + i );
 
 2214    if( !selection.Empty() )
 
 2218            int closest_dist = INT_MAX;
 
 2223                        int dist = ( eventPos - pt ).EuclideanNorm();
 
 2225                        if( dist < closest_dist )
 
 2227                            selection.SetReferencePoint( pt );
 
 2228                            closest_dist = dist;
 
 2233            for( 
EDA_ITEM* item : selection.Items() )
 
 2245                    processPt( 
pin->GetPosition() );
 
 2251                    processPt( item->GetPosition() );
 
 2255            if( closest_dist == INT_MAX )
 
 2257                for( 
EDA_ITEM* item : selection.Items() )
 
 2259                    switch( item->Type() )
 
 2262                        processPt( 
static_cast<SCH_LINE*
>( item )->GetStartPoint() );
 
 2263                        processPt( 
static_cast<SCH_LINE*
>( item )->GetEndPoint() );
 
 2283                            for( 
int ii = 0; ii < shape->
GetPolyShape().TotalVertices(); ++ii )
 
 2290                            processPt( shape->
GetEnd() );
 
 2298                        processPt( item->GetPosition() );
 
 2307        else if( selection.GetTopLeftItem()->Type() == 
SCH_GROUP_T )
 
 2314            group->RunOnChildren(
 
 2326                selection.SetReferencePoint( item->
GetPosition() );
 
 2328                selection.SetReferencePoint( 
group->GetPosition() );
 
 2334            selection.SetReferencePoint( item->
GetPosition() );
 
 2340            commit.
Push( 
_( 
"Paste" ) );
 
 2344                m_frame->UpdateHierarchyNavigator();
 
 2349                m_frame->RefreshNetNavigator();
 
 
 2371    if( selection.GetSize() >= 1 )
 
 2374    if( selection.IsHover() )
 
 2382            tableTool->EditTable( aEvent );
 
 2392        m_frame->ShowInfoBarError( 
_( 
"Symbols with broken library symbol links cannot be edited." ) );
 
 2402            blocking_win->Close( 
true );
 
 
 2431    dlg.
m_FirstRefDes->SetValidator( wxTextValidator( wxFILTER_EMPTY ) );
 
 2445        int startNum = atoi( startRef.
GetRefNumber().utf8_string().c_str() );
 
 2460            if( ref.GetRef() == startRef.
GetRef() )
 
 2462                int num = atoi( ref.GetRefNumber().utf8_string().c_str() );
 
 2464                if( num >= startNum )
 
 2467                    wxString              fullRef = ref.GetRef();
 
 2473                    ref.GetSymbol()->SetRef( &sheet, 
From_UTF8( fullRef.c_str() ) );
 
 2478        if( !commit.
Empty() )
 
 2479            commit.
Push( 
_( 
"Increment Annotations" ) );
 
 
 2582    m_frame->DrawCurrentSheetToClipboard();
 
 
 2628    m_frame->GetCanvas()->Refresh();
 
 
 2640    m_frame->GetCanvas()->Refresh();
 
 
 2652    m_frame->GetCanvas()->Refresh();
 
 
 2664    m_frame->GetCanvas()->Refresh();
 
 
 2676    m_frame->GetCanvas()->Refresh();
 
 
 2687    m_frame->GetCanvas()->Refresh();
 
 
 2698    m_frame->GetCanvas()->GetView()->UpdateAllItemsConditionally(
 
 2703                auto invalidateTextVars =
 
 2706                            if( 
text->HasTextVars() )
 
 2708                                text->ClearRenderCache();
 
 2709                                text->ClearBoundingBoxCache();
 
 2716                    item->RunOnChildren(
 
 2717                            [&invalidateTextVars]( 
SCH_ITEM* aChild )
 
 2720                                    invalidateTextVars( 
text );
 
 2724                    if( item->GetExcludedFromSim() )
 
 2729                    invalidateTextVars( 
text );
 
 2734    m_frame->GetCanvas()->Refresh();
 
 
 2746    m_frame->RefreshOperatingPointDisplay();
 
 2747    m_frame->GetCanvas()->Refresh();
 
 
 2759    m_frame->RefreshOperatingPointDisplay();
 
 2760    m_frame->GetCanvas()->Refresh();
 
 
 2774    m_frame->GetCanvas()->Refresh();
 
 
 2792    m_frame->eeconfig()->m_Drawing.line_mode++;
 
 
 2812    m_frame->ScriptingConsoleEnableDisable();
 
 
 2820    if( 
Pgm().GetCommonSettings()->m_Api.enable_server )
 
 2821        Pgm().GetPluginManager().ReloadPlugins();
 
 
 2829    switch( 
static_cast<LINE_MODE>( 
m_frame->eeconfig()->m_Drawing.line_mode ) )
 
 
 2854    std::map<KIID, EDA_ITEM*> ids;
 
 2862                auto it = ids.find( aItem->m_Uuid );
 
 2864                if( it != ids.end() && it->second != aItem )
 
 2867                    const_cast<KIID&
>( aItem->m_Uuid ) = 
KIID();
 
 2870                ids[ aItem->m_Uuid ] = aItem;
 
 2882            processItem( item );
 
 2895            processItem( item );
 
 2899                item->RunOnChildren(
 
 2902                            processItem( item );
 
 2919        errors += duplicates;
 
 2920        details += wxString::Format( 
_( 
"%d duplicate IDs replaced.\n" ), duplicates );
 
 2923        m_frame->Schematic().RefreshHierarchy();
 
 2930        wxString msg = wxString::Format( 
_( 
"%d potential problems repaired." ), errors );
 
 
 2946    if( !
Pgm().GetCommonSettings()->m_Input.hotkey_feedback )
 
 2950    int currentIdx = 
m_toolMgr->GetSettings()->m_Window.grid.last_size_idx;
 
 2952    wxArrayString gridsLabels;
 
 2955        gridsLabels.Add( 
grid.UserUnitsMessageText( 
m_frame ) );
 
 2957    if( !
m_frame->GetHotkeyPopup() )
 
 2963        popup->
Popup( 
_( 
"Grid" ), gridsLabels, currentIdx );
 
 
 2980    if( selection.Size() != 1 || selection[0]->Type() != 
SCH_GROUP_T )
 
 2985    if( !
group->HasDesignBlockLink() )
 
 2990    std::unique_ptr<DESIGN_BLOCK> designBlock( designBlockPane->
GetDesignBlock( 
group->GetDesignBlockLibId(),
 
 2996        msg.Printf( 
_( 
"Could not find design block %s." ), 
group->GetDesignBlockLibId().GetUniStringLibId() );
 
 2997        m_frame->GetInfoBar()->ShowMessageFor( msg, 5000, wxICON_WARNING );
 
 3001    if( designBlock->GetSchematicFile().IsEmpty() )
 
 3004        msg.Printf( 
_( 
"Design block %s does not have a schematic file." ),
 
 3005                    group->GetDesignBlockLibId().GetUniStringLibId() );
 
 3006        m_frame->GetInfoBar()->ShowMessageFor( msg, 5000, wxICON_WARNING );
 
 
 3027    if( selection.Size() != 1 || selection[0]->Type() != 
SCH_GROUP_T )
 
 3032    if( !
group->HasDesignBlockLink() )
 
 3037    std::unique_ptr<DESIGN_BLOCK> designBlock( designBlockPane->
GetDesignBlock( 
group->GetDesignBlockLibId(),
 
 3043        msg.Printf( 
_( 
"Could not find design block %s." ), 
group->GetDesignBlockLibId().GetUniStringLibId() );
 
 3044        m_frame->GetInfoBar()->ShowMessageFor( msg, 5000, wxICON_WARNING );
 
 
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
 
static TOOL_ACTION updatePcbFromSchematic
 
static TOOL_ACTION revert
 
static TOOL_ACTION saveAs
 
static TOOL_ACTION pluginsReload
 
static TOOL_ACTION pickerTool
 
static TOOL_ACTION showSymbolEditor
 
static TOOL_ACTION pasteSpecial
 
static TOOL_ACTION pageSettings
 
static TOOL_ACTION showSearch
 
static TOOL_ACTION selectionActivate
Activation of the selection tool.
 
static TOOL_ACTION duplicate
 
static TOOL_ACTION doDelete
 
static TOOL_ACTION updateSchematicFromPcb
 
static TOOL_ACTION selectionClear
Clear the current selection.
 
static TOOL_ACTION showProperties
 
static TOOL_ACTION copyAsText
 
static TOOL_ACTION refreshPreview
 
static TOOL_ACTION selectItems
Select a list of items (specified as the event parameter)
 
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
 
static wxString m_DrawingSheetFileName
the name of the drawing sheet file, or empty to use the default drawing sheet
 
int GetCount() const
Return the number of objects in the list.
 
COMMIT & Added(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Notify observers that aItem has been added.
 
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr, RECURSE_MODE aRecurse=RECURSE_MODE::NO_RECURSE)
Modify a given item in the model.
 
Calculate the connectivity of a schematic and generates netlists.
 
CONNECTION_SUBGRAPH * FindSubgraphByName(const wxString &aNetName, const SCH_SHEET_PATH &aPath)
Return the subgraph for a given net name on a given sheet.
 
const std::vector< CONNECTION_SUBGRAPH * > & GetAllSubgraphs(const wxString &aNetName) const
 
A subgraph is a set of items that are electrically connected on a single sheet.
 
static PRIORITY GetDriverPriority(SCH_ITEM *aDriver)
Return the priority (higher is more important) of a candidate driver.
 
void SelectLibId(const LIB_ID &aLibId)
 
DESIGN_BLOCK * GetDesignBlock(const LIB_ID &aLibId, bool aUseCacheLib, bool aShowErrorMsg)
Load design block from design block library table.
 
Class DIALOG_INCREMENT_ANNOTATIONS_BASE.
 
wxTextCtrl * m_FirstRefDes
 
wxRadioButton * m_AllSheets
 
void SetWksFileName(const wxString &aFilename)
 
bool Show(bool show) override
 
void SetInitialFocus(wxWindow *aWindow)
Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown.
 
A base class for most all the KiCad significant classes used in schematics and boards.
 
virtual VECTOR2I GetPosition() const
 
EDA_ITEM_FLAGS GetEditFlags() const
 
virtual EDA_GROUP * GetParentGroup() const
 
KICAD_T Type() const
Returns the type of object.
 
virtual bool IsType(const std::vector< KICAD_T > &aScanTypes) const
Check whether the item is one of the listed types.
 
virtual void SetParent(EDA_ITEM *aParent)
 
EDA_ITEM * GetParent() const
 
bool IsBrightened() const
 
SHAPE_POLY_SET & GetPolyShape()
 
const VECTOR2I & GetEnd() const
Return the ending point of the graphic.
 
const VECTOR2I & GetStart() const
Return the starting point of the graphic.
 
std::vector< VECTOR2I > GetRectCorners() const
 
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
 
virtual const wxString & GetText() const
Return the string associated with the text object.
 
virtual bool IsVisible() const
 
PANEL_ANNOTATE m_AnnotatePanel
 
EE_TYPE OfType(KICAD_T aType) const
 
static const TOOL_EVENT ClearedEvent
 
static const TOOL_EVENT GridChangedByKeyEvent
 
static const TOOL_EVENT SelectedEvent
 
static const TOOL_EVENT SelectedItemsModified
Selected items were moved, this can be very high frequency on the canvas, use with care.
 
static const TOOL_EVENT PointSelectedEvent
 
static const TOOL_EVENT UnselectedEvent
 
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
 
virtual const wxString What() const
A composite of Problem() and Where()
 
An interface for classes handling user events controlling the view behavior such as zooming,...
 
VECTOR2D GetCursorPosition() const
Return the current cursor position in world coordinates.
 
An abstract base class for deriving all objects that can be added to a VIEW.
 
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
 
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const
For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has chan...
 
void SetLayerVisible(int aLayer, bool aVisible=true)
Control the visibility of a particular layer.
 
void UpdateAllItems(int aUpdateFlags)
Update all items in the view according to the given flags.
 
void Hide(VIEW_ITEM *aItem, bool aHide=true, bool aHideOverlay=false)
Temporarily hide the item in the view (e.g.
 
void AddToPreview(VIEW_ITEM *aItem, bool aTakeOwnership=true)
 
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Set the item visibility.
 
bool EndsWith(const KIID_PATH &aPath) const
Test if aPath from the last path towards the first path.
 
wxString AsString() const
 
wxString AsString() const
 
KIWAY & Kiway() const
Return a reference to the KIWAY that this object has an opportunity to participate in.
 
A wxFrame capable of the OpenProjectFiles function, meaning it can load a portion of a KiCad project.
 
wxWindow * GetBlockingDialog()
Gets the window pointer to the blocking dialog (to send it signals)
 
std::optional< LIBRARY_TABLE * > ProjectTable() const
Retrieves the project library table for this adapter type, or nullopt if one doesn't exist.
 
LIBRARY_TABLE * GlobalTable() const
Retrieves the global library table for this adapter type.
 
std::optional< LIBRARY_TABLE_ROW * > GetRow(const wxString &aNickname, LIBRARY_TABLE_SCOPE aScope=LIBRARY_TABLE_SCOPE::BOTH) const
Like LIBRARY_MANAGER::GetRow but filtered to the LIBRARY_TABLE_TYPE of this adapter.
 
std::optional< wxString > GetFullURI(LIBRARY_TABLE_TYPE aType, const wxString &aNickname, bool aSubstituted=false) const
Return the full location specifying URI for the LIB, either in original UI form or in environment var...
 
LIBRARY_TABLE_SCOPE Scope() const
 
const wxString & Type() const
 
const wxString & Nickname() const
 
LIBRARY_RESULT< void > Save()
 
A logical library item identifier and consists of various portions much like a URI.
 
int SetLibNickname(const UTF8 &aLibNickname)
Override the logical library name portion of the LIB_ID to aLibNickname.
 
Define a library symbol object.
 
const LIB_ID & GetLibId() const override
 
bool IsPower() const override
 
wxString GetName() const override
 
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
 
static void ConvertToSpiceMarkup(wxString *aNetName)
Remove formatting wrappers and replace illegal spice net name characters with underscores.
 
Tree view item data for the net navigator.
 
static bool ParseBusGroup(const wxString &aGroup, wxString *name, std::vector< wxString > *aMemberList)
Parse a bus group label into the name and a list of components.
 
static bool ParseBusVector(const wxString &aBus, wxString *aName, std::vector< wxString > *aMemberList)
Parse a bus vector (e.g.
 
A holder to handle information on schematic or board items.
 
void PushItem(const ITEM_PICKER &aItem)
Push aItem to the top of the list.
 
void SetDescription(const wxString &aDescription)
 
void ReversePickersListOrder()
Reverse the order of pickers stored in this list.
 
static SYMBOL_LIBRARY_ADAPTER * SymbolLibAdapter(PROJECT *aProject)
Accessor for project symbol library manager adapter.
 
virtual bool HasMessage() const
Returns true if any messages were reported.
 
static bool RescueProject(wxWindow *aParent, RESCUER &aRescuer, bool aRunningOnDemand)
 
size_t GetCandidateCount()
Return the number of rescue candidates found.
 
These are loaded from Eeschema settings but then overwritten by the project settings.
 
std::shared_ptr< REFDES_TRACKER > m_refDesTracker
A list of previously used schematic reference designators.
 
Holds all the data relating to one schematic.
 
wxString GetFileName() const
Helper to retrieve the filename from the root sheet screen.
 
SCH_SHEET_LIST Hierarchy() const
Return the full schematic flattened hierarchical sheet list.
 
SCH_SHEET_PATH & CurrentSheet() const
 
static TOOL_ACTION showPcbNew
 
static TOOL_ACTION assignFootprints
 
static TOOL_ACTION lineModeNext
 
static TOOL_ACTION toggleOPCurrents
 
static TOOL_ACTION saveToLinkedDesignBlock
 
static TOOL_ACTION clearHighlight
 
static TOOL_ACTION removeVariant
 
static TOOL_ACTION editSymbolFields
 
static TOOL_ACTION importFPAssignments
 
static TOOL_ACTION toggleAnnotateAuto
 
static TOOL_ACTION editLibSymbolWithLibEdit
 
static TOOL_ACTION toggleERCWarnings
 
static TOOL_ACTION schematicSetup
 
static TOOL_ACTION toggleDirectiveLabels
 
static TOOL_ACTION highlightNetTool
 
static TOOL_ACTION findNetInInspector
 
static TOOL_ACTION toggleHiddenFields
 
static TOOL_ACTION saveCurrSheetCopyAs
 
static TOOL_ACTION repairSchematic
 
static TOOL_ACTION remapSymbols
 
static TOOL_ACTION lineMode45
 
static TOOL_ACTION editSymbolLibraryLinks
 
static TOOL_ACTION simTune
 
static TOOL_ACTION generateBOM
 
static TOOL_ACTION showHierarchy
 
static TOOL_ACTION showNetNavigator
 
static TOOL_ACTION markSimExclusions
 
static TOOL_ACTION placeImage
 
static TOOL_ACTION editWithLibEdit
 
static TOOL_ACTION toggleERCErrors
 
static TOOL_ACTION incrementAnnotations
 
static TOOL_ACTION saveSelectionToDesignBlock
 
static TOOL_ACTION rescueSymbols
 
static TOOL_ACTION angleSnapModeChanged
 
static TOOL_ACTION placeLinkedDesignBlock
 
static TOOL_ACTION generateBOMLegacy
 
static TOOL_ACTION placeDesignBlock
 
static TOOL_ACTION toggleOPVoltages
 
static TOOL_ACTION simProbe
 
static TOOL_ACTION lineMode90
 
static TOOL_ACTION lineModeFree
 
static TOOL_ACTION changeSheet
 
static TOOL_ACTION highlightNet
 
static TOOL_ACTION assignNetclass
 
static TOOL_ACTION annotate
 
static TOOL_ACTION showDesignBlockPanel
 
static TOOL_ACTION togglePinAltIcons
 
static TOOL_ACTION toggleERCExclusions
 
static TOOL_ACTION updateNetHighlighting
 
static TOOL_ACTION exportNetlist
 
static TOOL_ACTION drawSheetOnClipboard
 
static TOOL_ACTION exportSymbolsToLibrary
 
static TOOL_ACTION toggleHiddenPins
 
static TOOL_ACTION selectOnPCB
 
static TOOL_ACTION addVariant
 
Base class for a bus or wire entry.
 
void Collect(SCH_SCREEN *aScreen, const std::vector< KICAD_T > &aScanTypes, const VECTOR2I &aPos, int aUnit=0, int aBodyStyle=0)
Scan a EDA_ITEM using this class's Inspector method which does the collection.
 
virtual void Push(const wxString &aMessage=wxT("A commit"), int aCommitFlags=0) override
Execute the changes.
 
virtual void Revert() override
Revert the commit by restoring the modified items state.
 
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
 
wxString Name(bool aIgnoreSheet=false) const
 
Handle actions specific to the schematic editor.
 
int PageSetup(const TOOL_EVENT &aEvent)
 
bool RescueLegacyProject(bool aRunningOnDemand)
 
int ToggleDirectiveLabels(const TOOL_EVENT &aEvent)
 
int SaveAs(const TOOL_EVENT &aEvent)
 
int MarkSimExclusions(const TOOL_EVENT &aEvent)
 
int Annotate(const TOOL_EVENT &aEvent)
 
int ShowSchematicSetup(const TOOL_EVENT &aEvent)
 
int HighlightNet(const TOOL_EVENT &aEvent)
Remove any net highlighting.
 
int ClearHighlight(const TOOL_EVENT &aEvent)
Update net highlighting after an edit.
 
int FindNetInInspector(const TOOL_EVENT &aEvent)
 
int EditSymbolFields(const TOOL_EVENT &aEvent)
 
bool m_duplicateIsHoverSelection
 
int GenerateBOMLegacy(const TOOL_EVENT &aEvent)
 
int HighlightNetCursor(const TOOL_EVENT &aEvent)
 
int CopyAsText(const TOOL_EVENT &aEvent)
 
int AddVariant(const TOOL_EVENT &aEvent)
 
int ImportFPAssignments(const TOOL_EVENT &aEvent)
 
int ChangeLineMode(const TOOL_EVENT &aEvent)
 
void doCrossProbeSchToPcb(const TOOL_EVENT &aEvent, bool aForce)
 
int ExportSymbolsToLibrary(const TOOL_EVENT &aEvent)
 
int SaveCurrSheetCopyAs(const TOOL_EVENT &aEvent)
Saves the currently-open schematic sheet to an other name.
 
bool rescueProject(RESCUER &aRescuer, bool aRunningOnDemand)
 
int CrossProbeToPcb(const TOOL_EVENT &aEvent)
Equivalent to the above, but initiated by the user.
 
int PlaceLinkedDesignBlock(const TOOL_EVENT &aEvent)
 
int Quit(const TOOL_EVENT &aEvent)
 
int RemapSymbols(const TOOL_EVENT &aEvent)
 
int DrawSheetOnClipboard(const TOOL_EVENT &aEvent)
 
SCH_SHEET_PATH updatePastedSheet(SCH_SHEET *aSheet, const SCH_SHEET_PATH &aPastePath, const KIID_PATH &aClipPath, bool aForceKeepAnnotations, SCH_SHEET_LIST *aPastedSheets, std::map< SCH_SHEET_PATH, SCH_REFERENCE_LIST > &aPastedSymbols)
 
int TogglePinAltIcons(const TOOL_EVENT &aEvent)
 
int RescueSymbols(const TOOL_EVENT &aEvent)
Perform rescue operations to recover old projects from before certain changes were made.
 
int AssignNetclass(const TOOL_EVENT &aEvent)
 
std::string m_duplicateClipboard
 
int ExportNetlist(const TOOL_EVENT &aEvent)
 
int Open(const TOOL_EVENT &aEvent)
 
int Paste(const TOOL_EVENT &aEvent)
 
int ToggleOPVoltages(const TOOL_EVENT &aEvent)
 
int Copy(const TOOL_EVENT &aEvent)
 
int SaveToLinkedDesignBlock(const TOOL_EVENT &aEvent)
 
int ToggleERCWarnings(const TOOL_EVENT &aEvent)
 
int NextLineMode(const TOOL_EVENT &aEvent)
 
int Redo(const TOOL_EVENT &aEvent)
Clipboard support.
 
int UpdatePCB(const TOOL_EVENT &aEvent)
 
int RemoveVariant(const TOOL_EVENT &aEvent)
 
int UpdateFromPCB(const TOOL_EVENT &aEvent)
 
int ToggleAnnotateAuto(const TOOL_EVENT &aEvent)
 
int ToggleHiddenPins(const TOOL_EVENT &aEvent)
 
int Duplicate(const TOOL_EVENT &aEvent)
 
int IncrementAnnotations(const TOOL_EVENT &aEvent)
 
bool searchSupplementaryClipboard(const wxString &aSheetFilename, SCH_SCREEN **aScreen)
 
int GridFeedback(const TOOL_EVENT &aEvent)
 
int ShowSearch(const TOOL_EVENT &aEvent)
 
int EditWithSymbolEditor(const TOOL_EVENT &aEvent)
 
int SimTune(const TOOL_EVENT &aEvent)
Highlight net under the cursor.
 
int EditSymbolLibraryLinks(const TOOL_EVENT &aEvent)
 
int New(const TOOL_EVENT &aEvent)
 
std::map< wxString, SCH_SCREEN * > m_supplementaryClipboard
 
int ExplicitCrossProbeToPcb(const TOOL_EVENT &aEvent)
 
int ToggleOPCurrents(const TOOL_EVENT &aEvent)
 
int ShowPcbNew(const TOOL_EVENT &aEvent)
 
int UpdateNetHighlighting(const TOOL_EVENT &aEvent)
Launch a tool to highlight nets.
 
int ToggleERCErrors(const TOOL_EVENT &aEvent)
 
int TogglePythonConsole(const TOOL_EVENT &aEvent)
 
int ShowHierarchy(const TOOL_EVENT &aEvent)
 
int OnAngleSnapModeChanged(const TOOL_EVENT &aEvent)
 
void setTransitions() override
This method is meant to be overridden in order to specify handlers for events.
 
bool m_highlightBusMembers
 
int ShowNetNavigator(const TOOL_EVENT &aEvent)
 
int SimProbe(const TOOL_EVENT &aEvent)
 
void updatePastedSymbol(SCH_SYMBOL *aSymbol, const SCH_SHEET_PATH &aPastePath, const KIID_PATH &aClipPath, bool aForceKeepAnnotations)
 
int ShowCvpcb(const TOOL_EVENT &aEvent)
 
int ToggleLibraryTree(const TOOL_EVENT &aEvent)
 
int RepairSchematic(const TOOL_EVENT &aEvent)
 
std::set< SCH_SYMBOL * > m_pastedSymbols
 
void prunePastedSymbolInstances()
Remove all pasted symbol instances that do not belong to the current project.
 
int Cut(const TOOL_EVENT &aEvent)
 
int ToggleProperties(const TOOL_EVENT &aEvent)
 
std::map< KIID_PATH, SCH_SYMBOL_INSTANCE > m_clipboardSymbolInstances
 
int Save(const TOOL_EVENT &aEvent)
 
bool RescueSymbolLibTableProject(bool aRunningOnDemand)
Notifies pcbnew about the selected item.
 
bool doCopy(bool aUseDuplicateClipboard=false)
< copy selection to clipboard or to m_duplicateClipboard
 
int Undo(const TOOL_EVENT &aEvent)
 
int ToggleERCExclusions(const TOOL_EVENT &aEvent)
 
int Plot(const TOOL_EVENT &aEvent)
 
int Print(const TOOL_EVENT &aEvent)
 
int Revert(const TOOL_EVENT &aEvent)
 
int GenerateBOM(const TOOL_EVENT &aEvent)
 
int ReloadPlugins(const TOOL_EVENT &aEvent)
 
void setPastedSymbolInstances(const SCH_SCREEN *aScreen)
 
int ToggleHiddenFields(const TOOL_EVENT &aEvent)
 
Schematic editor (Eeschema) main window.
 
void ToggleProperties() override
 
SCH_DESIGN_BLOCK_PANE * GetDesignBlockPane() const
 
void ToggleNetNavigator()
 
void ToggleLibraryTree() override
 
void SetHighlightedConnection(const wxString &aConnection, const NET_NAVIGATOR_ITEM_DATA *aSelection=nullptr)
 
void SendCrossProbeClearHighlight()
Tell Pcbnew to clear the existing highlighted net, if one exists.
 
SCH_SHEET_PATH & GetCurrentSheet() const
 
void RecalculateConnections(SCH_COMMIT *aCommit, SCH_CLEANUP_FLAGS aCleanupFlags, PROGRESS_REPORTER *aProgressReporter=nullptr)
Generate the connection data for the entire schematic hierarchy.
 
const SCH_ITEM * GetSelectedNetNavigatorItem() const
 
SCHEMATIC & Schematic() const
 
void ToggleSearch()
Toggle the show/hide state of Search pane.
 
void ToggleSchematicHierarchy()
Toggle the show/hide state of the left side schematic navigation panel.
 
const wxString & GetHighlightedConnection() const
 
void UpdateNetHighlightStatus()
 
void SelectNetNavigatorItem(const NET_NAVIGATOR_ITEM_DATA *aSelection=nullptr)
 
void SetCrossProbeConnection(const SCH_CONNECTION *aConnection)
Send a connection (net or bus) to Pcbnew for highlighting.
 
void SetText(const wxString &aText) override
 
A set of SCH_ITEMs (i.e., without duplicates).
 
A SCH_IO derivation for loading schematic files using the new s-expression file format.
 
void LoadContent(LINE_READER &aReader, SCH_SHEET *aSheet, int aVersion=SEXPR_SCHEMATIC_FILE_VERSION)
 
void Format(SCH_SHEET *aSheet)
 
static SCH_FILE_T EnumFromStr(const wxString &aFileType)
Return the #SCH_FILE_T from the corresponding plugin type name: "kicad", "legacy",...
 
Base class for any item which can be embedded within the SCHEMATIC container class,...
 
virtual bool IsConnectable() const
 
const SYMBOL * GetParentSymbol() const
 
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
 
virtual void SetLastResolvedState(const SCH_ITEM *aItem)
 
void SetConnectivityDirty(bool aDirty=true)
 
bool IsConnectivityDirty() const
 
virtual void SetUnit(int aUnit)
 
SCH_CONNECTION * Connection(const SCH_SHEET_PATH *aSheet=nullptr) const
Retrieve the connection associated with this object in the given sheet.
 
virtual std::vector< VECTOR2I > GetConnectionPoints() const
Add all the connection points for this item to aPoints.
 
Segment description base class to describe items which have 2 end points (track, wire,...
 
SCH_PIN * GetLibPin() const
 
const wxString & GetNumber() const
 
Container to create a flattened list of symbols because in a complex hierarchy, a symbol can be used ...
 
void SortByReferenceOnly()
Sort the list of references by reference.
 
void SplitReferences()
Attempt to split all reference designators into a name (U) and number (1).
 
void AddItem(const SCH_REFERENCE &aItem)
 
A helper to define a symbol's reference designator in a schematic.
 
void SetRef(const wxString &aReference)
 
void Split()
Attempt to split the reference designator into a name (U) and number (1).
 
bool IsSplitNeeded()
Determine if this reference needs to be split or if it likely already has been.
 
void SetSheetNumber(int aSheetNumber)
 
wxString GetRefNumber() const
 
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
 
void UpdateSymbolLinks(REPORTER *aReporter=nullptr)
Initialize the LIB_SYMBOL reference for each SCH_SYMBOL found in the full schematic.
 
void PruneOrphanedSheetInstances(const wxString &aProjectName, const SCH_SHEET_LIST &aValidSheetPaths)
 
void PruneOrphanedSymbolInstances(const wxString &aProjectName, const SCH_SHEET_LIST &aValidSheetPaths)
 
bool HasNoFullyDefinedLibIds()
Test all of the schematic symbols to see if all LIB_ID objects library nickname is not set.
 
void Append(SCH_ITEM *aItem, bool aUpdateLibSymbol=true)
 
void Clear(bool aFree=true)
Delete all draw items and clears the project settings.
 
void UpdateSymbolLinks(REPORTER *aReporter=nullptr)
Initialize the LIB_SYMBOL reference for each SCH_SYMBOL found in this schematic from the project #SYM...
 
std::set< wxString > GetSheetNames() const
 
const std::map< wxString, LIB_SYMBOL * > & GetLibSymbols() const
Fetch a list of unique LIB_SYMBOL object pointers required to properly render each SCH_SYMBOL in this...
 
EE_RTREE & Items()
Get the full RTree, usually for iterating.
 
const wxString & GetFileName() const
 
void MigrateSimModels()
Migrate any symbols having V6 simulation models to their V7 equivalents.
 
VECTOR2I GetCenter() const
 
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
 
void FillItemMap(std::map< KIID, EDA_ITEM * > &aMap)
Fill an item cache for temporary use when many items need to be fetched.
 
void SortByPageNumbers(bool aUpdateVirtualPageNums=true)
Sort the list of sheets by page number.
 
SCH_SHEET_LIST FindAllSheetsForScreen(const SCH_SCREEN *aScreen) const
Return a SCH_SHEET_LIST with a copy of all the SCH_SHEET_PATH using a particular screen.
 
void GetSymbols(SCH_REFERENCE_LIST &aReferences, bool aIncludePowerSymbols=true, bool aForceIncludeOrphanSymbols=false) const
Add a SCH_REFERENCE object to aReferences for each symbol in the list of sheets.
 
bool PageNumberExists(const wxString &aPageNumber) const
 
bool ContainsSheet(const SCH_SHEET *aSheet) const
 
bool HasPath(const KIID_PATH &aPath) const
 
bool TestForRecursion(const SCH_SHEET_LIST &aSrcSheetHierarchy, const wxString &aDestFileName)
Test every SCH_SHEET_PATH in this SCH_SHEET_LIST to verify if adding the sheets stored in aSrcSheetHi...
 
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
 
void GetSymbols(SCH_REFERENCE_LIST &aReferences, bool aIncludePowerSymbols=true, bool aForceIncludeOrphanSymbols=false) const
Adds SCH_REFERENCE object to aReferences for each symbol in the sheet.
 
KIID_PATH Path() const
Get the sheet path as an KIID_PATH.
 
SCH_SCREEN * LastScreen()
 
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
 
void push_back(SCH_SHEET *aSheet)
Forwarded method from std::vector.
 
Define a sheet pin (label) used in sheets to create hierarchical schematics.
 
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
 
wxString GetFileName() const
Return the filename corresponding to this sheet.
 
void RemoveInstance(const KIID_PATH &aInstancePath)
 
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this sheet.
 
void AddInstance(const SCH_SHEET_INSTANCE &aInstance)
 
SCH_SCREEN * GetScreen() const
 
void SetScreen(SCH_SCREEN *aScreen)
Set the SCH_SCREEN associated with this sheet to aScreen.
 
std::vector< SCH_SHEET_PIN * > & GetPins()
 
const std::vector< SCH_SHEET_INSTANCE > & GetInstances() const
 
EMBEDDED_FILES * GetEmbeddedFiles() override
SCH_SYMBOLs don't currently support embedded files, but their LIB_SYMBOL counterparts do.
 
const std::vector< SCH_SYMBOL_INSTANCE > & GetInstances() const
 
wxString GetSchSymbolLibraryName() const
 
void ClearAnnotation(const SCH_SHEET_PATH *aSheetPath, bool aResetPrefix)
Clear exiting symbol annotation.
 
void AddHierarchicalReference(const KIID_PATH &aPath, const wxString &aRef, int aUnit)
Add a full hierarchical reference to this symbol.
 
bool IsMissingLibSymbol() const
Check to see if the library symbol is set to the dummy library symbol.
 
std::vector< SCH_PIN * > GetPins(const SCH_SHEET_PATH *aSheet) const
Retrieve a list of the SCH_PINs for the given sheet path.
 
const LIB_ID & GetLibId() const override
 
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
 
void SetLibSymbol(LIB_SYMBOL *aLibSymbol)
Set this schematic symbol library symbol reference to aLibSymbol.
 
const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const override
 
bool IsPower() const override
 
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this symbol.
 
const VECTOR2I & CVertex(int aIndex, int aOutline, int aHole) const
Return the index-th vertex in a given hole outline within a given outline.
 
The SIMULATOR_FRAME holds the main user-interface for running simulations.
 
void AddCurrentTrace(const wxString &aDeviceName)
Add a current trace for a given device to the current plot.
 
void AddVoltageTrace(const wxString &aNetName)
Add a voltage trace for a given net to the current plot.
 
SIM_MODEL & CreateModel(SIM_MODEL::TYPE aType, const std::vector< SCH_PIN * > &aPins, REPORTER &aReporter)
 
void SetFilesStack(std::vector< EMBEDDED_FILES * > aFilesStack)
 
int FindModelPinIndex(const std::string &aSymbolPinNumber)
 
const SPICE_GENERATOR & SpiceGenerator() const
 
virtual std::vector< std::string > CurrentNames(const SPICE_ITEM &aItem) const
 
Is a LINE_READER that reads from a multiline 8 bit wide std::string.
 
The symbol library editor main window.
 
bool IsLibraryTreeShown() const override
 
void LoadSymbol(const wxString &aLibrary, const wxString &aSymbol, int Unit)
 
void LoadSymbolFromSchematic(SCH_SYMBOL *aSymbol)
Load a symbol from the schematic to edit in place.
 
void ToggleLibraryTree() override
 
An interface to the global shared library manager that is schematic-specific and linked to one projec...
 
Class to handle modifications to the symbol libraries.
 
Symbol library viewer main window.
 
A wrapper for reporting to a wxString object.
 
const wxString & GetMessages() const
 
bool SaveClipboard(const std::string &aTextUTF8)
Store information to the system clipboard.
 
std::string GetClipboardUTF8()
Return the information currently stored in the system clipboard.
 
std::unique_ptr< wxImage > GetImageFromClipboard()
Get image data from the clipboard, if there is any.
 
wxString EnsureFileExtension(const wxString &aFilename, const wxString &aExtension)
It's annoying to throw up nag dialogs when the extension isn't right.
 
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Display a yes/no dialog with aMessage and returns the user response.
 
void DisplayInfoMessage(wxWindow *aParent, const wxString &aMessage, const wxString &aExtraInfo)
Display an informational message box with aMessage.
 
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
 
void DisplayError(wxWindow *aParent, const wxString &aText)
Display an error or warning message box with aMessage.
 
This file is part of the common library.
 
int InvokeDialogCreateBOM(SCH_EDIT_FRAME *aCaller)
Create and show DIALOG_BOM and return whatever DIALOG_BOM::ShowModal() returns.
 
bool InvokeDialogEditSymbolsLibId(SCH_EDIT_FRAME *aCaller)
Run a dialog to modify the LIB_ID of symbols for instance when a symbol has moved from a symbol libra...
 
int InvokeDialogNetList(SCH_EDIT_FRAME *aCaller)
 
std::vector< EDA_ITEM * > EDA_ITEMS
Define list of drawing items for screens.
 
#define IS_PASTED
Modifier on IS_NEW which indicates it came from clipboard.
 
#define IS_NEW
New item, just created.
 
#define ENDPOINT
ends. (Used to support dragging.)
 
#define IS_MOVING
Item being moved.
 
#define STARTPOINT
When a line is selected, these flags indicate which.
 
@ RECTANGLE
Use RECTANGLE instead of RECT to avoid collision in a Windows header.
 
@ FRAME_SCH_SYMBOL_EDITOR
 
static const std::string KiCadSchematicFileExtension
 
static wxString KiCadSchematicFileWildcard()
 
static const wxChar traceSchPaste[]
Flag to enable schematic paste debugging output.
 
#define NET_PLUGIN_CHANGE
Create and shows DIALOG_EXPORT_NETLIST and returns whatever DIALOG_EXPORT_NETLIST::ShowModal() return...
 
std::unique_ptr< T > IO_RELEASER
Helper to hold and release an IO_BASE object when exceptions are thrown.
 
#define THROW_IO_ERROR(msg)
macro which captures the "call site" values of FILE_, __FUNCTION & LINE
 
#define KICTL_REVERT
reverting to a previously-saved (KiCad) file.
 
@ REPAINT
Item needs to be redrawn.
 
@ GEOMETRY
Position or shape has changed.
 
#define MAX_PAGE_SIZE_EESCHEMA_MILS
 
PGM_BASE & Pgm()
The global program "get" accessor.
 
static bool highlightNet(TOOL_MANAGER *aToolMgr, const VECTOR2D &aPosition)
 
#define HITTEST_THRESHOLD_PIXELS
 
Class to handle a set of SCH_ITEMs.
 
ANNOTATE_ORDER_T
Schematic annotation order options.
 
ANNOTATE_ALGO_T
Schematic annotation type options.
 
std::vector< FAB_LAYER_COLOR > dummy
 
wxString UnescapeString(const wxString &aSource)
 
wxString From_UTF8(const char *cstring)
 
bool show_directive_labels
 
std::vector< GRID > grids
 
Common grid settings, available to every frame.
 
A simple container for sheet instance information.
 
A simple container for schematic symbol instance information.
 
static constexpr auto NOT_CONNECTED
 
FIELD_T
The set of all field indices assuming an array like sequence that a SCH_COMPONENT or LIB_PART can hol...
 
@ REFERENCE
Field Reference of part, i.e. "IC21".
 
@ VALUE
Field Value of part, i.e. "3.3K".
 
wxString result
Test unit parsing edge cases and error handling.
 
VECTOR2< int32_t > VECTOR2I
 
VECTOR2< double > VECTOR2D
 
Definition of file extensions used in Kicad.
 
#define FN_NORMALIZE_FLAGS
Default flags to pass to wxFileName::Normalize().