66#include <dialogs/dialog_text_properties.h> 
   69#include <dialogs/dialog_table_properties.h> 
   74#include <wx/filedlg.h> 
  109    auto belowRootSheetCondition =
 
  112                return m_frame->GetCurrentSheet().Last() != &
m_frame->Schematic().Root();
 
  115    auto inDrawingRuleArea =
 
 
  138    bool placeOneOnly = symbol != 
nullptr;
 
  141    std::vector<PICKED_SYMBOL>* historyList = 
nullptr;
 
  142    bool                        ignorePrimePosition = 
false;
 
  146    bool                        keepSymbol = 
false;
 
  147    bool                        placeAllUnits = 
false;
 
  175        filter.FilterPowerSymbols( 
true );
 
  179        wxFAIL_MSG( 
"PlaceSymbol(): unexpected request" );
 
  193                m_view->AddToPreview( aSymbol, 
false );   
 
  214                existingRefs.
Clear();
 
  242                        for( 
size_t i = 0; i < refs.
GetCount(); i++ )
 
  243                            existingRefs.
AddItem( refs[i] );
 
  247                m_frame->GetCurrentSheet().UpdateAllScreenReferences();
 
  275        ignorePrimePosition = 
true;
 
  283        grid.SetUseGrid( 
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
 
  289        bool isSyntheticClick = symbol && evt->IsActivate() && evt->HasPosition() && evt->Matches( aEvent );
 
  291        if( evt->IsCancelInteractive() || ( symbol && evt->IsAction( &
ACTIONS::undo ) ) )
 
  293            m_frame->GetInfoBar()->Dismiss();
 
  311        else if( evt->IsActivate() && !isSyntheticClick )
 
  313            if( symbol && evt->IsMoveTool() )
 
  316                evt->SetPassEvent( 
false );
 
  322                m_frame->ShowInfoBarMsg( 
_( 
"Press <ESC> to cancel symbol creation." ) );
 
  323                evt->SetPassEvent( 
false );
 
  327            if( evt->IsMoveTool() )
 
  349                std::set<UTF8>             unique_libid;
 
  350                std::vector<PICKED_SYMBOL> alreadyPlaced;
 
  367                            alreadyPlaced.push_back( pickedSymbol );
 
  373                bool footprintPreviews = 
m_frame->eeconfig()->m_Appearance.footprint_preview;
 
  388                if( evt->IsPrime() && !ignorePrimePosition )
 
  408                    if( keywords.Contains( wxT( 
"global power" ) ) )
 
  410                        keywords.Replace( wxT( 
"global power" ), wxT( 
"local power" ) );
 
  416                    if( desc.Contains( wxT( 
"global label" ) ) )
 
  418                        desc.Replace( wxT( 
"global label" ), wxT( 
"local label" ) );
 
  430                symbol = 
new SCH_SYMBOL( *libSymbol, &
m_frame->GetCurrentSheet(), sel, cursorPos,
 
  437                existingRefs.
AddItem( placedSymbolReference );
 
  440                if( 
m_frame->eeconfig()->m_AutoplaceFields.enable )
 
  452                m_frame->AddToScreen( symbol, screen );
 
  454                if( 
m_frame->eeconfig()->m_AutoplaceFields.enable )
 
  457                m_frame->SaveCopyForRepeatItem( symbol );
 
  460                commit.
Added( symbol, screen );
 
  466                commit.
Push( 
_( 
"Place Symbol" ) );
 
  476                if( keepSymbol || placeAllUnits )
 
  483                        while( currentReference.
GetUnit() <= symbol->GetUnitCount()
 
  484                               && schematic.
Contains( currentReference ) )
 
  489                        if( currentReference.
GetUnit() > symbol->GetUnitCount() )
 
  496                    if( keepSymbol || currentReference.
GetUnit() > 1 )
 
  502                        addSymbol( nextSymbol );
 
  505                        if( currentReference.
GetUnit() == 1 )
 
  510                        existingRefs.
AddItem( placedSymbolReference );
 
  535                    m_frame->SelectUnit( symbol, unit );
 
  544                if( symbol && symbol->GetBodyStyle() != bodyStyle )
 
  546                    m_frame->SelectBodyStyle( symbol, bodyStyle );
 
  569            symbol->SetPosition( cursorPos );
 
  571            m_view->AddToPreview( symbol, 
false );   
 
  572            m_frame->SetMsgPanel( symbol );
 
 
  625    int requestedUnit = params.
m_Unit;
 
  630        static const std::vector<KICAD_T> symbolTypes = { 
SCH_SYMBOL_T };
 
  633        if( selection.
Size() != 1 )
 
  635            m_frame->ShowInfoBarMsg( 
_( 
"Select a single symbol to place the next unit." ) );
 
  646    if( !symbol->IsMultiUnit() )
 
  648        m_frame->ShowInfoBarMsg( 
_( 
"This symbol has only one unit." ) );
 
  654    if( missingUnits.empty() )
 
  656        m_frame->ShowInfoBarMsg( 
_( 
"All units of this symbol are already placed." ) );
 
  662    if( requestedUnit > 0 )
 
  664        if( missingUnits.count( requestedUnit ) == 0 )
 
  666            m_frame->ShowInfoBarMsg( 
_( 
"Requested unit already placed." ) );
 
  670        nextMissing = requestedUnit;
 
  675        nextMissing = *std::min_element( missingUnits.begin(), missingUnits.end() );
 
  678    std::unique_ptr<SCH_SYMBOL> newSymbol = std::make_unique<SCH_SYMBOL>( *symbol );
 
  681    newSymbol->SetUnitSelection( &sheetPath, nextMissing );
 
  682    newSymbol->SetUnit( nextMissing );
 
  683    newSymbol->SetRefProp( symbol->GetRef( &sheetPath, 
false ) );
 
 
  704    if( !cfg || !common_settings )
 
  712    std::unique_ptr<DESIGN_BLOCK> designBlock;
 
  713    wxString                      sheetFileName = wxEmptyString;
 
  716    if( placingDesignBlock )
 
  728            sheetFileName = designBlock->GetSchematicFile();
 
  733        wxString* importSourceFile = aEvent.
Parameter<wxString*>();
 
  735        if( importSourceFile != 
nullptr )
 
  736            sheetFileName = *importSourceFile;
 
  746    auto placeSheetContents =
 
  763                if( !
m_frame->LoadSheetFromFile( sheetPath.
Last(), &sheetPath, sheetFileName, 
true,
 
  764                                                 placingDesignBlock ) )
 
  769                m_frame->SetSheetNumberAndCount();
 
  783                        group->SetName( designBlock->GetLibId().GetLibItemName() );
 
  784                        group->SetDesignBlockLibId( designBlock->GetLibId() );
 
  788                        group->SetName( wxFileName( sheetFileName ).
GetName() );
 
  791                    if( repeatPlacement )
 
  792                        group->SetName( 
group->GetName() + wxString::Format( 
"%d", suffix++ ) );
 
  801                            static_cast<SCH_SYMBOL*
>( item )->ClearAnnotation( &sheetPath, 
false );
 
  807                            group->AddItem( item );
 
  809                        commit.
Added( item, screen );
 
  810                        newItems.emplace_back( item );
 
  841                if( !keepAnnotations )
 
  870                    commit.
Push( placingDesignBlock ? 
_( 
"Add Design Block" )
 
  871                                                    : 
_( 
"Import Schematic Sheet Content" ) );
 
  878                m_frame->UpdateHierarchyNavigator();
 
  885    if( sheetFileName.IsEmpty() )
 
  890        if (!placingDesignBlock)
 
  892            if( sheetFileName.IsEmpty() )
 
  894                path = wxPathOnly( 
m_frame->Prj().GetProjectFullName() );
 
  895                file = wxEmptyString;
 
  899                path = wxPathOnly( sheetFileName );
 
  900                file = wxFileName( sheetFileName ).GetFullName();
 
  905            wxFileDialog dlg( 
m_frame, 
_( 
"Choose Schematic" ), 
path, file,
 
  909            dlg.SetCustomizeHook( dlgHook );
 
  911            if( dlg.ShowModal() == wxID_CANCEL )
 
  914            sheetFileName = dlg.GetPath();
 
  916            m_frame->GetDesignBlockPane()->UpdateCheckboxes();
 
  919        if( sheetFileName.IsEmpty() )
 
  957        grid.SetUseGrid( 
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
 
  963        bool isSyntheticClick = designBlock && evt->IsActivate() && evt->HasPosition() && evt->Matches( aEvent );
 
  965        if( evt->IsCancelInteractive() || ( designBlock && evt->IsAction( &
ACTIONS::undo ) ) )
 
  967            m_frame->GetInfoBar()->Dismiss();
 
  970        else if( evt->IsActivate() && !isSyntheticClick )
 
  972            m_frame->GetInfoBar()->Dismiss();
 
  979            if( placingDesignBlock )
 
 1007            evt->SetPassEvent();
 
 
 1021    bool             immediateMode = 
image != 
nullptr;
 
 1022    bool             ignorePrimePosition = 
false;
 
 1060                m_view->RecacheAllItems();
 
 1085        ignorePrimePosition = 
true;
 
 1093        grid.SetUseGrid( 
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
 
 1099        bool isSyntheticClick = 
image && evt->IsActivate() && evt->HasPosition() && evt->Matches( aEvent );
 
 1103            m_frame->GetInfoBar()->Dismiss();
 
 1121        else if( evt->IsActivate() && !isSyntheticClick )
 
 1123            if( 
image && evt->IsMoveTool() )
 
 1126                evt->SetPassEvent( 
false );
 
 1132                m_frame->ShowInfoBarMsg( 
_( 
"Press <ESC> to cancel image creation." ) );
 
 1133                evt->SetPassEvent( 
false );
 
 1137            if( evt->IsMoveTool() )
 
 1157                                  _( 
"Image Files" ) + wxS( 
" " ) + wxImage::GetImageExtWildcard(),
 
 1164                            cancelled = dlg.ShowModal() != wxID_OK;
 
 1173                if( evt->IsPrime() && !ignorePrimePosition )
 
 1175                    cursorPos = 
grid.Align( evt->Position() );
 
 1184                wxString fullFilename = dlg.GetPath();
 
 1187                if( wxFileExists( fullFilename ) )
 
 1190                if( !
image || !
image->GetReferenceImage().ReadImageFile( fullFilename ) )
 
 1192                    wxMessageBox( wxString::Format( 
_( 
"Could not load image from '%s'." ), fullFilename ) );
 
 1204                m_view->RecacheAllItems();              
 
 1215                commit.
Push( 
_( 
"Place Image" ) );
 
 1250            evt->SetPassEvent();
 
 1255            image->SetPosition( cursorPos );
 
 1258            m_view->RecacheAllItems();              
 
 1271            evt->SetPassEvent();
 
 
 1306    if( dlgResult != wxID_OK )
 
 1312        wxMessageBox( 
_( 
"No graphic items found in file." ) );
 
 1319    std::vector<SCH_ITEM*> newItems;      
 
 1320    std::vector<SCH_ITEM*> selectedItems; 
 
 1324    for( std::unique_ptr<EDA_ITEM>& ptr : list )
 
 1327        wxCHECK2_MSG( item, 
continue, wxString::Format( 
"Bad item type: ", ptr->Type() ) );
 
 1329        newItems.push_back( item );
 
 1330        selectedItems.push_back( item );
 
 1331        preview.
Add( item );
 
 1342        commit.
Push( 
_( 
"Import Graphic" ) );
 
 1351    EDA_ITEMS selItems( selectedItems.begin(), selectedItems.end() );
 
 1377    for( 
SCH_ITEM* item : selectedItems )
 
 1378        item->Move( 
delta );
 
 1380    currentOffset += 
delta;
 
 1382    m_view->Update( &preview );
 
 1390        grid.SetUseGrid( 
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
 
 1395        if( evt->IsCancelInteractive() || evt->IsActivate() )
 
 1404        else if( evt->IsMotion() )
 
 1406            delta = cursorPos - currentOffset;
 
 1408            for( 
SCH_ITEM* item : selectedItems )
 
 1409                item->Move( 
delta );
 
 1411            currentOffset += 
delta;
 
 1413            m_view->Update( &preview );
 
 1426            commit.
Push( 
_( 
"Import Graphic" ) );
 
 1431            evt->SetPassEvent();
 
 1436    m_view->Remove( &preview );
 
 
 1454    bool                  loggedInfoBarError = 
false;
 
 1455    wxString              description;
 
 1457    bool                  allowRepeat = 
false;  
 
 1483        description = 
_( 
"Add No Connect Flag" );
 
 1490        description = 
_( 
"Add Junction" );
 
 1496        description = 
_( 
"Add Wire to Bus Entry" );
 
 1501        wxASSERT_MSG( 
false, 
"Unknown item type in SCH_DRAWING_TOOLS::SingleClickPlace" );
 
 1539        grid.SetUseGrid( 
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
 
 1541        cursorPos = evt->IsPrime() ? evt->Position() : controls->
GetMousePosition();
 
 1542        cursorPos = 
grid.BestSnapAnchor( cursorPos, 
grid.GetItemGrid( previewItem ), 
nullptr );
 
 1545        if( evt->IsCancelInteractive() )
 
 1550        else if( evt->IsActivate() )
 
 1552            if( evt->IsMoveTool() )
 
 1566            if( !screen->
GetItem( cursorPos, 0, type ) )
 
 1572                        m_frame->ShowInfoBarError( 
_( 
"Junction location contains no joinable wires and/or pins." ) );
 
 1573                        loggedInfoBarError = 
true;
 
 1576                    else if( loggedInfoBarError )
 
 1578                        m_frame->GetInfoBar()->Dismiss();
 
 1587                    lwbTool->
AddJunction( &commit, screen, cursorPos );
 
 1589                    m_frame->Schematic().CleanUp( &commit );
 
 1591                    commit.
Push( description );
 
 1599                    m_frame->AddToScreen( newItem, screen );
 
 1602                        m_frame->SaveCopyForRepeatItem( newItem );
 
 1605                    commit.
Added( newItem, screen );
 
 1607                    m_frame->Schematic().CleanUp( &commit );
 
 1609                    commit.
Push( description );
 
 1628            m_frame->SetMsgPanel( previewItem );
 
 1665                    std::deque<SCH_ITEM*> strokeItems;
 
 1666                    strokeItems.push_back( previewItem );
 
 1681                    std::deque<SCH_JUNCTION*> junctions;
 
 1682                    junctions.push_back( 
static_cast<SCH_JUNCTION*
>( previewItem ) );
 
 1705                evt->SetPassEvent();
 
 1710            evt->SetPassEvent();
 
 
 1743    wxASSERT( aWire->
IsWire() );
 
 1749        SCH_ITEM* wireDriver = wireConnection->Driver();
 
 1751        if( wireDriver && wireDriver->
IsType( { SCH_LABEL_T, SCH_GLOBAL_LABEL_T } ) )
 
 1752            return wireConnection->LocalName();
 
 1755    return wxEmptyString;
 
 
 1760                                        std::list<std::unique_ptr<SCH_LABEL_BASE>>& aLabelList )
 
 1783        labelItem->
GetFields().back().SetItalic( 
true );
 
 1784        labelItem->
GetFields().back().SetVisible( 
true );
 
 1798        labelItem = globalLabel;
 
 1806        wxFAIL_MSG( 
"SCH_DRAWING_TOOLS::createNewLabel() unknown label type" );
 
 1826    if( !netName.IsEmpty() )
 
 1829        labelItem->
SetText( netName );
 
 1864    if( aLabelList.empty() )
 
 1865        aLabelList.push_back( std::unique_ptr<SCH_LABEL_BASE>( labelItem ) );
 
 
 1879    textItem = 
new SCH_TEXT( aPosition );
 
 
 1914    pin->SetText( std::to_string( aSheet->
GetPins().size() + 1 ) );
 
 1916    pin->SetPosition( aPosition );
 
 1917    pin->ClearSelected();
 
 
 1941    bool                  ignorePrimePosition = 
false;
 
 1944    wxString              description;
 
 1975                else if( isGlobalLabel )
 
 1977                else if( isNetLabel )
 
 1979                else if( isClassLabel )
 
 1981                else if( isHierLabel )
 
 1987    auto updatePreview =
 
 1991                m_view->AddToPreview( item, 
false );
 
 1994                                         m_view->AddToPreview( aChild, 
false );
 
 2009    auto prepItemForPlacement =
 
 2041                && ( isText || isGlobalLabel || isHierLabel || isClassLabel || isNetLabel ) )
 
 2044        ignorePrimePosition = 
true;
 
 2048    std::list<std::unique_ptr<SCH_LABEL_BASE>> itemsToPlace;
 
 2055        grid.SetUseGrid( 
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
 
 2058        cursorPos = 
grid.BestSnapAnchor( cursorPos, snapGrid, item );
 
 2062        bool isSyntheticClick = item && evt->IsActivate() && evt->HasPosition() && evt->
Matches( aEvent );
 
 2064        if( evt->IsCancelInteractive() || evt->IsAction( &
ACTIONS::undo ) )
 
 2066            m_frame->GetInfoBar()->Dismiss();
 
 2078        else if( evt->IsActivate() && !isSyntheticClick )
 
 2080            if( item && evt->IsMoveTool() )
 
 2083                evt->SetPassEvent( 
false );
 
 2089                m_frame->ShowInfoBarMsg( 
_( 
"Press <ESC> to cancel item creation." ) );
 
 2090                evt->SetPassEvent( 
false );
 
 2094            if( evt->IsPointEditor() )
 
 2098            else if( evt->IsMoveTool() )
 
 2122                    description = 
_( 
"Add Text" );
 
 2124                else if( isHierLabel )
 
 2141                        itemsToPlace.push_back( std::unique_ptr<SCH_LABEL_BASE>( label ) );
 
 2148                    description = 
_( 
"Add Hierarchical Label" );
 
 2150                else if( isNetLabel )
 
 2153                    description = 
_( 
"Add Label" );
 
 2155                else if( isGlobalLabel )
 
 2158                    description = 
_( 
"Add Label" );
 
 2160                else if( isClassLabel )
 
 2163                    description = 
_( 
"Add Label" );
 
 2165                else if( isSheetPin )
 
 2170                    if( !sheet && 
m_selectionTool->SelectPoint( cursorPos, { SCH_SHEET_T }, &i ) )
 
 2178                                             + wxPoint( 20, 20 ) );
 
 2199                                m_statusPopup->SetText( 
_( 
"No new hierarchical labels found." ) );
 
 2212                    description = 
_( 
"Add Sheet Pin" );
 
 2218                if( evt->IsPrime() && !ignorePrimePosition )
 
 2220                    cursorPos = 
grid.Align( evt->Position() );
 
 2227                    cursorPos = 
grid.BestSnapAnchor( cursorPos, snapGrid, item );
 
 2230                if( !itemsToPlace.empty() )
 
 2232                    item = itemsToPlace.front().release();
 
 2233                    itemsToPlace.pop_front();
 
 2237                    prepItemForPlacement( item, cursorPos );
 
 2239                if( 
m_frame->GetMoveWarpsCursor() )
 
 2251                if( isSheetPin && sheet )
 
 2259                    m_frame->SaveCopyForRepeatItem( item );
 
 2266                commit.
Push( description );
 
 2288                if( isSheetPin && sheet )
 
 2295                        m_statusPopup->SetText( 
_( 
"No new hierarchical labels found." ) );
 
 2305                else if( !itemsToPlace.empty() )
 
 2307                    item = itemsToPlace.front().release();
 
 2308                    itemsToPlace.pop_front();
 
 2309                    prepItemForPlacement( item, cursorPos );
 
 2321        else if( item && evt->IsSelectionEvent() )
 
 2326            if( selection.
GetSize() == 1 )
 
 2338            if( evt->HasParameter() )
 
 2355            evt->SetPassEvent();
 
 2392            evt->SetPassEvent();
 
 2396            evt->SetPassEvent();
 
 
 2426    wxString            description;
 
 2476        grid.SetUseGrid( 
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
 
 2482        bool isSyntheticClick = item && evt->IsActivate() && evt->HasPosition() && evt->
Matches( aEvent );
 
 2484        if( evt->IsCancelInteractive() || ( item && evt->IsAction( &
ACTIONS::undo ) ) )
 
 2496        else if( evt->IsActivate() && !isSyntheticClick )
 
 2498            if( item && evt->IsMoveTool() )
 
 2501                evt->SetPassEvent( 
false );
 
 2508            if( evt->IsPointEditor() )
 
 2512            else if( evt->IsMoveTool() )
 
 2523        else if( !item && (   evt->IsClick( 
BUT_LEFT )
 
 2547                description = 
_( 
"Add Text Box" );
 
 2570            bool finished = 
false;
 
 2622                commit.
Push( wxString::Format( 
_( 
"Draw %s" ), item->
GetClass() ) );
 
 2643            evt->SetPassEvent();
 
 2653        else if( evt->IsDblClick( 
BUT_LEFT ) && !item )
 
 2671            evt->SetPassEvent();
 
 
 2700    bool                    started = 
false;
 
 2719                polyGeomMgr.
Reset();
 
 2744        grid.SetUseGrid( 
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
 
 2752        if( evt->IsCancelInteractive() )
 
 2763                evt->SetPassEvent( 
false );
 
 2767        else if( evt->IsActivate() )
 
 2772            if( evt->IsPointEditor() )
 
 2776            else if( evt->IsMoveTool() )
 
 2800            const bool endPolygon = evt->IsDblClick( 
BUT_LEFT )
 
 2808                polyGeomMgr.
Reset();
 
 2815            else if( polyGeomMgr.
AddPoint( cursorPos ) )
 
 2832                cursorPos = last.value();
 
 2842        else if( started && ( evt->IsMotion() || evt->IsDrag( 
BUT_LEFT ) ) )
 
 2848            evt->SetPassEvent();
 
 
 2913        grid.SetUseGrid( 
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
 
 2919        bool isSyntheticClick = 
table && evt->IsActivate() && evt->HasPosition() && evt->Matches( aEvent );
 
 2933        else if( evt->IsActivate() && !isSyntheticClick )
 
 2935            if( 
table && evt->IsMoveTool() )
 
 2938                evt->SetPassEvent( 
false );
 
 2945            if( evt->IsPointEditor() )
 
 2949            else if( evt->IsMoveTool() )
 
 2966            table->SetColCount( 1 );
 
 2972            table->AddCell( tableCell );
 
 2974            table->SetParent( schematic );
 
 2976            table->SetPosition( cursorPos );
 
 2986            table->ClearEditFlags();
 
 2997                commit.
Push( 
_( 
"Draw Table" ) );
 
 3015            VECTOR2I requestedSize( cursorPos - origin );
 
 3017            int colCount = std::max( 1, requestedSize.
x / ( fontSize * 15 ) );
 
 3018            int rowCount = std::max( 1, requestedSize.
y / ( fontSize * 2  ) );
 
 3020            VECTOR2I cellSize( std::max( gridSize.
x * 5, requestedSize.
x / colCount ),
 
 3021                               std::max( gridSize.
y * 2, requestedSize.
y / rowCount ) );
 
 3023            cellSize.
x = 
KiROUND( (
double) cellSize.
x / gridSize.
x ) * gridSize.
x;
 
 3024            cellSize.
y = 
KiROUND( (
double) cellSize.
y / gridSize.
y ) * gridSize.
y;
 
 3026            table->ClearCells();
 
 3027            table->SetColCount( colCount );
 
 3029            for( 
int col = 0; col < colCount; ++col )
 
 3030                table->SetColWidth( col, cellSize.
x );
 
 3032            for( 
int row = 0; row < rowCount; ++row )
 
 3034                table->SetRowHeight( row, cellSize.
y );
 
 3036                for( 
int col = 0; col < colCount; ++col )
 
 3044                    table->AddCell( cell );
 
 3070            evt->SetPassEvent();
 
 
 3090    std::unique_ptr<DESIGN_BLOCK> designBlock;
 
 3095    if( isDrawSheetCopy )
 
 3097        wxString* ptr = aEvent.
Parameter<wxString*>();
 
 3104    else if( isDrawSheetFromDesignBlock )
 
 3107        wxCHECK( designBlock, 0 );
 
 3108        filename = designBlock->GetSchematicFile();
 
 3111    if( ( isDrawSheetCopy || isDrawSheetFromDesignBlock ) && !wxFileExists( filename ) )
 
 3113        wxMessageBox( wxString::Format( 
_( 
"File '%s' does not exist." ), filename ) );
 
 3127    bool                  startedWithDrag = 
false;   
 
 3156    if( aEvent.
HasPosition() && !( isDrawSheetCopy || isDrawSheetFromDesignBlock ) )
 
 3164        grid.SetUseGrid( 
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
 
 3170        bool isSyntheticClick = sheet && evt->IsActivate() && evt->HasPosition()
 
 3173        if( evt->IsCancelInteractive() || ( sheet && evt->IsAction( &
ACTIONS::undo ) ) )
 
 3175            m_frame->GetInfoBar()->Dismiss();
 
 3187        else if( evt->IsActivate() && !isSyntheticClick )
 
 3189            if( sheet && evt->IsMoveTool() )
 
 3192                evt->SetPassEvent( 
false );
 
 3198                m_frame->ShowInfoBarMsg( 
_( 
"Press <ESC> to cancel sheet creation." ) );
 
 3199                evt->SetPassEvent( 
false );
 
 3203            if( evt->IsPointEditor() )
 
 3207            else if( evt->IsMoveTool() )
 
 3218        else if( !sheet && (   evt->IsClick( 
BUT_LEFT ) || evt->IsDblClick( 
BUT_LEFT )
 
 3224            if( selection.
Size() == 1
 
 3249            startedWithDrag = evt->IsDrag( 
BUT_LEFT );
 
 3256            if( isDrawSheetCopy )
 
 3258                wxFileName fn( filename );
 
 3263            else if( isDrawSheetFromDesignBlock )
 
 3265                wxFileName fn( filename );
 
 3270                std::vector<SCH_FIELD>& sheetFields = sheet->
GetFields();
 
 3273                for( 
const auto& [fieldName, fieldValue] : designBlock->GetFields() )
 
 3275                    sheetFields.emplace_back( sheet, 
FIELD_T::USER, fieldName );
 
 3276                    sheetFields.back().SetText( fieldValue );
 
 3277                    sheetFields.back().SetVisible( 
false );
 
 3295            wxString pageNumber;
 
 3298            std::set<int> usedPageNumbers;
 
 3302                wxString existingPageNum = 
path.GetPageNumber();
 
 3305                if( existingPageNum.ToLong( &pageNum ) && pageNum > 0 )
 
 3306                    usedPageNumbers.insert( 
static_cast<int>( pageNum ) );
 
 3310            int nextAvailable = 1;
 
 3312            while( usedPageNumbers.count( nextAvailable ) > 0 )
 
 3315            pageNumber.Printf( wxT( 
"%d" ), nextAvailable );
 
 3321    else if( sheet && (   evt->IsClick( 
BUT_LEFT ) || evt->IsDblClick( 
BUT_LEFT )
 
 3325               || ( startedWithDrag && evt->IsMouseUp( 
BUT_LEFT ) ) ) )
 
 3331                                              nullptr, 
nullptr, 
nullptr, &filename ) )
 
 3343                m_frame->AddToScreen( sheet );
 
 3350                    && !( ( isDrawSheetCopy || isDrawSheetFromDesignBlock )
 
 3368                c.
Push( isDrawSheetCopy ? 
"Import Sheet Copy" : 
"Draw Sheet" );
 
 3392            evt->SetPassEvent();
 
 3401            m_frame->SetMsgPanel( sheet );
 
 3417            evt->SetPassEvent();
 
 
 3448    if( !sheetPaths.size() )
 
 3452            m_frame, std::move( sheetPaths ),
 
 3453            std::make_shared<SHEET_SYNCHRONIZATION_AGENT>(
 
 3463                            commit.
Push( 
_( 
"Modify sheet pin" ) );
 
 3469                            commit.
Push( 
_( 
"Modify schematic item" ) );
 
 3480                        selectionTool->AddItemToSel( aItem, 
true );
 
 3485                         std::set<EDA_ITEM*> aTemplates )
 
 
 3557    if( labels.empty() )
 
 3561        m_statusPopup->SetText( 
_( 
"No new hierarchical labels found." ) );
 
 3575    SCH_ITEM*  lastPlacedLabel = 
nullptr;
 
 3577    auto calculatePositionForLabel =
 
 3588                int currentWidth = currentLabel->GetBoundingBox().GetWidth();
 
 3589                int currentHeight = currentLabel->GetBoundingBox().GetHeight();
 
 3593                    return { lastX + lastWidth, lastY };
 
 3604        if( !lastPlacedLabel )
 
 3606            std::vector<SCH_SHEET_PIN*> existingPins = sheet->
GetPins();
 
 3608            if( !existingPins.empty() )
 
 3610                std::sort( existingPins.begin(), existingPins.end(),
 
 3613                               return ( a->GetPosition().x < b->GetPosition().x )
 
 3614                                      || ( a->GetPosition().x == b->GetPosition().x
 
 3615                                           && a->GetPosition().y < b->GetPosition().y );
 
 3618                lastPlacedLabel = existingPins.back();
 
 3622        cursorPos = calculatePositionForLabel( lastPlacedLabel, label );
 
 3639            commit.
Push( 
_( 
"Add Sheet Pin" ) );
 
 3641            lastPlacedLabel = item;
 
 
 3651    static const std::function<void( std::list<SCH_SHEET_PATH>&, 
SCH_SCREEN*, std::set<SCH_SCREEN*>&,
 
 3653            []( std::list<SCH_SHEET_PATH>& aPaths, 
SCH_SCREEN* aScene, std::set<SCH_SCREEN*>& aVisited,
 
 3656                if( ! aScene || aVisited.find(aScene) != aVisited.end() )
 
 3659                std::vector<SCH_ITEM*> sheetChildren;
 
 3660                aScene->GetSheets( &sheetChildren );
 
 3661                aVisited.insert( aScene );
 
 3663                for( 
SCH_ITEM* child : sheetChildren )
 
 3668                    aPaths.push_back( cp );
 
 3669                    getSheetChildren( aPaths, sheet->
GetScreen(), aVisited, cp );
 
 3673    std::list<SCH_SHEET_PATH> sheetPaths;
 
 3674    std::set<SCH_SCREEN*> visited;
 
 3677    std::vector<SCH_SHEET*> topLevelSheets = 
m_frame->Schematic().GetTopLevelSheets();
 
 3679    for( 
SCH_SHEET* topSheet : topLevelSheets )
 
 3681        if( topSheet && topSheet->GetScreen() )
 
 3685            getSheetChildren( sheetPaths, topSheet->GetScreen(), visited, current );
 
 3689    if( sheetPaths.size() == 0 )
 
 3691        m_frame->ShowInfoBarMsg( 
_( 
"No sub schematic found in the current project" ) );
 
 
 3704    std::vector<SCH_HIERLABEL*> labels;
 
 3709        labels.push_back( label );
 
 3712    std::sort( labels.begin(), labels.end(),
 
 3715                   return StrNumCmp( label1->GetText(), label2->GetText(), true ) < 0;
 
 3720        if( !aSheet->
HasPin( label->GetText() ) )
 
 
 3733    std::vector<SCH_HIERLABEL*> labels;
 
 3740            labels.push_back( label );
 
 
constexpr EDA_IU_SCALE schIUScale
 
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
 
static TOOL_ACTION cancelInteractive
 
static TOOL_ACTION cursorDblClick
 
static TOOL_ACTION duplicate
 
static TOOL_ACTION activatePointEditor
 
static TOOL_ACTION doDelete
 
static TOOL_ACTION cursorClick
 
static TOOL_ACTION increment
 
static TOOL_ACTION selectionClear
Clear the current selection.
 
static TOOL_ACTION refreshPreview
 
static TOOL_ACTION finishInteractive
 
static TOOL_ACTION selectItems
Select a list of items (specified as the event parameter)
 
PANEL_DESIGN_BLOCK_CHOOSER m_DesignBlockChooserPanel
 
constexpr const Vec & GetPosition() const
 
constexpr size_type GetWidth() const
 
constexpr size_type GetHeight() const
 
constexpr bool Contains(const Vec &aPoint) const
 
constexpr const SizeVec & GetSize() const
 
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.
 
COMMIT & Add(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Add a new item to the model.
 
LIB_ID GetSelectedLibId(int *aUnit=nullptr) const
 
DESIGN_BLOCK * GetDesignBlock(const LIB_ID &aLibId, bool aUseCacheLib, bool aShowErrorMsg)
Load design block from design block library table.
 
void SetFilenameOverride(const wxString &aFilenameOverride)
Set the filename override to be applied in TransferDataToWindow.
 
std::list< std::unique_ptr< EDA_ITEM > > & GetImportedItems()
 
bool IsPlacementInteractive()
 
void SetLabelList(std::list< std::unique_ptr< SCH_LABEL_BASE > > *aLabelList)
 
FIELDS_GRID_TABLE * GetFieldsGridTable()
 
A base class for most all the KiCad significant classes used in schematics and boards.
 
virtual VECTOR2I GetPosition() const
 
virtual void ClearEditFlags()
 
virtual void SetPosition(const VECTOR2I &aPos)
 
virtual const BOX2I GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
 
EDA_ITEM_FLAGS GetEditFlags() const
 
void SetFlags(EDA_ITEM_FLAGS aMask)
 
KICAD_T Type() const
Returns the type of object.
 
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
 
virtual bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const
Compare the item against the search criteria in aSearchData.
 
virtual void SetParent(EDA_ITEM *aParent)
 
virtual wxString GetFriendlyName() const
 
virtual EDA_ITEM * Clone() const
Create a duplicate of this item with linked list members set to NULL.
 
FILL_T GetFillMode() const
 
void SetFillColor(const COLOR4D &aColor)
 
COLOR4D GetFillColor() const
 
void SetEnd(const VECTOR2I &aEnd)
 
const EDA_ANGLE & GetTextAngle() const
 
void SetTextSize(VECTOR2I aNewSize, bool aEnforceMinTextSize=true)
 
virtual const wxString & GetText() const
Return the string associated with the text object.
 
void SetVertJustify(GR_TEXT_V_ALIGN_T aType)
 
GR_TEXT_H_ALIGN_T GetHorizJustify() const
 
virtual void SetVisible(bool aVisible)
 
void SetBold(bool aBold)
Set the text to be bold - this will also update the font if needed.
 
GR_TEXT_V_ALIGN_T GetVertJustify() const
 
virtual void SetText(const wxString &aText)
 
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
 
void SetItalic(bool aItalic)
Set the text to be italic - this will also update the font if needed.
 
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
 
PANEL_ANNOTATE m_AnnotatePanel
 
EE_TYPE OfType(KICAD_T aType) const
 
A color representation with 4 components: red, green, blue, alpha.
 
An interface for classes handling user events controlling the view behavior such as zooming,...
 
virtual void CaptureCursor(bool aEnabled)
Force the cursor to stay within the drawing panel area.
 
virtual void ForceCursorPosition(bool aEnabled, const VECTOR2D &aPosition=VECTOR2D(0, 0))
Place the cursor immediately at a given point.
 
virtual void ShowCursor(bool aEnabled)
Enable or disables display of cursor.
 
virtual void WarpMouseCursor(const VECTOR2D &aPosition, bool aWorldCoordinates=false, bool aWarpView=false)=0
If enabled (.
 
virtual void SetCrossHairCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true)=0
Move the graphic crosshair cursor to the requested position expressed in world coordinates.
 
VECTOR2D GetCursorPosition() const
Return the current cursor position in world coordinates.
 
virtual VECTOR2D GetMousePosition(bool aWorldCoordinates=true) const =0
Return the current mouse pointer position.
 
virtual void SetCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true, bool aTriggeredByArrows=false, long aArrowCommand=0)=0
Move cursor to the requested position expressed in world coordinates.
 
virtual void SetAutoPan(bool aEnabled)
Turn on/off auto panning (this feature is used when there is a tool active (eg.
 
virtual void PinCursorInsideNonAutoscrollArea(bool aWarpMouseCursor)=0
 
LEGACY_SYMBOL_LIB * GetCacheLibrary()
 
Object used to load, save, search, and otherwise manipulate symbol library files.
 
bool IsValid() const
Check if this LID_ID is valid.
 
Define a library symbol object.
 
wxString GetDescription() const override
 
const LIB_ID & GetLibId() const override
 
wxString GetKeyWords() const override
 
void SetDescription(const wxString &aDescription)
Gets the Description field text value */.
 
void SetKeyWords(const wxString &aKeyWords)
 
bool IsLocalPower() const override
 
bool IsGlobalPower() const override
 
A singleton reporter that reports to nowhere.
 
virtual COMMON_SETTINGS * GetCommonSettings() const
 
Class that handles the drawing of a polygon, including management of last corner deletion and drawing...
 
bool AddPoint(const VECTOR2I &aPt)
Lock in a polygon point.
 
void SetCursorPosition(const VECTOR2I &aPos)
Set the current cursor position.
 
bool NewPointClosesOutline(const VECTOR2I &aPt) const
 
std::optional< VECTOR2I > DeleteLastCorner()
Remove the last-added point from the polygon.
 
void SetFinished()
Mark the polygon finished and update the client.
 
void SetLeaderMode(LEADER_MODE aMode)
Set the leader mode to use when calculating the leader/returner lines.
 
void Reset()
Clear the manager state and start again.
 
static SYMBOL_LIBRARY_ADAPTER * SymbolLibAdapter(PROJECT *aProject)
Accessor for project symbol library manager adapter.
 
static LEGACY_SYMBOL_LIBS * LegacySchLibs(PROJECT *aProject)
Returns the list of symbol libraries from a legacy (pre-5.x) design This is only used from the remapp...
 
An adjunct helper to the DRAWING_TOOL interactive tool, which handles incoming geometry changes from ...
 
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.
 
bool m_IntersheetRefsShow
 
Holds all the data relating to one schematic.
 
SCHEMATIC_SETTINGS & Settings() const
 
bool Contains(const SCH_REFERENCE &aRef) const
Check if the schematic contains the specified reference.
 
static TOOL_ACTION rotateCCW
 
static TOOL_ACTION placeClassLabel
 
static TOOL_ACTION placeSheetPin
 
static TOOL_ACTION placeNextSymbolUnit
 
static TOOL_ACTION editValue
 
static TOOL_ACTION setExcludeFromBOM
 
static TOOL_ACTION mirrorV
 
static TOOL_ACTION drawSheetFromFile
 
static TOOL_ACTION placeGlobalLabel
 
static TOOL_ACTION drawTextBox
 
static TOOL_ACTION autoplaceFields
 
static TOOL_ACTION changeSymbol
 
static TOOL_ACTION syncAllSheetsPins
 
static TOOL_ACTION closeOutline
 
static TOOL_ACTION drawArc
 
static TOOL_ACTION drawSheet
 
static TOOL_ACTION properties
 
static TOOL_ACTION editReference
 
static TOOL_ACTION leaveSheet
 
static TOOL_ACTION ddImportGraphics
 
static TOOL_ACTION autoplaceAllSheetPins
 
static TOOL_ACTION drawRectangle
 
static TOOL_ACTION placeHierLabel
 
static TOOL_ACTION placeLabel
 
static TOOL_ACTION drawCircle
 
static TOOL_ACTION importGraphics
 
static TOOL_ACTION toText
 
static TOOL_ACTION placeBusWireEntry
 
static TOOL_ACTION toHLabel
 
static TOOL_ACTION drawBezier
 
static TOOL_ACTION rotateCW
 
static TOOL_ACTION importSheet
 
static TOOL_ACTION toLabel
 
static TOOL_ACTION placeJunction
 
static TOOL_ACTION setDNP
 
static TOOL_ACTION drawRuleArea
 
static TOOL_ACTION placeSymbol
 
static TOOL_ACTION placeImage
 
static TOOL_ACTION deleteLastPoint
 
static TOOL_ACTION editWithLibEdit
 
static TOOL_ACTION toDLabel
 
static TOOL_ACTION cycleBodyStyle
 
static TOOL_ACTION drawSheetFromDesignBlock
 
static TOOL_ACTION mirrorH
 
static TOOL_ACTION placeDesignBlock
 
static TOOL_ACTION setExcludeFromSimulation
 
static TOOL_ACTION drawTable
 
static TOOL_ACTION placeSchematicText
 
static TOOL_ACTION toTextBox
 
static TOOL_ACTION changeSheet
 
static TOOL_ACTION enterSheet
 
static TOOL_ACTION editFootprint
 
static TOOL_ACTION repeatDrawItem
 
static TOOL_ACTION placeNoConnect
 
static TOOL_ACTION toGLabel
 
static TOOL_ACTION setExcludeFromBoard
 
static TOOL_ACTION syncSheetPins
 
static TOOL_ACTION placePower
 
Object to handle a bitmap image that can be inserted in a schematic.
 
Base class for a bus or wire entry.
 
VECTOR2I GetPosition() const override
 
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
 
void MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
 
void Rotate(const VECTOR2I &aCenter, bool aRotateCCW) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
 
Class for a wire to bus entry.
 
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).
 
Schematic editor (Eeschema) main window.
 
void SetText(const wxString &aText) override
 
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this label.
 
A set of SCH_ITEMs (i.e., without duplicates).
 
void SetSpinStyle(SPIN_STYLE aSpinStyle) override
 
Base class for any item which can be embedded within the SCHEMATIC container class,...
 
virtual bool IsConnectable() const
 
virtual void AutoplaceFields(SCH_SCREEN *aScreen, AUTOPLACE_ALGO aAlgo)
 
virtual void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction, RECURSE_MODE aMode)
 
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
 
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 IsType(const std::vector< KICAD_T > &aScanTypes) const override
Check whether the item is one of the listed types.
 
bool AutoRotateOnPlacement() const
autoRotateOnPlacement
 
SPIN_STYLE GetSpinStyle() const
 
void SetShape(LABEL_FLAG_SHAPE aShape)
 
LABEL_FLAG_SHAPE GetShape() const
 
void SetAutoRotateOnPlacement(bool autoRotate=true)
 
std::vector< SCH_FIELD > & GetFields()
 
virtual void SetSpinStyle(SPIN_STYLE aSpinStyle)
 
Segment description base class to describe items which have 2 end points (track, wire,...
 
bool IsWire() const
Return true if the line is a wire.
 
VECTOR2I GetEndPoint() const
 
VECTOR2I GetStartPoint() 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 ReannotateByOptions(ANNOTATE_ORDER_T aSortOption, ANNOTATE_ALGO_T aAlgoOption, int aStartNumber, const SCH_REFERENCE_LIST &aAdditionalRefs, bool aStartAtCurrent, SCH_SHEET_LIST *aHierarchy)
Forces reannotation of the provided references.
 
void SetRefDesTracker(std::shared_ptr< REFDES_TRACKER > aTracker)
 
void AddItem(const SCH_REFERENCE &aItem)
 
void UpdateAnnotation()
Update the symbol references for the schematic project (or the current sheet).
 
A helper to define a symbol's reference designator in a schematic.
 
bool AlwaysAnnotate() const
Verify the reference should always be automatically annotated.
 
EE_RTREE & Items()
Get the full RTree, usually for iterating.
 
SCH_ITEM * GetItem(const VECTOR2I &aPosition, int aAccuracy=0, KICAD_T aType=SCH_LOCATE_ANY_T) const
Check aPosition within a distance of aAccuracy for items of type aFilter.
 
bool IsExplicitJunctionAllowed(const VECTOR2I &aPosition) const
Indicate that a junction dot may be placed at the given location.
 
void SetPosition(const VECTOR2I &aPos) override
 
void BeginEdit(const VECTOR2I &aStartPoint) override
Begin drawing a symbol library draw item at aPosition.
 
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
 
void EndEdit(bool aClosed=false) override
End an object editing action.
 
void SetStroke(const STROKE_PARAMS &aStroke) override
 
bool ContinueEdit(const VECTOR2I &aPosition) override
Continue an edit in progress at aPosition.
 
void CalcEdit(const VECTOR2I &aPosition) override
Calculate the attributes of an item at aPosition when it is being edited.
 
wxString GetClass() const override
Return the class name.
 
STROKE_PARAMS GetStroke() const override
 
VECTOR2I GetPosition() const override
 
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
 
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.
 
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
 
SCH_SCREEN * LastScreen()
 
void SetPageNumber(const wxString &aPageNumber)
Set the sheet instance user definable page number.
 
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.
 
void SetBorderColor(KIGFX::COLOR4D aColor)
 
void AddPin(SCH_SHEET_PIN *aSheetPin)
Add aSheetPin to the sheet.
 
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
 
bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const override
Compare the item against the search criteria in aSearchData.
 
std::vector< SCH_FIELD > & GetFields()
Return a reference to the vector holding the sheet's fields.
 
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this sheet.
 
void SetBackgroundColor(KIGFX::COLOR4D aColor)
 
SCH_SCREEN * GetScreen() const
 
VECTOR2I GetPosition() const override
 
bool HasPin(const wxString &aName) const
Check if the sheet already has a sheet pin named aName.
 
void SetScreen(SCH_SCREEN *aScreen)
Set the SCH_SCREEN associated with this sheet to aScreen.
 
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
 
void SetBorderWidth(int aWidth)
 
void AutoplaceFields(SCH_SCREEN *aScreen, AUTOPLACE_ALGO aAlgo) override
 
void Resize(const VECTOR2I &aSize)
Resize this sheet to aSize and adjust all of the labels accordingly.
 
std::vector< SCH_SHEET_PIN * > & GetPins()
 
const LIB_ID & GetLibId() const override
 
void SetUnitSelection(const SCH_SHEET_PATH *aSheet, int aUnitSelection)
Set the selected unit of this symbol on one sheet.
 
RAII class that sets an value at construction and resets it to the original value at destruction.
 
const VECTOR2I NearestPoint(const VECTOR2I &aP) const
Compute a point on the segment (this) that is closest to point aP.
 
virtual void Add(EDA_ITEM *aItem)
 
VECTOR2I GetReferencePoint() const
 
virtual unsigned int GetSize() const override
Return the number of stored items.
 
virtual void Clear() override
Remove all the stored items from the group.
 
int Size() const
Returns the number of selected parts.
 
SHEET_SYNCHRONIZATION_PLACEMENT
 
std::function< void()> MODIFICATION
 
An interface to the global shared library manager that is schematic-specific and linked to one projec...
 
Helper object to filter a list of libraries.
 
This file is part of the common library.
 
static constexpr EDA_ANGLE ANGLE_0
 
std::vector< EDA_ITEM * > EDA_ITEMS
Define list of drawing items for screens.
 
#define IGNORE_PARENT_GROUP
 
#define IS_NEW
New item, just created.
 
#define STRUCT_DELETED
flag indication structures to be erased
 
#define ENDPOINT
ends. (Used to support dragging.)
 
#define SKIP_STRUCT
flag indicating that the structure should be ignored
 
#define IS_MOVING
Item being moved.
 
#define STARTPOINT
When a line is selected, these flags indicate which.
 
@ ID_POPUP_SCH_SELECT_UNIT
 
@ ID_POPUP_SCH_SELECT_BODY_STYLE
 
@ ID_POPUP_SCH_SELECT_BODY_STYLE_END
 
@ ID_POPUP_SCH_SELECT_UNIT_END
 
@ DIRECT
Unconstrained point-to-point.
 
static const std::string KiCadSchematicFileExtension
 
static wxString KiCadSchematicFileWildcard()
 
PGM_BASE & Pgm()
The global program "get" accessor.
 
LIB_SYMBOL * SchGetLibSymbol(const LIB_ID &aLibId, SYMBOL_LIBRARY_ADAPTER *aLibMgr, LEGACY_SYMBOL_LIB *aCacheLib, wxWindow *aParent, bool aShowErrorMsg)
Load symbol from symbol library table.
 
Class to handle a set of SCH_ITEMs.
 
ANNOTATE_ORDER_T
Schematic annotation order options.
 
@ ANNOTATE_SELECTION
Annotate the selection.
 
ANNOTATE_ALGO_T
Schematic annotation type options.
 
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
 
LINE_STYLE
Dashed line types.
 
COLOR4D default_sheet_border_color
 
COLOR4D default_sheet_background_color
 
int default_line_thickness
 
POWER_SYMBOLS new_power_symbols
 
SCH_SYMBOL * m_Symbol
< Provide a symbol to place
 
SCH_SYMBOL * m_Symbol
< Symbol used as reference for unit placement
 
@ USER
The field ID hasn't been set yet; field is invalid.
 
@ INTERSHEET_REFS
Global label cross-reference page numbers.
 
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
 
VECTOR2< int32_t > VECTOR2I