62#include <dialogs/dialog_text_properties.h>
63#include <dialogs/dialog_tablecell_properties.h>
64#include <dialogs/dialog_table_properties.h>
70#include <wx/textdlg.h>
100 const int unit = symbol->
GetUnit();
104 for(
int ii = 0; ii < nUnits; ii++ )
108 if( missingUnits.count( ii + 1 ) == 0 )
109 unit_text +=
_(
" (already placed)" );
122 if( !missingUnits.empty() )
126 for(
int unitNumber : missingUnits )
175 wxEmptyString, wxITEM_CHECK );
210 if(
pin->GetAlt().IsEmpty() || (
pin->GetAlt() == libPin->
GetName() ) )
258 if( !
pin && !sheetPin )
307 wxASSERT_MSG( drawingTools,
"eeshema.InteractiveDrawing tool is not available" );
314 auto sheetHasUndefinedPins =
317 if( aSel.Size() == 1 && aSel.Front()->Type() ==
SCH_SHEET_T )
327 wxString variant =
m_frame->Schematic().GetCurrentVariant();
333 switch( item->Type() )
336 if(
static_cast<const SCH_SYMBOL*
>( item )->GetDNP( sheet, variant ) )
344 if(
static_cast<const SCH_SHEET*
>( item )->GetDNP( sheet, variant ) )
364 return checked > 0 && unchecked == 0;
367 auto attribExcludeFromSimCond =
371 wxString variant =
m_frame->Schematic().GetCurrentVariant();
377 switch( item->Type() )
380 if(
static_cast<const SCH_SYMBOL*
>( item )->GetExcludedFromSim( sheet, variant ) )
388 if(
static_cast<const SCH_SHEET*
>( item )->GetExcludedFromSim( sheet, variant ) )
396 if(
static_cast<const SCH_RULE_AREA*
>( item )->GetExcludedFromSim() )
408 return checked > 0 && unchecked == 0;
411 auto attribExcludeFromBOMCond =
415 wxString variant =
m_frame->Schematic().GetCurrentVariant();
421 switch( item->Type() )
424 if(
static_cast<const SCH_SYMBOL*
>( item )->GetExcludedFromBOM( sheet, variant ) )
432 if(
static_cast<const SCH_SHEET*
>( item )->GetExcludedFromBOM( sheet, variant ) )
440 if(
static_cast<const SCH_RULE_AREA*
>( item )->GetExcludedFromBOM() )
452 return checked > 0 && unchecked == 0;
456 auto attribExcludeFromBoardCond =
460 wxString variant =
m_frame->Schematic().GetCurrentVariant();
466 switch( item->Type() )
469 if(
static_cast<const SCH_SYMBOL*
>( item )->GetExcludedFromBoard( sheet, variant ) )
477 if(
static_cast<const SCH_SHEET*
>( item )->GetExcludedFromBoard( sheet, variant ) )
485 if(
static_cast<const SCH_RULE_AREA*
>( item )->GetExcludedFromBoard() )
497 return checked > 0 && unchecked == 0;
500 auto attribExcludeFromPosFilesCond = [
this](
const SELECTION& aSel )
503 wxString variant =
m_frame->Schematic().GetCurrentVariant();
511 if(
static_cast<const SCH_SYMBOL*
>( item )->GetExcludedFromPosFiles( sheet, variant ) )
518 return checked > 0 && unchecked == 0;
539 auto duplicateCondition =
548 auto orientCondition =
559 auto propertiesCondition =
562 if( aSel.GetSize() == 0 )
579 if( !firstItem || !eeSelection )
582 switch( firstItem->
Type() )
600 return aSel.GetSize() == 1;
605 if( std::all_of( aSel.Items().begin(), aSel.Items().end(),
608 return item->Type() == SCH_LINE_T
609 && static_cast<const SCH_LINE*>( item )->IsGraphicLine();
614 else if( std::all_of( aSel.Items().begin(), aSel.Items().end(),
617 return item->Type() == SCH_JUNCTION_T;
622 else if( std::all_of( aSel.Items().begin(), aSel.Items().end(),
625 const SCH_ITEM* schItem = dynamic_cast<const SCH_ITEM*>( item );
627 wxCHECK( schItem, false );
629 return ( schItem->HasLineStroke() && schItem->IsConnectable() )
630 || item->Type() == SCH_JUNCTION_T;
643 auto autoplaceCondition =
657 static const std::vector<KICAD_T> allTextTypes = {
SCH_LABEL_T,
675 static const std::vector<KICAD_T> toCLabelTypes = {
SCH_LABEL_T,
684 static const std::vector<KICAD_T> toHLabelTypes = {
SCH_LABEL_T,
693 static const std::vector<KICAD_T> toGLabelTypes = {
SCH_LABEL_T,
702 static const std::vector<KICAD_T> toTextTypes = {
SCH_LABEL_T,
711 static const std::vector<KICAD_T> toTextBoxTypes = {
SCH_LABEL_T,
726 auto makeSymbolUnitMenu =
729 std::shared_ptr<SYMBOL_UNIT_MENU> menu = std::make_shared<SYMBOL_UNIT_MENU>();
730 menu->SetTool( tool );
731 tool->GetToolMenu().RegisterSubMenu( menu );
735 auto makeBodyStyleMenu =
738 std::shared_ptr<BODY_STYLE_MENU> menu = std::make_shared<BODY_STYLE_MENU>();
739 menu->SetTool( tool );
740 tool->GetToolMenu().RegisterSubMenu( menu );
744 auto makePinFunctionMenu =
747 std::shared_ptr<ALT_PIN_FUNCTION_MENU> menu = std::make_shared<ALT_PIN_FUNCTION_MENU>();
748 menu->SetTool( tool );
749 tool->GetToolMenu().RegisterSubMenu( menu );
753 auto makePinTricksMenu =
756 std::shared_ptr<PIN_TRICKS_MENU> menu = std::make_shared<PIN_TRICKS_MENU>();
757 menu->SetTool( tool );
758 tool->GetToolMenu().RegisterSubMenu( menu );
762 auto makeTransformMenu =
776 auto makeAttributesMenu =
791 auto makeEditFieldsMenu =
804 auto makeConvertToMenu =
823 std::shared_ptr<LOCK_CONTEXT_MENU> menu = std::make_shared<LOCK_CONTEXT_MENU>( tool );
824 tool->GetToolMenu().RegisterSubMenu( menu );
851 moveMenu.AddMenu( makeTransformMenu(), orientCondition, 200 );
852 moveMenu.AddMenu( makeAttributesMenu(),
S_C::HasTypes( attribTypes ), 200 );
857 moveMenu.AddSeparator();
878 drawMenu.
AddMenu( makeTransformMenu(), orientCondition, 200 );
902 selToolMenu.
AddMenu( makeTransformMenu(), orientCondition, 200 );
914 selToolMenu.
AddMenu( makeConvertToMenu(), toChangeCondition, 200 );
996 wxLogTrace(
"KICAD_SCH_MOVE",
"SCH_EDIT_TOOL::Rotate: start, clockwise=%d, selection size=%u", clockwise,
1003 int principalItemCount = 0;
1005 bool moving =
false;
1010 std::map<SCH_SHEET_PIN*, SCH_NO_CONNECT*> noConnects;
1013 commit = &localCommit;
1015 for(
unsigned ii = 0; ii < selection.
GetSize(); ii++ )
1022 principalItemCount++;
1031 if( principalItemCount == 1 )
1043 switch( head->
Type() )
1049 symbol->
Rotate( rotPoint, !clockwise );
1051 if(
m_frame->eeconfig()->m_AutoplaceFields.enable )
1115 head->
Rotate( rotPoint, !clockwise );
1137 head->
Rotate( rotPoint, !clockwise );
1145 rotPoint =
m_frame->GetNearestHalfGridPosition(
group->GetPosition() );
1147 group->Rotate( rotPoint, !clockwise );
1149 group->Move( rotPoint -
m_frame->GetNearestHalfGridPosition(
group->GetPosition() ) );
1158 rotPoint =
m_frame->GetNearestHalfGridPosition(
table->GetCenter() );
1160 table->Rotate( rotPoint, !clockwise );
1162 table->Move( rotPoint -
m_frame->GetNearestHalfGridPosition(
table->GetCenter() ) );
1168 head->
Rotate( rotPoint, clockwise );
1182 sheet->
Rotate( rotPoint, !clockwise );
1191 m_frame->UpdateItem( head,
false,
true );
1201 for(
EDA_ITEM* edaItem : selection )
1217 line->
Rotate( rotPoint, !clockwise );
1247 field->
Rotate( rotPoint, !clockwise );
1258 table->Rotate( rotPoint, !clockwise );
1261 table->Move( beforeCenter -
table->GetCenter() );
1269 sheet->
Rotate( rotPoint, !clockwise );
1274 item->
Rotate( rotPoint, !clockwise );
1276 wxLogTrace(
"KICAD_SCH_MOVE",
" SCH_EDIT_TOOL::Rotate: item type=%d rotated, pos (%d,%d) -> (%d,%d)",
1277 item->
Type(), posBefore.
x, posBefore.
y, posAfter.
x, posAfter.
y );
1280 m_frame->UpdateItem( item,
false,
true );
1284 wxLogTrace(
"KICAD_SCH_MOVE",
"SCH_EDIT_TOOL::Rotate: complete, moving=%d", moving );
1288 wxLogTrace(
"KICAD_SCH_MOVE",
"SCH_EDIT_TOOL::Rotate: posting refreshPreview" );
1293 for(
auto& [sheetPin, noConnect] : noConnects )
1295 if( noConnect->GetPosition() != sheetPin->GetTextPos() )
1297 commit->
Modify( noConnect, screen );
1298 noConnect->SetPosition( sheetPin->GetTextPos() );
1312 m_frame->Schematic().CleanUp( commit );
1314 if( !localCommit.
Empty() )
1315 localCommit.
Push(
_(
"Rotate" ) );
1328 if( selection.
GetSize() == 0 )
1333 bool connections =
false;
1339 std::map<SCH_SHEET_PIN*, SCH_NO_CONNECT*> noConnects;
1342 commit = &localCommit;
1344 if( selection.
GetSize() == 1 )
1349 switch( item->
Type() )
1419 noConnects =
static_cast<SCH_SHEET*
>( item )->GetNoConnects();
1442 m_frame->UpdateItem( item,
false,
true );
1444 else if( selection.
GetSize() > 1 )
1448 for(
EDA_ITEM* edaItem : selection )
1450 item =
static_cast<SCH_ITEM*
>( edaItem );
1494 m_frame->UpdateItem( item,
false,
true );
1499 for(
EDA_ITEM* selected : selection )
1508 for(
auto& [sheetPin, noConnect] : noConnects )
1510 if( noConnect->GetPosition() != sheetPin->GetTextPos() )
1512 commit->
Modify( noConnect, screen );
1513 noConnect->SetPosition( sheetPin->GetTextPos() );
1529 m_frame->Schematic().CleanUp( commit );
1532 if( !localCommit.
Empty() )
1533 localCommit.
Push(
_(
"Mirror" ) );
1549 unsigned aFallbackRotationsCCW )
1551 std::set<wxString> handledKeys;
1560 const VECTOR2I bRelPos = bField.GetPosition() - bField.GetParentPosition();
1563 const EDA_ANGLE bTextAngle = bField.GetTextAngle();
1570 bField.SetPosition( bField.GetParentPosition() + aRelPos );
1571 bField.SetHorizJustify( aTextJustifyH );
1572 bField.SetVertJustify( aTextJustifyV );
1573 bField.SetTextAngle( aTextAngle );
1580 auto it = std::find_if( aBFields.begin(), aBFields.end(),
1583 return bField.GetCanonicalName() == name;
1586 if( it != aBFields.end() )
1590 swapFieldTextProps( aField, bField );
1595 for(
unsigned ii = 0; ii < aFallbackRotationsCCW; ii++ )
1602 handledKeys.insert(
name );
1609 const wxString bName = bField.GetCanonicalName();
1610 if( handledKeys.find( bName ) == handledKeys.end() )
1612 for(
unsigned ii = 0; ii < aFallbackRotationsCCW; ii++ )
1614 bField.Rotate( bField.GetParentPosition(),
false );
1629 if( selection.
Size() < 2 )
1643 if( item->GetParent() != parent )
1649 bool connections =
false;
1655 commit = &localCommit;
1657 for(
size_t i = 0; i < sorted.size() - 1; i++ )
1669 std::swap( aPos, bPos );
1678 std::swap( aSide, bSide );
1710 std::vector<SCH_FIELD>& aFields = aLabelBase.
GetFields();
1711 std::vector<SCH_FIELD>& bFields = bLabelBase.
GetFields();
1713 const unsigned rotationsAtoB = aSpinStyle.
CCWRotationsTo( bSpinStyle );
1724 if( !aText || !bText )
1750 std::swap( aOrient, bOrient );
1763 m_frame->UpdateItem( a,
false,
true );
1764 m_frame->UpdateItem( b,
false,
true );
1780 if( !localCommit.
Empty() )
1781 localCommit.
Push(
_(
"Swap" ) );
1801 if( !
m_frame->eeconfig()->m_Input.allow_unconstrained_pin_swaps )
1807 if( selection.
Size() < 2 )
1820 if( item->GetParent() != parent )
1824 std::set<wxString> sharedSheetPaths;
1825 std::set<wxString> sharedProjectNames;
1828 &sharedProjectNames ) )
1832 std::set<wxString> friendlySheets;
1834 if( !sharedSheetPaths.empty() )
1837 if( !sharedProjectNames.empty() )
1841 if( projects.IsEmpty() )
1843 m_frame->ShowInfoBarError(
_(
"Pin swaps are disabled for symbols shared across other projects. "
1844 "Duplicate the sheet to edit pins independently." ) );
1849 wxString::Format(
_(
"Pin swaps are disabled for symbols shared across other projects (%s). "
1850 "Duplicate the sheet to edit pins independently." ),
1854 else if( !friendlySheets.empty() )
1859 wxString::Format(
_(
"Pin swaps are disabled for symbols used by multiple sheet instances (%s). "
1860 "Duplicate the sheet to edit pins independently." ),
1866 _(
"Pin swaps are disabled for shared symbols. Duplicate the sheet to edit pins independently." ) );
1872 bool connections =
false;
1878 commit = &localCommit;
1884 bool swappedLibPins =
false;
1886 for(
size_t i = 0; i < sorted.size() - 1; i++ )
1889 SCH_PIN* bPin =
static_cast<SCH_PIN*
>( sorted[( i + 1 ) % sorted.size()] );
1902 m_frame->UpdateItem( aPin,
false,
true );
1903 m_frame->UpdateItem( bPin,
false,
true );
1906 if( swappedLibPins )
1910 m_frame->UpdateItem( parentSymbol,
false,
true );
1923 m_frame->Schematic().CleanUp( commit );
1930 if( !localCommit.
Empty() )
1931 localCommit.
Push(
_(
"Swap Pins" ) );
1941 if( !aGraph || !aPin )
1949 const std::set<SCH_ITEM*>& items = sg->
GetItems();
1951 size_t pinCount = 0;
1959 switch( item->Type() )
1967 if( conn && conn->
IsNet() )
1993 if( orderedPins.size() < 2 )
2000 std::vector<SCH_LABEL_BASE*> labels;
2002 for(
EDA_ITEM* item : orderedPins )
2010 _(
"Each selected pin must have exactly one attached net label and no other pin connections." ) );
2014 labels.push_back( label );
2017 if( labels.size() >= 2 )
2024 for(
size_t i = 0; i < labels.size() - 1; ++i )
2028 wxString aText = a->
GetText();
2029 wxString bText = b->
GetText();
2034 commit.
Push(
_(
"Swap Pin Labels" ) );
2046 if( selectedUnits.size() < 2 )
2054 std::vector<std::vector<SCH_LABEL_BASE*>> symbolLabelVectors;
2058 std::vector<std::pair<VECTOR2I, SCH_LABEL_BASE*>> byPos;
2060 for(
SCH_PIN*
pin : symbol->GetPins( &sheetPath ) )
2066 m_frame->ShowInfoBarError(
_(
"Each pin of selected units must have exactly one attached net label and "
2067 "no other pin connections." ) );
2071 byPos.emplace_back(
pin->GetPosition(), label );
2075 std::sort( byPos.begin(), byPos.end(),
2076 [](
const auto& a,
const auto& b )
2078 if( a.first.x != b.first.x )
2079 return a.first.x < b.first.x;
2081 return a.first.y < b.first.y;
2085 std::vector<SCH_LABEL_BASE*> labels;
2087 for(
const auto& pr : byPos )
2088 labels.push_back( pr.second );
2090 symbolLabelVectors.push_back( labels );
2094 const size_t pinCount = symbolLabelVectors.front().size();
2099 for(
size_t pin = 0;
pin < pinCount;
pin++ )
2101 for(
auto& vec : symbolLabelVectors )
2104 wxString carry = symbolLabelVectors.back()[
pin]->GetText();
2106 for(
size_t i = 0; i < symbolLabelVectors.size(); i++ )
2115 if( !commit.
Empty() )
2116 commit.
Push(
_(
"Swap Unit Labels" ) );
2124 const std::vector<std::unique_ptr<SCH_ITEM>>& sourceItems =
m_frame->GetRepeatItems();
2126 if( sourceItems.empty() )
2135 for(
const std::unique_ptr<SCH_ITEM>& item : sourceItems )
2138 bool restore_state =
false;
2149 enteredGroup->AddItem( newItem );
2158 if( !label->IncrementLabel( cfg->m_Drawing.repeat_label_increment ) )
2159 m_frame->ShowInfoBarWarning(
_(
"Label value cannot go below zero" ),
true );
2172 schIUScale.MilsToIU( cfg->m_Drawing.default_repeat_offset_y ) ) );
2181 if(
m_frame->CheckSheetForRecursion( sheet, currentSheet ) )
2184 const wxString originalFileName = sheet->
GetFileName();
2189 restore_state = !
m_frame->EditSheetProperties( sheet, currentSheet );
2202 commit.Added( newItem,
m_frame->GetScreen() );
2211 if(
m_frame->eeconfig()->m_AnnotatePanel.automatic )
2213 static_cast<SCH_SYMBOL*
>( newItem )->ClearAnnotation(
nullptr,
false );
2216 true , annotateStartNum,
false,
false,
false,
2232 newItems.
Add( newItem );
2238 m_frame->Schematic().CleanUp( &commit );
2239 commit.Push(
_(
"Repeat Item" ) );
2243 if( !newItems.
Empty() )
2244 m_frame->SaveCopyForRepeatItem(
static_cast<SCH_ITEM*
>( newItems[0] ) );
2246 for(
size_t ii = 1; ii < newItems.
GetSize(); ++ii )
2247 m_frame->AddCopyForRepeatItem(
static_cast<SCH_ITEM*
>( newItems[ii] ) );
2260 std::deque<EDA_ITEM*> items =
m_selectionTool->GetSelection().GetItems();
2262 std::vector<VECTOR2I> pts;
2263 bool updateHierarchy =
false;
2284 pts.insert( pts.end(), tmp_pts.begin(), tmp_pts.end() );
2307 static_cast<SCH_FIELD*
>( sch_item )->SetVisible(
false );
2313 static_cast<SCH_TABLECELL*
>( sch_item )->SetText( wxEmptyString );
2350 m_frame->DeleteJunction( &commit, junction );
2353 commit.
Push(
_(
"Delete" ) );
2355 if( updateHierarchy )
2356 m_frame->UpdateHierarchyNavigator();
2380 caption.Printf(
_(
"Edit %s Field" ),
TitleCaps( fieldName ) );
2384 caption.Printf(
_(
"Edit '%s' Field" ), aField->
GetName() );
2404 if( !commit.
Empty() )
2405 commit.
Push( caption );
2413 if( sel.
Size() != 1 )
2416 bool clearSelection = sel.
IsHover();
2432 if( item ==
nullptr )
2464 clearSelection =
true;
2488 if( clearSelection )
2500 bool moving = head && head->
IsMoving();
2502 if( selection.
Empty() )
2505 std::vector<SCH_ITEM*> autoplaceItems;
2507 for(
unsigned ii = 0; ii < selection.
GetSize(); ii++ )
2512 autoplaceItems.push_back( item );
2517 for(
SCH_ITEM* sch_item : autoplaceItems )
2519 if( !moving && !sch_item->IsNew() )
2533 if( !commit.
Empty() )
2534 commit.
Push(
_(
"Autoplace Fields" ) );
2549 if( !selection.
Empty() )
2573 if( selection.
Empty() )
2579 if( !symbol->
IsNew() )
2587 m_frame->SelectBodyStyle( symbol, nextBodyStyle );
2589 if( symbol->
IsNew() )
2592 if( !commit.
Empty() )
2593 commit.
Push(
_(
"Change Body Style" ) );
2605 bool clearSelection = selection.
IsHover();
2607 if( selection.
Empty() )
2632 switch( curr_item->
Type() )
2639 std::deque<SCH_LINE*> lines;
2642 lines.push_back(
static_cast<SCH_LINE*
>( selItem ) );
2650 std::deque<SCH_JUNCTION*> junctions;
2653 junctions.push_back(
static_cast<SCH_JUNCTION*
>( selItem ) );
2664 std::deque<SCH_ITEM*> items;
2667 items.push_back(
static_cast<SCH_ITEM*
>( selItem ) );
2685 if( inspectionTool )
2693 std::vector<SCH_TABLECELL*> cells;
2715 if( selection.
Size() > 1 )
2721 if( clearSelection )
2730 switch( aItem->
Type() )
2751 if(
m_frame->eeconfig()->m_AutoplaceFields.enable )
2767 if( wxWindow* blocking_win =
editor->Kiway().GetBlockingDialog() )
2768 blocking_win->Close(
true );
2774 editor->LoadSymbolFromSchematic( symbol );
2785 if( wxWindow* blocking_win =
editor->Kiway().GetBlockingDialog() )
2786 blocking_win->Close(
true );
2810 bool isUndoable =
false;
2811 bool doClearAnnotation =
false;
2812 bool okPressed =
false;
2813 bool updateHierarchyNavigator =
false;
2823 okPressed =
m_frame->EditSheetProperties( sheet, &
m_frame->GetCurrentSheet(), &isUndoable, &doClearAnnotation,
2824 &updateHierarchyNavigator );
2830 commit.
Push(
_(
"Edit Sheet Properties" ) );
2834 std::vector<SCH_ITEM*> items;
2836 items.emplace_back( sheet );
2837 m_frame->Schematic().OnItemsRemoved( items );
2838 m_frame->Schematic().OnItemsAdded( items );
2840 m_frame->Schematic().RefreshHierarchy();
2841 m_frame->UpdateHierarchyNavigator();
2854 if( doClearAnnotation )
2868 m_frame->GetCanvas()->Refresh();
2870 if( updateHierarchyNavigator )
2871 m_frame->UpdateHierarchyNavigator();
2954 dlg.SetTitle(
_(
"Rule Area Properties" ) );
2970 wxFAIL_MSG( wxString(
"Cannot edit schematic item type " ) + aItem->
GetClass() );
2987 commit = &localCommit;
2989 for(
unsigned int i = 0; i < selection.GetSize(); ++i )
2993 if( item && item->
Type() != convertTo )
3004 wxCHECK2( sourceText,
continue );
3006 switch( item->
Type() )
3026 txt =
_(
"<empty>" );
3037 txt =
text->GetText();
3038 href =
text->GetHyperlink();
3055 int textSize =
text->GetTextSize().y;
3088 position =
m_frame->GetNearestGridPosition( position );
3098 auto getValidNetname =
3099 [](
const wxString& aText )
3101 wxString local_txt = aText;
3102 local_txt.Replace(
"\n",
"_" );
3103 local_txt.Replace(
"\r",
"_" );
3104 local_txt.Replace(
"\t",
"_" );
3108 local_txt.Replace(
" ",
"_" );
3113 if( local_txt.IsEmpty() )
3114 return _(
"<empty>" );
3142 newtext = new_label;
3167 newtext = new_label;
3192 newtext = new_label;
3209 new_label->
GetFields().push_back( netclass );
3216 newtext = new_label;
3236 bbox.
Inflate( -label->GetLabelBoxExpansion() );
3267 new_textbox->
SetEnd( botRight );
3270 newtext = new_textbox;
3279 wxCHECK2( newtext,
continue );
3290 wxCHECK2( eda_text && new_eda_text,
continue );
3305 if( label && new_label )
3314 return field.GetId() == FIELD_T::INTERSHEET_REFS
3315 && new_label->Type() != SCH_GLOBAL_LABEL_T;
3337 if( !localCommit.
Empty() )
3338 localCommit.
Push(
_(
"Change To" ) );
3340 if( selection.IsHover() )
3353 if( selection.
GetSize() == 0 )
3362 commit = &localCommit;
3375 for(
EDA_ITEM* edaItem : selection )
3377 item =
static_cast<SCH_ITEM*
>( edaItem );
3384 setJustify(
static_cast<SCH_FIELD*
>( item ) );
3391 setJustify(
static_cast<SCH_TEXT*
>( item ) );
3402 setJustify( label );
3405 m_frame->UpdateItem( item,
false,
true );
3409 for(
EDA_ITEM* selected : selection )
3423 if( !localCommit.
Empty() )
3426 localCommit.
Push(
_(
"Left Justify" ) );
3428 localCommit.
Push(
_(
"Center Justify" ) );
3430 localCommit.
Push(
_(
"Right Justify" ) );
3447 if( !
IsOK(
m_frame,
_(
"Do you wish to delete the unreferenced pins from this sheet?" ) ) )
3456 commit.
Push(
_(
"Cleanup Sheet Pins" ) );
3481 screen =
m_frame->GetScreen();
3490 if( prevInstance.
size() )
3498 screen =
m_frame->GetScreen();
3501 sheet =
m_frame->GetCurrentSheet().Last();
3508 msg.Printf(
_(
"Enter page number for sheet path%s" ),
3509 ( sheetPath.Length() > 20 ) ?
"\n" + sheetPath :
" " + sheetPath );
3511 wxTextEntryDialog dlg(
m_frame, msg,
_(
"Edit Sheet Page Number" ), pageNumber );
3513 dlg.SetTextValidator( wxFILTER_ALPHANUMERIC );
3515 if( dlg.ShowModal() == wxID_CANCEL || dlg.GetValue() == instance.
GetPageNumber() )
3520 commit.
Modify( sheet, screen );
3524 if( instance ==
m_frame->GetCurrentSheet() )
3526 m_frame->GetScreen()->SetPageNumber( dlg.GetValue() );
3527 m_frame->OnPageSettingsChange();
3530 commit.
Push( wxS(
"Change Sheet Page Number" ) );
3547 wxString* filename = aEvent.
Parameter<wxString*>();
3554 if( !
image->GetReferenceImage().ReadImageFile( *filename ) )
3556 wxMessageBox( wxString::Format(
_(
"Could not load image from '%s'." ), *filename ) );
3571 std::set<std::pair<SCH_ITEM*, SCH_SCREEN*>> collectedItems;
3577 collectedItems.insert( { symbol,
m_frame->GetScreen() } );
3581 if( symbol->IsAnnotated( &
m_frame->GetCurrentSheet() ) )
3583 wxString ref = symbol->GetRef( &
m_frame->GetCurrentSheet() );
3584 int unit = symbol->GetUnit();
3585 LIB_ID libId = symbol->GetLibId();
3590 std::vector<SCH_SYMBOL*> otherUnits;
3595 collectedItems.insert( { otherUnit, screen } );
3601 collectedItems.insert( { sheet,
m_frame->GetScreen() } );
3605 collectedItems.insert( { ruleArea,
m_frame->GetScreen() } );
3611 wxString variant =
m_frame->Schematic().GetCurrentVariant();
3612 bool new_state =
false;
3614 for(
const auto& [item,
_] : collectedItems )
3621 && !item->GetExcludedFromPosFiles( sheet, variant ) ) )
3628 for(
const auto& [item, screen] : collectedItems )
3630 commit.
Modify( item, screen );
3633 item->SetDNP( new_state, sheet, variant );
3636 item->SetExcludedFromSim( new_state, sheet, variant );
3639 item->SetExcludedFromBOM( new_state, sheet, variant );
3642 item->SetExcludedFromBoard( new_state, sheet, variant );
3645 item->SetExcludedFromPosFiles( new_state, sheet, variant );
3648 if( !commit.
Empty() )
3649 commit.
Push(
_(
"Toggle Attribute" ) );
3664 return _(
"Edit Symbol Properties..." );
3681 return _(
"Edit Netclasses..." );
3684 return wxEmptyString;
3749 if( selection.
Empty() )
3752 if( selection.
Empty() )
3763 if( schItem->IsLocked() )
3772 wxString commitMsg = ( aMode ==
ON ) ?
_(
"Lock" ) :
_(
"Unlock" );
3785 schItem->SetLocked( aMode ==
ON );
3789 if( !commit.
Empty() )
3791 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 generates 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
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.
int GetUnitCount() const override
static bool ParseBusGroup(const wxString &aGroup, wxString *name, std::vector< wxString > *aMemberList)
Parse a bus group label into the name and a list of components.
A singleton reporter that reports to nowhere.
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 setExcludeFromPosFiles
static TOOL_ACTION cycleBodyStyle
static TOOL_ACTION mirrorH
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.
void ShowSchematicSetupDialog(const wxString &aInitialPage=wxEmptyString)
EDA_ITEM * ResolveItem(const KIID &aId, bool aAllowNullptrReturn=false) const override
Fetch an item by KIID.
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 GetCanonicalName() const
Get a non-language-specific name for a field which can be used for storage, variable look-up,...
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 IsMultiBodyStyle() const override
void AutoplaceFields(SCH_SCREEN *aScreen, AUTOPLACE_ALGO aAlgo) override
Automatically orient all the fields in the symbol.
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)
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.
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Display a yes/no dialog with aMessage and returns the user response.
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_EDIT_LIBRARY_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_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.
@ 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, bool aTranslateForHI)
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
std::vector< std::vector< std::string > > table
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
VECTOR2< int32_t > VECTOR2I
VECTOR2< double > VECTOR2D