73#include <wx/textdlg.h>
107 const int unit = symbol->
GetUnit();
111 for(
int ii = 0; ii < nUnits; ii++ )
115 if( missingUnits.count( ii + 1 ) == 0 )
116 unit_text +=
_(
" (already placed)" );
129 if( !missingUnits.empty() )
133 for(
int unitNumber : missingUnits )
182 wxEmptyString, wxITEM_CHECK );
217 if(
pin->GetAlt().IsEmpty() || (
pin->GetAlt() == libPin->
GetName() ) )
265 if( !
pin && !sheetPin )
314 wxASSERT_MSG( drawingTools,
"eeshema.InteractiveDrawing tool is not available" );
321 auto sheetHasUndefinedPins =
324 if( aSel.Size() == 1 && aSel.Front()->Type() ==
SCH_SHEET_T )
334 wxString variant =
m_frame->Schematic().GetCurrentVariant();
340 switch( item->Type() )
343 if(
static_cast<const SCH_SYMBOL*
>( item )->GetDNP( sheet, variant ) )
351 if(
static_cast<const SCH_SHEET*
>( item )->GetDNP( sheet, variant ) )
371 return checked > 0 && unchecked == 0;
374 auto attribExcludeFromSimCond =
378 wxString variant =
m_frame->Schematic().GetCurrentVariant();
384 switch( item->Type() )
387 if(
static_cast<const SCH_SYMBOL*
>( item )->GetExcludedFromSim( sheet, variant ) )
395 if(
static_cast<const SCH_SHEET*
>( item )->GetExcludedFromSim( sheet, variant ) )
403 if(
static_cast<const SCH_RULE_AREA*
>( item )->GetExcludedFromSim() )
415 return checked > 0 && unchecked == 0;
418 auto attribExcludeFromBOMCond =
422 wxString variant =
m_frame->Schematic().GetCurrentVariant();
428 switch( item->Type() )
431 if(
static_cast<const SCH_SYMBOL*
>( item )->GetExcludedFromBOM( sheet, variant ) )
439 if(
static_cast<const SCH_SHEET*
>( item )->GetExcludedFromBOM( sheet, variant ) )
447 if(
static_cast<const SCH_RULE_AREA*
>( item )->GetExcludedFromBOM() )
459 return checked > 0 && unchecked == 0;
463 auto attribExcludeFromBoardCond =
467 wxString variant =
m_frame->Schematic().GetCurrentVariant();
473 switch( item->Type() )
476 if(
static_cast<const SCH_SYMBOL*
>( item )->GetExcludedFromBoard( sheet, variant ) )
484 if(
static_cast<const SCH_SHEET*
>( item )->GetExcludedFromBoard( sheet, variant ) )
492 if(
static_cast<const SCH_RULE_AREA*
>( item )->GetExcludedFromBoard() )
504 return checked > 0 && unchecked == 0;
507 auto attribExcludeFromPosFilesCond = [
this](
const SELECTION& aSel )
510 wxString variant =
m_frame->Schematic().GetCurrentVariant();
518 if(
static_cast<const SCH_SYMBOL*
>( item )->GetExcludedFromPosFiles( sheet, variant ) )
525 return checked > 0 && unchecked == 0;
546 auto duplicateCondition =
555 auto orientCondition =
566 auto propertiesCondition =
569 if( aSel.GetSize() == 0 )
586 if( !firstItem || !eeSelection )
589 switch( firstItem->
Type() )
607 return aSel.GetSize() == 1;
612 if( std::all_of( aSel.Items().begin(), aSel.Items().end(),
615 return item->Type() == SCH_LINE_T
616 && static_cast<const SCH_LINE*>( item )->IsGraphicLine();
621 else if( std::all_of( aSel.Items().begin(), aSel.Items().end(),
624 return item->Type() == SCH_JUNCTION_T;
629 else if( std::all_of( aSel.Items().begin(), aSel.Items().end(),
632 const SCH_ITEM* schItem = dynamic_cast<const SCH_ITEM*>( item );
634 wxCHECK( schItem, false );
636 return ( schItem->HasLineStroke() && schItem->IsConnectable() )
637 || item->Type() == SCH_JUNCTION_T;
650 auto autoplaceCondition =
664 static const std::vector<KICAD_T> allTextTypes = {
SCH_LABEL_T,
682 static const std::vector<KICAD_T> toCLabelTypes = {
SCH_LABEL_T,
691 static const std::vector<KICAD_T> toHLabelTypes = {
SCH_LABEL_T,
700 static const std::vector<KICAD_T> toGLabelTypes = {
SCH_LABEL_T,
709 static const std::vector<KICAD_T> toTextTypes = {
SCH_LABEL_T,
718 static const std::vector<KICAD_T> toTextBoxTypes = {
SCH_LABEL_T,
733 auto variantActiveCondition =
736 return !
m_frame->Schematic().GetCurrentVariant().IsEmpty();
739 auto noVariantActiveCondition =
742 return m_frame->Schematic().GetCurrentVariant().IsEmpty();
745 auto symbolHasVariantSymbol =
748 if(
m_frame->Schematic().GetCurrentVariant().IsEmpty() || aSel.GetSize() != 1 )
758 std::optional<SCH_SYMBOL_VARIANT> variant =
761 return variant.has_value() && variant->m_SymbolOverride.has_value();
764 auto makeSymbolUnitMenu =
767 std::shared_ptr<SYMBOL_UNIT_MENU> menu = std::make_shared<SYMBOL_UNIT_MENU>();
768 menu->SetTool( tool );
769 tool->GetToolMenu().RegisterSubMenu( menu );
773 auto makeBodyStyleMenu =
776 std::shared_ptr<BODY_STYLE_MENU> menu = std::make_shared<BODY_STYLE_MENU>();
777 menu->SetTool( tool );
778 tool->GetToolMenu().RegisterSubMenu( menu );
782 auto makePinFunctionMenu =
785 std::shared_ptr<ALT_PIN_FUNCTION_MENU> menu = std::make_shared<ALT_PIN_FUNCTION_MENU>();
786 menu->SetTool( tool );
787 tool->GetToolMenu().RegisterSubMenu( menu );
791 auto makePinTricksMenu =
794 std::shared_ptr<PIN_TRICKS_MENU> menu = std::make_shared<PIN_TRICKS_MENU>();
795 menu->SetTool( tool );
796 tool->GetToolMenu().RegisterSubMenu( menu );
800 auto makeTransformMenu =
814 auto makeAttributesMenu =
829 auto makeEditFieldsMenu =
842 auto makeConvertToMenu =
861 std::shared_ptr<LOCK_CONTEXT_MENU> menu = std::make_shared<LOCK_CONTEXT_MENU>( tool );
862 tool->GetToolMenu().RegisterSubMenu( menu );
889 moveMenu.AddMenu( makeTransformMenu(), orientCondition, 200 );
890 moveMenu.AddMenu( makeAttributesMenu(),
S_C::HasTypes( attribTypes ), 200 );
895 moveMenu.AddSeparator();
916 drawMenu.
AddMenu( makeTransformMenu(), orientCondition, 200 );
940 selToolMenu.
AddMenu( makeTransformMenu(), orientCondition, 200 );
958 symbolHasVariantSymbol, 200 );
959 selToolMenu.
AddMenu( makeConvertToMenu(), toChangeCondition, 200 );
1041 wxLogTrace(
"KICAD_SCH_MOVE",
"SCH_EDIT_TOOL::Rotate: start, clockwise=%d, selection size=%u", clockwise,
1044 if( selection.
GetSize() == 0 )
1048 int principalItemCount = 0;
1050 bool moving =
false;
1055 std::map<SCH_SHEET_PIN*, SCH_NO_CONNECT*> noConnects;
1058 commit = &localCommit;
1060 for(
unsigned ii = 0; ii < selection.
GetSize(); ii++ )
1067 principalItemCount++;
1076 if( principalItemCount == 1 )
1088 switch( head->
Type() )
1094 symbol->
Rotate( rotPoint, !clockwise );
1096 if(
m_frame->eeconfig()->m_AutoplaceFields.enable )
1160 head->
Rotate( rotPoint, !clockwise );
1182 head->
Rotate( rotPoint, !clockwise );
1190 rotPoint =
m_frame->GetNearestHalfGridPosition(
group->GetPosition() );
1192 group->Rotate( rotPoint, !clockwise );
1194 group->Move( rotPoint -
m_frame->GetNearestHalfGridPosition(
group->GetPosition() ) );
1203 rotPoint =
m_frame->GetNearestHalfGridPosition(
table->GetCenter() );
1205 table->Rotate( rotPoint, !clockwise );
1207 table->Move( rotPoint -
m_frame->GetNearestHalfGridPosition(
table->GetCenter() ) );
1213 head->
Rotate( rotPoint, clockwise );
1227 sheet->
Rotate( rotPoint, !clockwise );
1236 m_frame->UpdateItem( head,
false,
true );
1246 for(
EDA_ITEM* edaItem : selection )
1262 line->
Rotate( rotPoint, !clockwise );
1292 field->
Rotate( rotPoint, !clockwise );
1303 table->Rotate( rotPoint, !clockwise );
1306 table->Move( beforeCenter -
table->GetCenter() );
1314 sheet->
Rotate( rotPoint, !clockwise );
1319 item->
Rotate( rotPoint, !clockwise );
1321 wxLogTrace(
"KICAD_SCH_MOVE",
" SCH_EDIT_TOOL::Rotate: item type=%d rotated, pos (%d,%d) -> (%d,%d)",
1322 item->
Type(), posBefore.
x, posBefore.
y, posAfter.
x, posAfter.
y );
1325 m_frame->UpdateItem( item,
false,
true );
1329 wxLogTrace(
"KICAD_SCH_MOVE",
"SCH_EDIT_TOOL::Rotate: complete, moving=%d", moving );
1333 wxLogTrace(
"KICAD_SCH_MOVE",
"SCH_EDIT_TOOL::Rotate: posting refreshPreview" );
1338 for(
auto& [sheetPin, noConnect] : noConnects )
1340 if( noConnect->GetPosition() != sheetPin->GetTextPos() )
1342 commit->
Modify( noConnect, screen );
1343 noConnect->SetPosition( sheetPin->GetTextPos() );
1357 m_frame->Schematic().CleanUp( commit );
1359 if( !localCommit.
Empty() )
1360 localCommit.
Push(
_(
"Rotate" ) );
1373 if( selection.
GetSize() == 0 )
1378 bool connections =
false;
1384 std::map<SCH_SHEET_PIN*, SCH_NO_CONNECT*> noConnects;
1387 commit = &localCommit;
1389 if( selection.
GetSize() == 1 )
1394 switch( item->
Type() )
1464 noConnects =
static_cast<SCH_SHEET*
>( item )->GetNoConnects();
1487 m_frame->UpdateItem( item,
false,
true );
1489 else if( selection.
GetSize() > 1 )
1493 for(
EDA_ITEM* edaItem : selection )
1495 item =
static_cast<SCH_ITEM*
>( edaItem );
1539 m_frame->UpdateItem( item,
false,
true );
1544 for(
EDA_ITEM* selected : selection )
1553 for(
auto& [sheetPin, noConnect] : noConnects )
1555 if( noConnect->GetPosition() != sheetPin->GetTextPos() )
1557 commit->
Modify( noConnect, screen );
1558 noConnect->SetPosition( sheetPin->GetTextPos() );
1574 m_frame->Schematic().CleanUp( commit );
1577 if( !localCommit.
Empty() )
1578 localCommit.
Push(
_(
"Mirror" ) );
1594 unsigned aFallbackRotationsCCW )
1596 std::set<wxString> handledKeys;
1605 const VECTOR2I bRelPos = bField.GetPosition() - bField.GetParentPosition();
1608 const EDA_ANGLE bTextAngle = bField.GetTextAngle();
1615 bField.SetPosition( bField.GetParentPosition() + aRelPos );
1616 bField.SetHorizJustify( aTextJustifyH );
1617 bField.SetVertJustify( aTextJustifyV );
1618 bField.SetTextAngle( aTextAngle );
1625 auto it = std::find_if( aBFields.begin(), aBFields.end(),
1628 return bField.GetUntranslatedName() == name;
1631 if( it != aBFields.end() )
1635 swapFieldTextProps( aField, bField );
1640 for(
unsigned ii = 0; ii < aFallbackRotationsCCW; ii++ )
1647 handledKeys.insert(
name );
1654 const wxString bName = bField.GetUntranslatedName();
1655 if( handledKeys.find( bName ) == handledKeys.end() )
1657 for(
unsigned ii = 0; ii < aFallbackRotationsCCW; ii++ )
1659 bField.Rotate( bField.GetParentPosition(),
false );
1674 if( selection.
Size() < 2 )
1688 if( item->GetParent() != parent )
1694 bool connections =
false;
1700 commit = &localCommit;
1702 for(
size_t i = 0; i < sorted.size() - 1; i++ )
1714 std::swap( aPos, bPos );
1723 std::swap( aSide, bSide );
1755 std::vector<SCH_FIELD>& aFields = aLabelBase.
GetFields();
1756 std::vector<SCH_FIELD>& bFields = bLabelBase.
GetFields();
1758 const unsigned rotationsAtoB = aSpinStyle.
CCWRotationsTo( bSpinStyle );
1769 if( !aText || !bText )
1795 std::swap( aOrient, bOrient );
1808 m_frame->UpdateItem( a,
false,
true );
1809 m_frame->UpdateItem( b,
false,
true );
1825 if( !localCommit.
Empty() )
1826 localCommit.
Push(
_(
"Swap" ) );
1846 if( !
m_frame->eeconfig()->m_Input.allow_unconstrained_pin_swaps )
1852 if( selection.
Size() < 2 )
1865 if( item->GetParent() != parent )
1869 std::set<wxString> sharedSheetPaths;
1870 std::set<wxString> sharedProjectNames;
1873 &sharedProjectNames ) )
1877 std::set<wxString> friendlySheets;
1879 if( !sharedSheetPaths.empty() )
1882 if( !sharedProjectNames.empty() )
1886 if( projects.IsEmpty() )
1888 m_frame->ShowInfoBarError(
_(
"Pin swaps are disabled for symbols shared across other projects. "
1889 "Duplicate the sheet to edit pins independently." ) );
1894 wxString::Format(
_(
"Pin swaps are disabled for symbols shared across other projects (%s). "
1895 "Duplicate the sheet to edit pins independently." ),
1899 else if( !friendlySheets.empty() )
1904 wxString::Format(
_(
"Pin swaps are disabled for symbols used by multiple sheet instances (%s). "
1905 "Duplicate the sheet to edit pins independently." ),
1911 _(
"Pin swaps are disabled for shared symbols. Duplicate the sheet to edit pins independently." ) );
1917 bool connections =
false;
1923 commit = &localCommit;
1929 bool swappedLibPins =
false;
1931 for(
size_t i = 0; i < sorted.size() - 1; i++ )
1934 SCH_PIN* bPin =
static_cast<SCH_PIN*
>( sorted[( i + 1 ) % sorted.size()] );
1947 m_frame->UpdateItem( aPin,
false,
true );
1948 m_frame->UpdateItem( bPin,
false,
true );
1951 if( swappedLibPins )
1955 m_frame->UpdateItem( parentSymbol,
false,
true );
1968 m_frame->Schematic().CleanUp( commit );
1975 if( !localCommit.
Empty() )
1976 localCommit.
Push(
_(
"Swap Pins" ) );
1986 if( !aGraph || !aPin )
1994 const std::set<SCH_ITEM*>& items = sg->
GetItems();
1996 size_t pinCount = 0;
2004 switch( item->Type() )
2012 if( conn && conn->
IsNet() )
2038 if( orderedPins.size() < 2 )
2045 std::vector<SCH_LABEL_BASE*> labels;
2047 for(
EDA_ITEM* item : orderedPins )
2055 _(
"Each selected pin must have exactly one attached net label and no other pin connections." ) );
2059 labels.push_back( label );
2062 if( labels.size() >= 2 )
2069 for(
size_t i = 0; i < labels.size() - 1; ++i )
2073 wxString aText = a->
GetText();
2074 wxString bText = b->
GetText();
2079 commit.
Push(
_(
"Swap Pin Labels" ) );
2091 if( selectedUnits.size() < 2 )
2099 std::vector<std::vector<SCH_LABEL_BASE*>> symbolLabelVectors;
2103 std::vector<std::pair<VECTOR2I, SCH_LABEL_BASE*>> byPos;
2105 for(
SCH_PIN*
pin : symbol->GetPins( &sheetPath ) )
2111 m_frame->ShowInfoBarError(
_(
"Each pin of selected units must have exactly one attached net label and "
2112 "no other pin connections." ) );
2116 byPos.emplace_back(
pin->GetPosition(), label );
2120 std::sort( byPos.begin(), byPos.end(),
2121 [](
const auto& a,
const auto& b )
2123 if( a.first.x != b.first.x )
2124 return a.first.x < b.first.x;
2126 return a.first.y < b.first.y;
2130 std::vector<SCH_LABEL_BASE*> labels;
2132 for(
const auto& pr : byPos )
2133 labels.push_back( pr.second );
2135 symbolLabelVectors.push_back( labels );
2139 const size_t pinCount = symbolLabelVectors.front().size();
2144 for(
size_t pin = 0;
pin < pinCount;
pin++ )
2146 for(
auto& vec : symbolLabelVectors )
2149 wxString carry = symbolLabelVectors.back()[
pin]->GetText();
2151 for(
size_t i = 0; i < symbolLabelVectors.size(); i++ )
2160 if( !commit.
Empty() )
2161 commit.
Push(
_(
"Swap Unit Labels" ) );
2169 const std::vector<std::unique_ptr<SCH_ITEM>>& sourceItems =
m_frame->GetRepeatItems();
2171 if( sourceItems.empty() )
2180 for(
const std::unique_ptr<SCH_ITEM>& item : sourceItems )
2183 bool restore_state =
false;
2194 enteredGroup->AddItem( newItem );
2203 if( !label->IncrementLabel( cfg->m_Drawing.repeat_label_increment ) )
2204 m_frame->ShowInfoBarWarning(
_(
"Label value cannot go below zero" ),
true );
2217 schIUScale.MilsToIU( cfg->m_Drawing.default_repeat_offset_y ) ) );
2226 if(
m_frame->CheckSheetForRecursion( sheet, currentSheet ) )
2229 const wxString originalFileName = sheet->
GetFileName();
2234 restore_state = !
m_frame->EditSheetProperties( sheet, currentSheet );
2247 commit.Added( newItem,
m_frame->GetScreen() );
2256 if(
m_frame->eeconfig()->m_AnnotatePanel.automatic )
2258 static_cast<SCH_SYMBOL*
>( newItem )->ClearAnnotation(
nullptr,
false );
2261 true , annotateStartNum,
false,
false,
false,
2277 newItems.
Add( newItem );
2281 if( !newItems.
Empty() )
2287 m_frame->Schematic().CleanUp( &commit );
2288 commit.Push(
_(
"Repeat Item" ) );
2290 m_frame->SaveCopyForRepeatItem(
static_cast<SCH_ITEM*
>( newItems[0] ) );
2292 for(
size_t ii = 1; ii < newItems.
GetSize(); ++ii )
2293 m_frame->AddCopyForRepeatItem(
static_cast<SCH_ITEM*
>( newItems[ii] ) );
2307 std::deque<EDA_ITEM*> items =
m_selectionTool->GetSelection().GetItems();
2309 std::vector<VECTOR2I> pts;
2310 bool updateHierarchy =
false;
2331 pts.insert( pts.end(), tmp_pts.begin(), tmp_pts.end() );
2354 static_cast<SCH_FIELD*
>( sch_item )->SetVisible(
false );
2360 static_cast<SCH_TABLECELL*
>( sch_item )->SetText( wxEmptyString );
2397 m_frame->DeleteJunction( &commit, junction );
2400 commit.
Push(
_(
"Delete" ) );
2402 if( updateHierarchy )
2403 m_frame->UpdateHierarchyNavigator();
2427 caption.Printf(
_(
"Edit %s Field" ),
TitleCaps( fieldName ) );
2431 caption.Printf(
_(
"Edit '%s' Field" ), aField->
GetName() );
2451 if( !commit.
Empty() )
2452 commit.
Push( caption );
2460 if( sel.
Size() != 1 )
2463 bool clearSelection = sel.
IsHover();
2479 if( item ==
nullptr )
2511 clearSelection =
true;
2535 if( clearSelection )
2547 bool moving = head && head->
IsMoving();
2549 if( selection.
Empty() )
2552 std::vector<SCH_ITEM*> autoplaceItems;
2554 for(
unsigned ii = 0; ii < selection.
GetSize(); ii++ )
2559 autoplaceItems.push_back( item );
2564 for(
SCH_ITEM* sch_item : autoplaceItems )
2566 if( !moving && !sch_item->IsNew() )
2580 if( !commit.
Empty() )
2581 commit.
Push(
_(
"Autoplace Fields" ) );
2596 if( !selection.
Empty() )
2605 if( !
m_frame->Schematic().GetCurrentVariant().IsEmpty() )
2608 _(
"Change Symbol is not available when a design variant is active. "
2609 "Use Set Variant Symbol or switch to the default variant first." ) );
2632 if( selection.
Empty() )
2640 wxString variantName =
m_frame->Schematic().GetCurrentVariant();
2642 if( variantName.IsEmpty() )
2651 std::shared_ptr<LIB_SYMBOL> baseFlat;
2658 baseFlat = baseSymbol->
Flatten();
2661 [baseFlat, adapter](
const LIB_ID& aCandidate )
2662 -> std::vector<VARIANT_COMPAT_RESULT>
2668 std::unique_ptr<LIB_SYMBOL> flat = raw->Flatten();
2681 std::vector<PICKED_SYMBOL> historyList;
2682 std::vector<PICKED_SYMBOL> alreadyPlaced;
2685 &symbol->
GetLibId(),
false, compatFunc );
2702 _(
"Could not load symbol '%s' from library." ), symLabel ) );
2709 std::unique_ptr<LIB_SYMBOL> candidateFlat = candidateRaw->
Flatten();
2713 std::vector<VARIANT_COMPAT_RESULT> issues =
2716 if( !issues.empty() )
2718 wxString msg = wxString::Format(
2719 _(
"The selected symbol '%s' is not pin-compatible with the base symbol "
2725 msg += wxS(
"\u2022 " ) + issue.detail + wxS(
"\n" );
2727 msg += wxS(
"\n" ) +
_(
"Choose a symbol with equivalent pins and pin positions." );
2728 wxMessageBox( msg,
_(
"Variant Symbol Compatibility" ), wxOK | wxICON_ERROR,
m_frame );
2741 commit.
Push(
_(
"Set Variant Symbol" ) );
2742 m_frame->GetCanvas()->Refresh();
2755 if( selection.
Empty() )
2763 wxString variantName =
m_frame->Schematic().GetCurrentVariant();
2765 if( variantName.IsEmpty() )
2770 std::optional<SCH_SYMBOL_VARIANT> existingVariant =
2771 symbol->
GetVariant( currentSheet, variantName );
2773 if( !existingVariant || !existingVariant->m_SymbolOverride.has_value() )
2782 commit.
Push(
_(
"Clear Variant Symbol" ) );
2783 m_frame->GetCanvas()->Refresh();
2796 if( selection.
Empty() )
2802 if( !symbol->
IsNew() )
2810 m_frame->SelectBodyStyle( symbol, nextBodyStyle );
2812 if( symbol->
IsNew() )
2815 if( !commit.
Empty() )
2816 commit.
Push(
_(
"Change Body Style" ) );
2828 bool clearSelection = selection.
IsHover();
2830 if( selection.
Empty() )
2855 switch( curr_item->
Type() )
2862 std::deque<SCH_LINE*> lines;
2865 lines.push_back(
static_cast<SCH_LINE*
>( selItem ) );
2873 std::deque<SCH_JUNCTION*> junctions;
2876 junctions.push_back(
static_cast<SCH_JUNCTION*
>( selItem ) );
2887 std::deque<SCH_ITEM*> items;
2890 items.push_back(
static_cast<SCH_ITEM*
>( selItem ) );
2898 frame()->ShowInfoBarMsg(
_(
"Use Properties panel to edit properties common to selected items." ) );
2909 if( inspectionTool )
2917 std::vector<SCH_TABLECELL*> cells;
2939 if( selection.
Size() > 1 )
2945 if( !
frame()->GetPropertiesPanel()->IsShownOnScreen() )
2947 infobar->
AddLink(
_(
"Show Properties panel" ),
2948 [
this]( wxHyperlinkEvent& )
2950 frame()->ToggleProperties();
2955 infobar->
ShowMessageFor(
_(
"Use Properties panel to edit properties common to selected items." ),
2956 8000, wxICON_INFORMATION );
2964 if( clearSelection )
2973 switch( aItem->
Type() )
2994 if(
m_frame->eeconfig()->m_AutoplaceFields.enable )
3010 if( wxWindow* blocking_win =
editor->Kiway().GetBlockingDialog() )
3011 blocking_win->Close(
true );
3017 editor->LoadSymbolFromSchematic( symbol );
3028 if( wxWindow* blocking_win =
editor->Kiway().GetBlockingDialog() )
3029 blocking_win->Close(
true );
3061 bool isUndoable =
false;
3062 bool doClearAnnotation =
false;
3063 bool okPressed =
false;
3064 bool updateHierarchyNavigator =
false;
3074 okPressed =
m_frame->EditSheetProperties( sheet, &
m_frame->GetCurrentSheet(), &isUndoable, &doClearAnnotation,
3075 &updateHierarchyNavigator );
3081 commit.
Push(
_(
"Edit Sheet Properties" ) );
3088 std::vector<SCH_ITEM*> items;
3090 items.emplace_back( sheet );
3091 m_frame->Schematic().OnItemsRemoved( items );
3092 m_frame->Schematic().OnItemsAdded( items );
3094 m_frame->Schematic().RefreshHierarchy();
3095 m_frame->UpdateHierarchyNavigator();
3102 if( doClearAnnotation )
3116 m_frame->GetCanvas()->Refresh();
3118 if( updateHierarchyNavigator )
3119 m_frame->UpdateHierarchyNavigator();
3202 dlg.SetTitle(
_(
"Rule Area Properties" ) );
3218 wxFAIL_MSG( wxString(
"Cannot edit schematic item type " ) + aItem->
GetClass() );
3235 commit = &localCommit;
3237 for(
unsigned int i = 0; i < selection.GetSize(); ++i )
3241 if( item && item->
Type() != convertTo )
3252 wxCHECK2( sourceText,
continue );
3254 switch( item->
Type() )
3274 txt =
_(
"<empty>" );
3285 txt =
text->GetText();
3286 href =
text->GetHyperlink();
3303 int textSize =
text->GetTextSize().y;
3336 position =
m_frame->GetNearestGridPosition( position );
3346 auto getValidNetname =
3347 [](
const wxString& aText )
3349 wxString local_txt = aText;
3350 local_txt.Replace(
"\n",
"_" );
3351 local_txt.Replace(
"\r",
"_" );
3352 local_txt.Replace(
"\t",
"_" );
3356 local_txt.Replace(
" ",
"_" );
3361 if( local_txt.IsEmpty() )
3362 return _(
"<empty>" );
3390 newtext = new_label;
3415 newtext = new_label;
3440 newtext = new_label;
3457 new_label->
GetFields().push_back( netclass );
3464 newtext = new_label;
3484 bbox.
Inflate( -label->GetLabelBoxExpansion() );
3515 new_textbox->
SetEnd( botRight );
3518 newtext = new_textbox;
3527 wxCHECK2( newtext,
continue );
3538 wxCHECK2( eda_text && new_eda_text,
continue );
3553 if( label && new_label )
3562 return field.GetId() == FIELD_T::INTERSHEET_REFS
3563 && new_label->Type() != SCH_GLOBAL_LABEL_T;
3585 if( !localCommit.
Empty() )
3586 localCommit.
Push(
_(
"Change To" ) );
3588 if( selection.IsHover() )
3601 if( selection.
GetSize() == 0 )
3610 commit = &localCommit;
3623 for(
EDA_ITEM* edaItem : selection )
3625 item =
static_cast<SCH_ITEM*
>( edaItem );
3632 setJustify(
static_cast<SCH_FIELD*
>( item ) );
3639 setJustify(
static_cast<SCH_TEXT*
>( item ) );
3650 setJustify( label );
3653 m_frame->UpdateItem( item,
false,
true );
3657 for(
EDA_ITEM* selected : selection )
3671 if( !localCommit.
Empty() )
3674 localCommit.
Push(
_(
"Left Justify" ) );
3676 localCommit.
Push(
_(
"Center Justify" ) );
3678 localCommit.
Push(
_(
"Right Justify" ) );
3695 if( !
IsOK(
m_frame,
_(
"Do you wish to delete the unreferenced pins from this sheet?" ) ) )
3704 commit.
Push(
_(
"Cleanup Sheet Pins" ) );
3729 screen =
m_frame->GetScreen();
3738 if( prevInstance.
size() )
3746 screen =
m_frame->GetScreen();
3749 sheet =
m_frame->GetCurrentSheet().Last();
3756 msg.Printf(
_(
"Enter page number for sheet path%s" ),
3757 ( sheetPath.Length() > 20 ) ?
"\n" + sheetPath :
" " + sheetPath );
3759 wxTextEntryDialog dlg(
m_frame, msg,
_(
"Edit Sheet Page Number" ), pageNumber );
3761 dlg.SetTextValidator( wxFILTER_ALPHANUMERIC );
3763 if( dlg.ShowModal() == wxID_CANCEL || dlg.GetValue() == instance.
GetPageNumber() )
3768 commit.
Modify( sheet, screen );
3772 if( instance ==
m_frame->GetCurrentSheet() )
3774 m_frame->GetScreen()->SetPageNumber( dlg.GetValue() );
3775 m_frame->OnPageSettingsChange();
3778 commit.
Push( wxS(
"Change Sheet Page Number" ) );
3795 wxString* filename = aEvent.
Parameter<wxString*>();
3802 if( !
image->GetReferenceImage().ReadImageFile( *filename ) )
3804 wxMessageBox( wxString::Format(
_(
"Could not load image from '%s'." ), *filename ) );
3819 std::set<std::pair<SCH_ITEM*, SCH_SCREEN*>> collectedItems;
3825 collectedItems.insert( { symbol,
m_frame->GetScreen() } );
3829 if( symbol->IsAnnotated( &
m_frame->GetCurrentSheet() ) )
3831 wxString ref = symbol->GetRef( &
m_frame->GetCurrentSheet() );
3832 int unit = symbol->GetUnit();
3833 LIB_ID libId = symbol->GetLibId();
3838 std::vector<SCH_SYMBOL*> otherUnits;
3843 collectedItems.insert( { otherUnit, screen } );
3849 collectedItems.insert( { sheet,
m_frame->GetScreen() } );
3853 collectedItems.insert( { ruleArea,
m_frame->GetScreen() } );
3859 wxString variant =
m_frame->Schematic().GetCurrentVariant();
3860 bool new_state =
false;
3862 for(
const auto& [item,
_] : collectedItems )
3869 && !item->GetExcludedFromPosFiles( sheet, variant ) ) )
3876 for(
const auto& [item, screen] : collectedItems )
3878 commit.
Modify( item, screen );
3881 item->SetDNP( new_state, sheet, variant );
3884 item->SetExcludedFromSim( new_state, sheet, variant );
3887 item->SetExcludedFromBOM( new_state, sheet, variant );
3890 item->SetExcludedFromBoard( new_state, sheet, variant );
3893 item->SetExcludedFromPosFiles( new_state, sheet, variant );
3896 if( !commit.
Empty() )
3897 commit.
Push(
_(
"Toggle Attribute" ) );
3912 return _(
"Edit Symbol Properties..." );
3929 return _(
"Edit Netclasses..." );
3933 return _(
"Remove Empty Label" );
3936 return wxEmptyString;
3950 if(
EDA_ITEM* item =
frame->ResolveItem( aERCItem->GetMainItemID() ) )
3959 EDA_ITEM* item =
frame->ResolveItem( aERCItem->GetMainItemID() );
3974 frame->ShowSchematicSetupDialog(
_(
"Net Classes" ) );
3979 SCH_ITEM* item =
frame->Schematic().ResolveItem( aERCItem->GetMainItemID(), &sheetPath,
true );
3987 commit.
Push(
_(
"Remove Empty Label" ) );
4015 if( selection.
Empty() )
4018 if( selection.
Empty() )
4029 if( schItem->IsLocked() )
4038 wxString commitMsg = ( aMode ==
ON ) ?
_(
"Lock" ) :
_(
"Unlock" );
4051 schItem->SetLocked( aMode ==
ON );
4055 if( !commit.
Empty() )
4057 commit.
Push( commitMsg );
constexpr EDA_IU_SCALE schIUScale
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
static TOOL_ACTION decrementPrimary
static TOOL_ACTION unselectAll
static TOOL_ACTION decrementSecondary
static TOOL_ACTION selectItem
Select an item (specified as the event parameter).
static TOOL_ACTION unselectItem
static TOOL_ACTION showSymbolLibTable
static TOOL_ACTION pasteSpecial
static TOOL_ACTION groupProperties
static TOOL_ACTION rightJustify
static TOOL_ACTION pageSettings
static TOOL_ACTION incrementSecondary
static TOOL_ACTION duplicate
static TOOL_ACTION incrementPrimary
static TOOL_ACTION doDelete
static TOOL_ACTION cursorClick
static TOOL_ACTION deleteTool
static TOOL_ACTION increment
static TOOL_ACTION selectionClear
Clear the current selection.
static TOOL_ACTION leftJustify
static TOOL_ACTION copyAsText
static TOOL_ACTION refreshPreview
static TOOL_ACTION selectAll
static TOOL_ACTION centerJustify
Manage TOOL_ACTION objects.
void SetConditions(const TOOL_ACTION &aAction, const ACTION_CONDITIONS &aConditions)
Set the conditions the UI elements for activating a specific tool action should use for determining t...
void update() override
Update menu state stub.
ACTION_MENU * create() const override
Return an instance of this class. It has to be overridden in inheriting classes.
constexpr const Vec & GetPosition() const
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
constexpr const Vec GetEnd() const
constexpr void SetOrigin(const Vec &pos)
constexpr Vec Centre() const
constexpr const Vec GetCenter() const
constexpr coord_type GetLeft() const
constexpr const Vec & GetOrigin() const
constexpr coord_type GetRight() const
constexpr void SetEnd(coord_type x, coord_type y)
constexpr coord_type GetTop() const
constexpr coord_type GetBottom() const
COMMIT & Remove(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Remove a new item from the model.
COMMIT & Added(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Notify observers that aItem has been added.
void Unstage(EDA_ITEM *aItem, BASE_SCREEN *aScreen)
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr, RECURSE_MODE aRecurse=RECURSE_MODE::NO_RECURSE)
Modify a given item in the model.
COMMIT & Removed(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
int GetStatus(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Returns status of an item.
Calculate the connectivity of a schematic and generate netlists.
CONNECTION_SUBGRAPH * GetSubgraphForItem(SCH_ITEM *aItem) const
A subgraph is a set of items that are electrically connected on a single sheet.
const std::set< SCH_ITEM * > & GetItems() const
Provide a read-only reference to the items in the subgraph.
Dialog to update or change schematic library symbols.
This class is setup in expectation of its children possibly using Kiway player so DIALOG_SHIM::ShowQu...
void UpdateField(SCH_FIELD *aField)
Dialog used to edit SCH_SYMBOL objects in a schematic.
@ TABLECELL_PROPS_EDIT_TABLE
enum TABLECELL_PROPS_RETVALUE GetReturnValue()
bool HitTestDrawingSheetItems(KIGFX::VIEW *aView, const VECTOR2I &aPosition)
bool IsHorizontal() const
A set of EDA_ITEMs (i.e., without duplicates).
A base class for most all the KiCad significant classes used in schematics and boards.
virtual VECTOR2I GetPosition() const
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.
virtual bool IsType(const std::vector< KICAD_T > &aScanTypes) const
Check whether the item is one of the listed types.
EDA_ITEM * GetParent() const
bool HasFlag(EDA_ITEM_FLAGS aFlag) const
virtual void SetParent(EDA_ITEM *aParent)
virtual void SetEnd(const VECTOR2I &aEnd)
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
virtual VECTOR2I GetTextSize() const
virtual void SetTextSize(VECTOR2I aNewSize, bool aEnforceMinTextSize=true)
virtual const wxString & GetText() const
Return the string associated with the text object.
virtual bool IsVisible() const
virtual void SetTextPos(const VECTOR2I &aPoint)
KIFONT::FONT * GetFont() const
void SetAttributes(const EDA_TEXT &aSrc, bool aSetPosition=true)
Set the text attributes from another instance.
void SetVertJustify(GR_TEXT_V_ALIGN_T aType)
wxString GetHyperlink() const
GR_TEXT_H_ALIGN_T GetHorizJustify() const
virtual void SetTextThickness(int aWidth)
The TextThickness is that set by the user.
virtual EDA_ANGLE GetTextAngle() const
void SetBold(bool aBold)
Set the text to be bold - this will also update the font if needed.
void SetHyperlink(wxString aLink)
GR_TEXT_V_ALIGN_T GetVertJustify() const
virtual int GetTextThickness() 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 SetFont(KIFONT::FONT *aFont)
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
EE_TYPE Overlapping(const BOX2I &aRect) const
static const TOOL_EVENT SelectedEvent
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
VECTOR2D GetCursorPosition() const
Return the current cursor position in world coordinates.
virtual wxString GetClass() const =0
Return the class name.
void RecacheAllItems()
Rebuild GAL display lists.
A wxFrame capable of the OpenProjectFiles function, meaning it can load a portion of a KiCad project.
A logical library item identifier and consists of various portions much like a URI.
bool IsValid() const
Check if this LID_ID is valid.
const UTF8 & GetLibItemName() const
Define a library symbol object.
int GetUnitCount() const override
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
static bool ParseBusGroup(const wxString &aGroup, wxString *name, std::vector< wxString > *aMemberList, size_t *aPrefixEnd=nullptr)
Parse a bus group label into the name and a list of components.
A singleton reporter that reports to nowhere.
static SYMBOL_LIBRARY_ADAPTER * SymbolLibAdapter(PROJECT *aProject)
Accessor for project symbol library manager adapter.
These are loaded from Eeschema settings but then overwritten by the project settings.
SCHEMATIC_SETTINGS & Settings() const
static TOOL_ACTION rotateCCW
static TOOL_ACTION placeClassLabel
static TOOL_ACTION swapPins
static TOOL_ACTION editValue
static TOOL_ACTION setExcludeFromBOM
static TOOL_ACTION mirrorV
static TOOL_ACTION clearHighlight
static TOOL_ACTION placeGlobalLabel
static TOOL_ACTION changeSymbols
static TOOL_ACTION updateSymbol
static TOOL_ACTION autoplaceFields
static TOOL_ACTION changeSymbol
static TOOL_ACTION ddAddImage
static TOOL_ACTION properties
static TOOL_ACTION editReference
static TOOL_ACTION placeHierLabel
static TOOL_ACTION placeLabel
static TOOL_ACTION toText
static TOOL_ACTION toHLabel
static TOOL_ACTION rotateCW
static TOOL_ACTION importSheet
static TOOL_ACTION setExcludeFromSim
static TOOL_ACTION toLabel
static TOOL_ACTION setDNP
static TOOL_ACTION swapUnitLabels
static TOOL_ACTION placeImage
static TOOL_ACTION editWithLibEdit
static TOOL_ACTION cleanupSheetPins
static TOOL_ACTION toDLabel
static TOOL_ACTION clearVariantSymbol
static TOOL_ACTION setExcludeFromPosFiles
static TOOL_ACTION cycleBodyStyle
static TOOL_ACTION mirrorH
static TOOL_ACTION setVariantSymbol
static TOOL_ACTION ddAppendFile
static TOOL_ACTION placeSchematicText
static TOOL_ACTION toTextBox
static TOOL_ACTION unlock
static TOOL_ACTION annotate
static TOOL_ACTION updateSymbols
static TOOL_ACTION swapPinLabels
static TOOL_ACTION enterSheet
static TOOL_ACTION editFootprint
static TOOL_ACTION repeatDrawItem
static TOOL_ACTION editTextAndGraphics
static TOOL_ACTION editPageNumber
static TOOL_ACTION toGLabel
static TOOL_ACTION setExcludeFromBoard
static TOOL_ACTION toggleLock
Object to handle a bitmap image that can be inserted in a schematic.
static const std::vector< KICAD_T > FieldOwners
static const std::vector< KICAD_T > DeletableItems
virtual void Push(const wxString &aMessage=wxT("A commit"), int aCommitFlags=0) override
Execute the changes.
static SELECTION_CONDITION SingleMultiFunctionPin
static SELECTION_CONDITION SingleSymbol
static SELECTION_CONDITION MultipleSymbolsOrPower
static SELECTION_CONDITION HasLockedItems
static SELECTION_CONDITION AllPinsOrSheetPins
static SELECTION_CONDITION SingleSymbolOrPower
static SELECTION_CONDITION HasUnlockedItems
static SELECTION_CONDITION SingleMultiUnitSymbol
static SELECTION_CONDITION SingleMultiBodyStyleSymbol
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
Schematic editor (Eeschema) main window.
const wxString & GetHighlightedConnection() const
void Rotate(const VECTOR2I &aCenter, bool aRotateCCW) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
VECTOR2I GetPosition() const override
wxString GetUntranslatedName() const
Get the untranslated field name for storage, variable look-up, etc.
wxString GetName(bool aUseDefaultName=true) const
Return the field name (not translated).
void SetPosition(const VECTOR2I &aPosition) override
void SetText(const wxString &aText) override
VECTOR2I GetParentPosition() const
A set of SCH_ITEMs (i.e., without duplicates).
Base class for any item which can be embedded within the SCHEMATIC container class,...
SCH_ITEM * Duplicate(bool addToParentGroup, SCH_COMMIT *aCommit=nullptr, bool doClone=false) const
Routine to create a new copy of given item.
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)
const SYMBOL * GetParentSymbol() const
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
virtual void MirrorHorizontally(int aCenter)
Mirror item horizontally about aCenter.
virtual void Move(const VECTOR2I &aMoveVector)
Move the item by aMoveVector to a new position.
void SetConnectivityDirty(bool aDirty=true)
void SetFieldsAutoplaced(AUTOPLACE_ALGO aAlgo)
virtual void Rotate(const VECTOR2I &aCenter, bool aRotateCCW)
Rotate the item around aCenter 90 degrees in the clockwise direction.
AUTOPLACE_ALGO GetFieldsAutoplaced() const
Return whether the fields have been automatically placed.
wxString GetClass() const override
Return the class name.
bool IsGroupableType() const
virtual std::vector< VECTOR2I > GetConnectionPoints() const
Add all the connection points for this item to aPoints.
bool IsType(const std::vector< KICAD_T > &aScanTypes) const override
Check whether the item is one of the listed types.
virtual void MirrorVertically(int aCenter)
Mirror item vertically about aCenter.
void AddFields(const std::vector< SCH_FIELD > &aFields)
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
SPIN_STYLE GetSpinStyle() const
void SetShape(LABEL_FLAG_SHAPE aShape)
LABEL_FLAG_SHAPE GetShape() const
void MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
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,...
void Rotate(const VECTOR2I &aCenter, bool aRotateCCW) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
VECTOR2I GetEndPoint() const
VECTOR2I GetStartPoint() const
const std::map< wxString, ALT > & GetAlternates() const
bool IsConnectable() const override
const wxString & GetName() const
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
void ClearAnnotationOfNewSheetPaths(SCH_SHEET_LIST &aInitialSheetPathList)
Clear the annotation for the symbols inside new sheetpaths when a complex hierarchy is modified and n...
bool IsExplicitJunction(const VECTOR2I &aPosition) const
Indicate that a junction dot is necessary at the given location.
EE_RTREE & Items()
Get the full RTree, usually for iterating.
const wxString & GetFileName() const
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.
void SetFileName(const wxString &aFileName)
Set the file name for this screen to aFileName.
void ClearAnnotation(SCH_SHEET_PATH *aSheetPath, bool aResetPrefix)
Clear the annotation for the symbols in aSheetPath on the screen.
void SetPosition(const VECTOR2I &aPos) override
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
void BuildSheetList(SCH_SHEET *aSheet, bool aCheckIntegrity)
Build the list of sheets and their sheet path from aSheet.
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
SCH_SCREEN * LastScreen()
wxString GetPageNumber() const
wxString PathHumanReadable(bool aUseShortRootName=true, bool aStripTrailingSeparator=false, bool aEscapeSheetNames=false) const
Return the sheet path in a human readable form made from the sheet names.
void SetPageNumber(const wxString &aPageNumber)
Set the sheet instance user definable page number.
void push_back(SCH_SHEET *aSheet)
Forwarded method from std::vector.
size_t size() const
Forwarded method from std::vector.
void pop_back()
Forwarded method from std::vector.
Define a sheet pin (label) used in sheets to create hierarchical schematics.
SHEET_SIDE GetSide() const
void SetSide(SHEET_SIDE aEdge)
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
void SetFileName(const wxString &aFilename)
wxString GetFileName() const
Return the filename corresponding to this sheet.
std::map< SCH_SHEET_PIN *, SCH_NO_CONNECT * > GetNoConnects() const
VECTOR2I GetRotationCenter() const
Rotating around the boundingBox's center can cause walking when the sheetname or filename is longer t...
void CleanupSheet()
Delete sheet label which do not have a corresponding hierarchical label.
void RemovePin(const SCH_SHEET_PIN *aSheetPin)
Remove aSheetPin from the sheet.
bool HasUndefinedPins() const
Check all sheet labels against schematic for undefined hierarchical labels.
SCH_SCREEN * GetScreen() const
const BOX2I GetBodyBoundingBox() const
Return a bounding box for the sheet body but not the fields.
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
void Rotate(const VECTOR2I &aCenter, bool aRotateCCW) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
wxString GetUnitDisplayName(int aUnit, bool aLabel) const override
Return the display name for a given unit aUnit.
bool ClearVariantSymbolOverride(const SCH_SHEET_PATH &aPath, const wxString &aVariantName)
Remove the alternate-symbol override for a given variant and sheet instance.
void SetVariantSymbolOverride(const SCH_SHEET_PATH &aPath, const wxString &aVariantName, const LIB_ID &aLibId)
Set the alternate-symbol override for a given variant and sheet instance.
bool IsMultiBodyStyle() const override
void AutoplaceFields(SCH_SCREEN *aScreen, AUTOPLACE_ALGO aAlgo) override
Automatically orient all the fields in the symbol.
void ClearCaches() override
std::optional< SCH_SYMBOL_VARIANT > GetVariant(const SCH_SHEET_PATH &aInstance, const wxString &aVariantName) const
wxString GetBodyStyleDescription(int aBodyStyle, bool aLabel) const override
void UpdatePins()
Updates the cache of SCH_PIN objects for each pin.
bool HasDeMorganBodyStyles() const override
int GetBodyStyleCount() const override
Return the number of body styles of the symbol.
void SetOrientation(int aOrientation)
Compute the new transform matrix based on aOrientation for the symbol which is applied to the current...
bool IsMissingLibSymbol() const
Check to see if the library symbol is set to the dummy library symbol.
const LIB_ID & GetLibId() const override
int GetOrientation() const override
Get the display symbol orientation.
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
void Rotate(const VECTOR2I &aCenter, bool aRotateCCW) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
bool IsPower() const override
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this symbol.
int GetMarginBottom() const
int GetLegacyTextMargin() const
int GetMarginLeft() const
int GetMarginRight() const
virtual void Rotate90(bool aClockwise)
virtual void MirrorSpinStyle(bool aLeftRight)
static SELECTION_CONDITION HasTypes(std::vector< KICAD_T > aTypes)
Create a functor that tests if among the selected items there is at least one of a given types.
static SELECTION_CONDITION HasType(KICAD_T aType)
Create a functor that tests if among the selected items there is at least one of a given type.
static bool NotEmpty(const SELECTION &aSelection)
Test if there are any items selected.
static SELECTION_CONDITION MoreThan(int aNumber)
Create a functor that tests if the number of selected items is greater than the value given as parame...
static bool Idle(const SELECTION &aSelection)
Test if there no items selected or being edited.
static bool IdleSelection(const SELECTION &aSelection)
Test if all selected items are not being edited.
static SELECTION_CONDITION Count(int aNumber)
Create a functor that tests if the number of selected items is equal to the value given as parameter.
static bool ShowAlways(const SELECTION &aSelection)
The default condition function (always returns true).
static SELECTION_CONDITION OnlyTypes(std::vector< KICAD_T > aTypes)
Create a functor that tests if the selected items are only of given types.
virtual void Add(EDA_ITEM *aItem)
A null aItem is ignored; the selection never holds null members.
virtual KIGFX::VIEW_ITEM * GetItem(unsigned int aIdx) const override
VECTOR2I GetReferencePoint() const
virtual VECTOR2I GetCenter() const
Returns the center point of the selection area bounding box.
virtual unsigned int GetSize() const override
Return the number of stored items.
int Size() const
Returns the number of selected parts.
std::deque< EDA_ITEM * > & Items()
std::vector< EDA_ITEM * > GetItemsSortedBySelectionOrder() const
bool OnlyContains(std::vector< KICAD_T > aList) const
Checks if all items in the selection have a type in aList.
bool Empty() const
Checks if there is anything selected.
bool HasReferencePoint() const
size_t CountType(KICAD_T aType) const
unsigned CCWRotationsTo(const SPIN_STYLE &aOther) const
Get CCW rotation needed to get to the given spin style.
The symbol library editor main window.
An interface to the global shared library manager that is schematic-specific and linked to one projec...
LIB_SYMBOL * LoadSymbol(const wxString &aNickname, const wxString &aName)
Load a LIB_SYMBOL having aName from the library given by aNickname.
Helper object to filter a list of libraries.
A modified version of the wxInfoBar class that allows us to:
void RemoveAllButtons()
Remove all the buttons that have been added by the user.
void ShowMessageFor(const wxString &aMessage, int aTime, int aFlags=wxICON_INFORMATION, MESSAGE_TYPE aType=WX_INFOBAR::MESSAGE_TYPE::GENERIC)
Show the infobar with the provided message and icon for a specific period of time.
void AddLink(const wxString &aLinkText, const std::function< void(wxHyperlinkEvent &)> &aFn)
Add a hypertext link to the infobar.
void AddCloseButton(const wxString &aTooltip=_("Hide this message."))
Add the default close button to the infobar on the right side.
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.
This file is part of the common library.
@ SYMBOL_PROPS_EDIT_SCHEMATIC_SYMBOL
@ SYMBOL_PROPS_WANT_EXCHANGE_SYMBOL
@ SYMBOL_PROPS_WANT_UPDATE_SYMBOL
@ SYMBOL_PROPS_WANT_SET_VARIANT_SYMBOL
@ SYMBOL_PROPS_EDIT_LIBRARY_SYMBOL
@ SYMBOL_PROPS_WANT_CLEAR_VARIANT_SYMBOL
static constexpr EDA_ANGLE ANGLE_90
static constexpr EDA_ANGLE ANGLE_VERTICAL
static constexpr EDA_ANGLE ANGLE_HORIZONTAL
#define IGNORE_PARENT_GROUP
#define IS_NEW
New item, just created.
#define SELECTED_BY_DRAG
Item was algorithmically selected as a dragged item.
#define STRUCT_DELETED
flag indication structures to be erased
#define ENDPOINT
ends. (Used to support dragging.)
#define STARTPOINT
When a line is selected, these flags indicate which.
@ ID_POPUP_SCH_PIN_TRICKS_HIER_LABEL
@ ID_POPUP_SCH_PIN_TRICKS_WIRE
@ ID_POPUP_SCH_ALT_PIN_FUNCTION
@ ID_POPUP_SCH_SELECT_UNIT1
@ ID_POPUP_SCH_SELECT_UNIT
@ ID_POPUP_SCH_SELECT_BODY_STYLE
@ ID_POPUP_SCH_PLACE_UNIT1
@ ID_POPUP_SCH_SELECT_BODY_STYLE1
@ ID_POPUP_SCH_PIN_TRICKS_NET_LABEL
@ ID_POPUP_SCH_PIN_TRICKS_NO_CONNECT
@ ID_POPUP_SCH_SELECT_UNIT_END
@ ID_POPUP_SCH_ALT_PIN_FUNCTION_END
@ ID_POPUP_SCH_PIN_TRICKS_GLOBAL_LABEL
@ ERCE_UNANNOTATED
Symbol has not been annotated.
@ ERCE_DUPLICATE_REFERENCE
More than one symbol with the same reference.
@ ERCE_EMPTY_LABEL_NAME
Label has an empty or whitespace-only name.
@ ERCE_FOOTPRINT_LINK_ISSUES
The footprint link is invalid, or points to a missing (or inactive) footprint or library.
@ ERCE_UNDEFINED_NETCLASS
A netclass was referenced but not defined.
@ ERCE_SIMULATION_MODEL
An error was found in the simulation model.
@ ERCE_LIB_SYMBOL_MISMATCH
Symbol doesn't match copy in library.
@ ERCE_LIB_SYMBOL_ISSUES
Symbol not found in active libraries.
@ ERCE_FOOTPRINT_FILTERS
The assigned footprint doesn't match the footprint filters.
@ FRAME_SCH_SYMBOL_EDITOR
@ LAYER_SCHEMATIC_DRAWINGSHEET
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
#define UNIMPLEMENTED_FOR(type)
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
void CollectOtherUnits(const wxString &aRef, int aUnit, const LIB_ID &aLibId, SCH_SHEET_PATH &aSheet, std::vector< SCH_SYMBOL * > *otherUnits)
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.
@ SYMBOL_FILTER_NON_POWER
SHEET_SIDE
Define the edge of the sheet that the sheet pin is positioned.
T * GetAppSettings(const char *aFilename)
wxString UnescapeString(const wxString &aSource)
wxString TitleCaps(const wxString &aString)
Capitalize the first letter in each word.
wxString EscapeString(const wxString &aSource, ESCAPE_CONTEXT aContext)
The Escape/Unescape routines use HTML-entity-reference-style encoding to handle characters which are:...
void AccumulateDescriptions(wxString &aDesc, const T &aItemCollection)
Build a comma-separated list from a collection of wxStrings.
Functors that can be used to figure out how the action controls should be displayed in the UI and if ...
wxString GetDefaultFieldName(FIELD_T aFieldId, TRANSLATION aTranslation)
Return a default symbol field name for a mandatory field type.
@ USER
The field ID hasn't been set yet; field is invalid.
@ FOOTPRINT
Field Name Module PCB, i.e. "16DIP300".
@ REFERENCE
Field Reference of part, i.e. "IC21".
@ VALUE
Field Value of part, i.e. "3.3K".
IbisParser parser & reporter
GR_TEXT_H_ALIGN_T
This is API surface mapped to common.types.HorizontalAlignment.
GR_TEXT_V_ALIGN_T
This is API surface mapped to common.types.VertialAlignment.
constexpr GR_TEXT_H_ALIGN_T GetFlippedAlignment(GR_TEXT_H_ALIGN_T aAlign)
Get the reverse alignment: left-right are swapped, others are unchanged.
void RotatePoint(int *pX, int *pY, const EDA_ANGLE &aAngle)
Calculate the new point of coord coord pX, pY, for a rotation center 0, 0.
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
@ SCH_ITEM_LOCATE_GRAPHIC_LINE_T
std::vector< VARIANT_COMPAT_RESULT > ValidateVariantSymbolCompatibility(const LIB_SYMBOL &aBase, const LIB_SYMBOL &aCandidate)
Check whether aCandidate can be used as a variant symbol override for aBase.
std::function< std::vector< VARIANT_COMPAT_RESULT >(const LIB_ID &)> SYMBOL_COMPAT_FUNC
Callback that evaluates variant symbol compatibility for a given candidate LIB_ID.
VECTOR2< int32_t > VECTOR2I
VECTOR2< double > VECTOR2D