67#include <dialogs/dialog_text_properties.h>
68#include <dialogs/dialog_tablecell_properties.h>
69#include <dialogs/dialog_table_properties.h>
75#include <wx/textdlg.h>
84 SetIcon( BITMAPS::component_select_unit );
107 for(
int ii = 0; ii < symbol->
GetLibSymbolRef()->GetUnitCount(); ii++ )
114 unit_text.Printf(
_(
"Unit %s" ), symbol->
SubReference( ii + 1,
false ) );
137 SetIcon( BITMAPS::component_select_unit );
162 if(
pin->GetAlt().IsEmpty() )
205 if( !
pin && !sheetPin )
233 wxASSERT_MSG( drawingTools,
"eeshema.InteractiveDrawing tool is not available" );
241 auto sheetHasUndefinedPins =
244 if( aSel.Size() == 1 && aSel.Front()->Type() ==
SCH_SHEET_T )
245 return static_cast<SCH_SHEET*
>( aSel.Front() )->HasUndefinedPins();
272 auto duplicateCondition =
281 auto orientCondition =
290 auto propertiesCondition =
293 if( aSel.GetSize() == 0 )
310 if( !firstItem || !eeSelection )
313 switch( firstItem->
Type() )
330 return aSel.GetSize() == 1;
335 if( std::all_of( aSel.Items().begin(), aSel.Items().end(),
339 &&
static_cast<const SCH_LINE*
>( item )->IsGraphicLine();
344 else if( std::all_of( aSel.Items().begin(), aSel.Items().end(),
352 else if( std::all_of( aSel.Items().begin(), aSel.Items().end(),
357 wxCHECK( schItem,
false );
373 auto autoplaceCondition =
387 static const std::vector<KICAD_T> allTextTypes = {
SCH_LABEL_T,
405 static const std::vector<KICAD_T> toCLabelTypes = {
SCH_LABEL_T,
414 static const std::vector<KICAD_T> toHLabelTypes = {
SCH_LABEL_T,
423 static const std::vector<KICAD_T> toGLabelTypes = {
SCH_LABEL_T,
432 static const std::vector<KICAD_T> toTextTypes = {
SCH_LABEL_T,
441 static const std::vector<KICAD_T> toTextBoxTypes = {
SCH_LABEL_T,
456 auto makeSymbolUnitMenu =
459 std::shared_ptr<SYMBOL_UNIT_MENU> menu = std::make_shared<SYMBOL_UNIT_MENU>();
460 menu->SetTool( tool );
461 tool->GetToolMenu().RegisterSubMenu( menu );
465 auto makePinFunctionMenu =
468 std::shared_ptr<ALT_PIN_FUNCTION_MENU> menu = std::make_shared<ALT_PIN_FUNCTION_MENU>();
469 menu->SetTool( tool );
470 tool->GetToolMenu().RegisterSubMenu( menu );
474 auto makePinTricksMenu =
477 std::shared_ptr<PIN_TRICKS_MENU> menu = std::make_shared<PIN_TRICKS_MENU>();
478 menu->SetTool( tool );
479 tool->GetToolMenu().RegisterSubMenu( menu );
483 auto makeTransformMenu =
487 menu->
SetTitle(
_(
"Transform Selection" ) );
497 auto makeAttributesMenu =
525 auto makeEditFieldsMenu =
529 menu->
SetTitle(
_(
"Edit Main Fields" ) );
538 auto makeConvertToMenu =
543 menu->
SetIcon( BITMAPS::right );
563 moveMenu.
AddMenu( makeTransformMenu(), orientCondition, 200 );
588 drawMenu.
AddMenu( makeTransformMenu(), orientCondition, 200 );
611 selToolMenu.
AddMenu( makeTransformMenu(), orientCondition, 200 );
623 selToolMenu.
AddMenu( makeConvertToMenu(), toChangeCondition, 200 );
676 int principalItemCount = 0;
683 commit = &localCommit;
685 for(
unsigned ii = 0; ii < selection.
GetSize(); ii++ )
692 principalItemCount++;
701 if( principalItemCount == 1 )
713 switch( head->
Type() )
719 symbol->
Rotate( rotPoint, !clockwise );
777 head->
Rotate( rotPoint, !clockwise );
799 head->
Rotate( rotPoint, !clockwise );
810 head->
Rotate( rotPoint, !clockwise );
816 head->
Rotate( rotPoint, !clockwise );
828 sheet->
Rotate( rotPoint, !clockwise );
847 for(
EDA_ITEM* edaItem : selection )
863 line->
Rotate( rotPoint, !clockwise );
890 field->
Rotate( rotPoint, !clockwise );
903 item->
Rotate( rotPoint, !clockwise );
927 if( !localCommit.
Empty() )
928 localCommit.
Push(
_(
"Rotate" ) );
944 bool connections =
false;
950 commit = &localCommit;
957 switch( item->
Type() )
1047 else if( selection.
GetSize() > 1 )
1051 for(
EDA_ITEM* edaItem : selection )
1053 item =
static_cast<SCH_ITEM*
>( edaItem );
1102 for(
EDA_ITEM* selected : selection )
1125 if( !localCommit.
Empty() )
1126 localCommit.
Push(
_(
"Mirror" ) );
1163 std::vector<SCH_FIELD>& aBFields,
1164 unsigned aFallbackRotationsCCW )
1166 std::set<wxString> handledKeys;
1175 const VECTOR2I bRelPos = bField.GetPosition() - bField.GetParentPosition();
1178 const EDA_ANGLE bTextAngle = bField.GetTextAngle();
1185 bField.SetPosition( bField.GetParentPosition() + aRelPos );
1186 bField.SetHorizJustify( aTextJustifyH );
1187 bField.SetVertJustify( aTextJustifyV );
1188 bField.SetTextAngle( aTextAngle );
1195 auto it = std::find_if( aBFields.begin(), aBFields.end(),
1198 return bField.GetCanonicalName() == name;
1201 if( it != aBFields.end() )
1205 swapFieldTextProps( aField, bField );
1210 for(
unsigned ii = 0; ii < aFallbackRotationsCCW; ii++ )
1217 handledKeys.insert(
name );
1224 const wxString bName = bField.GetCanonicalName();
1225 if( handledKeys.find( bName ) == handledKeys.end() )
1227 for(
unsigned ii = 0; ii < aFallbackRotationsCCW; ii++ )
1229 bField.Rotate( bField.GetParentPosition(),
false );
1255 if(
pin->GetParent() != parent )
1260 if( selection.
Size() < 2 )
1264 bool appendUndo = isMoving;
1265 bool connections =
false;
1267 for(
size_t i = 0; i < sorted.size() - 1; i++ )
1273 std::swap( aPos, bPos );
1286 std::swap( aSide, bSide );
1314 std::vector<SCH_FIELD>& aFields = aLabelBase.
GetFields();
1315 std::vector<SCH_FIELD>& bFields = bLabelBase.
GetFields();
1317 const unsigned rotationsAtoB = aSpinStyle.
CCWRotationsTo( bSpinStyle );
1327 std::swap( aOrient, bOrient );
1343 for(
EDA_ITEM* selected : selection )
1369 if( sourceItems.empty() )
1377 for(
const std::unique_ptr<SCH_ITEM>& item : sourceItems )
1381 bool restore_state =
false;
1412 const wxString originalFileName = sheet->
GetFileName();
1440 static_cast<SCH_SYMBOL*
>( newItem )->ClearAnnotation(
nullptr,
false );
1445 annotateStartNum,
false,
false, reporter );
1457 newItems.
Add( newItem );
1464 commit.
Push(
_(
"Repeat Item" ) );
1469 if( !newItems.
Empty() )
1472 for(
size_t ii = 1; ii < newItems.
GetSize(); ++ii )
1510 std::vector<VECTOR2I> pts;
1511 bool updateHierarchy =
false;
1532 pts.insert( pts.end(), tmp_pts.begin(), tmp_pts.end() );
1555 static_cast<SCH_FIELD*
>( sch_item )->SetVisible(
false );
1561 static_cast<SCH_TABLECELL*
>( sch_item )->SetText( wxEmptyString );
1587 commit.
Push(
_(
"Delete" ) );
1589 if( updateHierarchy )
1596#define HITTEST_THRESHOLD_PIXELS 5
1613 [
this](
const VECTOR2D& aPosition ) ->
bool
1652 [
this](
const int& aFinalState )
1686 caption.Printf(
_(
"Edit %s Field" ),
TitleCaps( translated_fieldname ) );
1691 caption.Printf(
_(
"Edit '%s' Field" ), aField->
GetName() );
1704 if( !commit.
Empty() )
1705 commit.
Push( caption );
1713 if( sel.
Size() != 1 )
1716 bool clearSelection = sel.
IsHover();
1758 clearSelection =
true;
1761 if( clearSelection )
1773 bool moving = head && head->
IsMoving();
1775 if( selection.
Empty() )
1778 std::vector<SCH_ITEM*> autoplaceItems;
1780 for(
unsigned ii = 0; ii < selection.
GetSize(); ii++ )
1785 autoplaceItems.push_back( item );
1790 for(
SCH_ITEM* sch_item : autoplaceItems )
1792 if( !moving && !sch_item->IsNew() )
1806 if( !commit.
Empty() )
1807 commit.
Push(
_(
"Autoplace Fields" ) );
1822 if( !selection.
Empty() )
1846 if( selection.
Empty() )
1865 if( !symbol->
IsNew() )
1870 if( symbol->
IsNew() )
1873 if( !commit.
Empty() )
1874 commit.
Push(
_(
"Change Body Style" ) );
1886 bool clearSelection = selection.
IsHover();
1888 if( selection.
Empty() )
1904 switch( curr_item->
Type() )
1913 if( selection.
Size() > 1 )
1919 switch( curr_item->
Type() )
1951 if( wxWindow* blocking_win =
editor->Kiway().GetBlockingDialog() )
1952 blocking_win->Close(
true );
1958 editor->LoadSymbolFromSchematic( symbol );
1969 if( wxWindow* blocking_win =
editor->Kiway().GetBlockingDialog() )
1970 blocking_win->Close(
true );
1994 bool isUndoable =
false;
1995 bool doClearAnnotation =
false;
1996 bool okPressed =
false;
1997 bool updateHierarchyNavigator =
false;
2008 &doClearAnnotation, &updateHierarchyNavigator );
2013 commit.
Push(
_(
"Edit Sheet Properties" ) );
2025 if( doClearAnnotation )
2041 if( updateHierarchyNavigator )
2070 std::vector<SCH_TABLECELL*> cells;
2084 tableDlg.ShowModal();
2118 clearSelection =
true;
2136 if( dlg.ShowModal() == wxID_OK )
2148 dlg.SetTitle(
_(
"Rule Area Properties" ) );
2159 std::deque<SCH_LINE*> lines;
2162 lines.push_back(
static_cast<SCH_LINE*
>( selItem ) );
2170 std::deque<SCH_JUNCTION*> junctions;
2173 junctions.push_back(
static_cast<SCH_JUNCTION*
>( selItem ) );
2184 std::deque<SCH_ITEM*> items;
2187 items.push_back(
static_cast<SCH_ITEM*
>( selItem ) );
2205 if( inspectionTool )
2215 wxFAIL_MSG( wxString(
"Cannot edit schematic item type " ) + curr_item->
GetClass() );
2220 if( clearSelection )
2235 for(
unsigned int i = 0; i < selection.GetSize(); ++i )
2239 if( item && item->
Type() != convertTo )
2250 switch( item->
Type() )
2270 txt =
_(
"<empty>" );
2281 txt =
text->GetText();
2282 href =
text->GetHyperlink();
2302 int textSize =
text->GetTextSize().y;
2345 auto getValidNetname =
2346 [](
const wxString& aText )
2348 wxString local_txt = aText;
2349 local_txt.Replace(
"\n",
"_" );
2350 local_txt.Replace(
"\r",
"_" );
2351 local_txt.Replace(
"\t",
"_" );
2355 local_txt.Replace(
" ",
"_" );
2360 if( local_txt.IsEmpty() )
2361 return _(
"<empty>" );
2389 newtext = new_label;
2414 newtext = new_label;
2439 newtext = new_label;
2453 SCH_FIELD netclass( position, 0, new_label, wxT(
"Netclass" ) );
2456 new_label->
GetFields().push_back( netclass );
2459 new_label->
SetShape( LABEL_FLAG_SHAPE::F_ROUND );
2463 newtext = new_label;
2483 bbox.
Inflate( -label->GetLabelBoxExpansion() );
2514 new_textbox->
SetEnd( botRight );
2517 newtext = new_textbox;
2526 wxCHECK2( newtext,
continue );
2537 wxCHECK2( eda_text && new_eda_text,
continue );
2552 if( label && new_label )
2561 std::vector<SCH_FIELD>& fields = new_label->
GetFields();
2563 for(
int ii = fields.size()-1; ii >= min_idx; ii-- )
2565 if( fields[ii].GetCanonicalName() == wxT(
"Intersheetrefs" ) )
2566 fields.erase( fields.begin() + ii );
2573 if( !item->
IsNew() )
2591 if( !commit.
Empty() )
2592 commit.
Push(
_(
"Change To" ) );
2594 if( selection.IsHover() )
2603 static std::vector<KICAD_T> justifiableItems = {
2612 if( selection.
GetSize() == 0 )
2621 commit = &localCommit;
2634 for(
EDA_ITEM* edaItem : selection )
2636 item =
static_cast<SCH_ITEM*
>( edaItem );
2643 setJustify(
static_cast<SCH_FIELD*
>( item ) );
2650 setJustify(
static_cast<SCH_TEXT*
>( item ) );
2661 setJustify( label );
2668 for(
EDA_ITEM* selected : selection )
2682 if( !localCommit.
Empty() )
2685 localCommit.
Push(
_(
"Left Justify" ) );
2687 localCommit.
Push(
_(
"Center Justify" ) );
2689 localCommit.
Push(
_(
"Right Justify" ) );
2704 std::vector<SCH_LINE*> lines;
2713 lines.push_back( line );
2724 if( lines.size() == 1 && line->HitTest( cursorPos ) )
2747 if( !lines.empty() )
2752 commit.
Push( isSlice ?
_(
"Slice Wire" ) :
_(
"Break Wire" ) );
2770 if( !
IsOK(
m_frame,
_(
"Do you wish to delete the unreferenced pins from this sheet?" ) ) )
2779 commit.
Push(
_(
"Cleanup Sheet Pins" ) );
2813 if( prevInstance.
size() )
2831 msg.Printf(
_(
"Enter page number for sheet path%s" ),
2832 ( sheetPath.Length() > 20 ) ?
"\n" + sheetPath :
" " + sheetPath );
2834 wxTextEntryDialog dlg(
m_frame, msg,
_(
"Edit Sheet Page Number" ), pageNumber );
2836 dlg.SetTextValidator( wxFILTER_ALPHANUMERIC );
2838 if( dlg.ShowModal() == wxID_CANCEL || dlg.GetValue() == instance.
GetPageNumber() )
2854 if( pageNumber != dlg.GetValue() )
2863 wxString aFileName = *aEvent.
Parameter<wxString*>();
2873 if( selection.
Empty() )
2898 if( !commit.
Empty() )
2899 commit.
Push(
_(
"Set Attribute" ) );
2910 if( selection.
Empty() )
2935 if( !commit.
Empty() )
2936 commit.
Push(
_(
"Clear Attribute" ) );
2947 if( selection.
Empty() )
2972 if( !commit.
Empty() )
2973 commit.
Push(
_(
"Toggle Attribute" ) );
constexpr EDA_IU_SCALE schIUScale
static TOOL_ACTION unselectAll
static TOOL_ACTION pickerTool
static TOOL_ACTION pasteSpecial
static TOOL_ACTION rightJustify
static TOOL_ACTION pageSettings
static TOOL_ACTION duplicate
static TOOL_ACTION doDelete
static TOOL_ACTION deleteTool
static TOOL_ACTION leftJustify
static TOOL_ACTION refreshPreview
static TOOL_ACTION selectAll
static TOOL_ACTION centerJustify
void SetPageNumber(const wxString &aPageNumber)
void SetOrigin(const Vec &pos)
const Vec & GetPosition() const
const Vec & GetOrigin() const
const Vec GetCenter() const
coord_type GetTop() const
BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
coord_type GetRight() const
coord_type GetLeft() const
coord_type GetBottom() const
void SetEnd(coord_type x, coord_type y)
int GetCount() const
Return the number of objects in the list.
COMMIT & Remove(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Notify observers that aItem has been removed.
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Create an undo entry for an item that has been already modified.
COMMIT & Added(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Remove a new item from the model.
bool Empty() const
Returns status of an item.
COMMIT & Removed(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Modify a given item in the model.
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
virtual void ClearUndoRedoList()
Clear the undo and redo list using ClearUndoORRedoList()
void ShowInfoBarWarning(const wxString &aWarningMsg, bool aShowCloseButton=false)
Show the WX_INFOBAR displayed on the top of the canvas with a message and a warning icon on the left ...
VECTOR2I GetNearestGridPosition(const VECTOR2I &aPosition) const
Return the nearest aGridSize location to aPosition.
VECTOR2I GetNearestHalfGridPosition(const VECTOR2I &aPosition) const
Return the nearest aGridSize / 2 location to aPosition.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
A base class for most all the KiCad significant classes used in schematics and boards.
virtual VECTOR2I GetPosition() const
virtual void SetPosition(const VECTOR2I &aPos)
virtual const BOX2I GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
EDA_ITEM_FLAGS GetEditFlags() const
void SetFlags(EDA_ITEM_FLAGS aMask)
KICAD_T Type() const
Returns the type of object.
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
virtual bool 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 wxString GetClass() const =0
Return the class name.
void SetEnd(const VECTOR2I &aEnd)
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
const EDA_ANGLE & GetTextAngle() const
void SetTextSize(VECTOR2I aNewSize, bool aEnforceMinTextSize=true)
virtual const wxString & GetText() const
Return the string associated with the text object.
virtual bool IsVisible() const
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 SetVisible(bool aVisible)
void SetTextThickness(int aWidth)
The TextThickness is that set by the user.
void SetHyperlink(wxString aLink)
GR_TEXT_V_ALIGN_T GetVertJustify() const
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
int GetTextThickness() const
void SetItalic(bool aItalic)
void SetFont(KIFONT::FONT *aFont)
VECTOR2I GetTextSize() const
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
PANEL_ANNOTATE m_AnnotatePanel
AUTOPLACE_FIELDS m_AutoplaceFields
static TOOL_ACTION mirrorV
static TOOL_ACTION unsetDNP
static TOOL_ACTION selectionActivate
Activation of the selection tool.
static TOOL_ACTION properties
static TOOL_ACTION toggleExcludeFromSimulation
static TOOL_ACTION unsetExcludeFromSimulation
static TOOL_ACTION setExcludeFromBoard
static TOOL_ACTION clearHighlight
static TOOL_ACTION toGLabel
static TOOL_ACTION toggleExcludeFromBoard
static TOOL_ACTION setDNP
static TOOL_ACTION cleanupSheetPins
static TOOL_ACTION clearSelection
Clears the current selection.
static TOOL_ACTION toText
static TOOL_ACTION placeClassLabel
static TOOL_ACTION showDeMorganAlternate
static TOOL_ACTION toggleExcludeFromBOM
static TOOL_ACTION autoplaceFields
static TOOL_ACTION showDeMorganStandard
static TOOL_ACTION rotateCCW
static TOOL_ACTION editValue
static TOOL_ACTION toLabel
static TOOL_ACTION toTextBox
static TOOL_ACTION breakWire
static TOOL_ACTION mirrorH
static TOOL_ACTION rotateCW
static TOOL_ACTION unsetExcludeFromBOM
static TOOL_ACTION editWithLibEdit
static TOOL_ACTION placeGlobalLabel
static TOOL_ACTION removeItemFromSel
static TOOL_ACTION ddAppendFile
static TOOL_ACTION placeHierLabel
static TOOL_ACTION addItemToSel
Selects an item (specified as the event parameter).
static TOOL_ACTION editPageNumber
static TOOL_ACTION changeSymbol
static TOOL_ACTION editFootprint
static TOOL_ACTION enterSheet
static TOOL_ACTION editReference
static TOOL_ACTION updateSymbols
static TOOL_ACTION placeSchematicText
static TOOL_ACTION setExcludeFromBOM
static TOOL_ACTION changeSymbols
static TOOL_ACTION setExcludeFromSimulation
static TOOL_ACTION unsetExcludeFromBoard
static TOOL_ACTION toCLabel
static TOOL_ACTION placeLabel
static TOOL_ACTION repeatDrawItem
static TOOL_ACTION toHLabel
static TOOL_ACTION editTextAndGraphics
static TOOL_ACTION toggleDNP
static TOOL_ACTION toggleDeMorgan
static TOOL_ACTION updateSymbol
void Collect(SCH_SCREEN *aScreen, const std::vector< KICAD_T > &aScanTypes, const VECTOR2I &aPos, int aUnit=0, int aConvert=0)
Scan a EDA_ITEM using this class's Inspector method which does the collection.
static const std::vector< KICAD_T > FieldOwners
static SELECTION_CONDITION SingleSymbol
static SELECTION_CONDITION AllPinsOrSheetPins
static SELECTION_CONDITION SingleMultiFunctionPin
static SELECTION_CONDITION SingleSymbolOrPower
static SELECTION_CONDITION SingleMultiUnitSymbol
static SELECTION_CONDITION MultipleSymbolsOrPower
DS_PROXY_VIEW_ITEM * GetDrawingSheet() const
VECTOR2D GetCursorPosition() const
Return the current cursor position in world coordinates.
void RecacheAllItems()
Rebuild GAL display lists.
bool IsLayerVisible(int aLayer) const
Return information about visibility of a particular layer.
KIWAY & Kiway() const
Return a reference to the KIWAY that this object has an opportunity to participate in.
A wxFrame capable of the OpenProjectFiles function, meaning it can load a portion of a KiCad project.
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
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.
virtual SETTINGS_MANAGER & GetSettingsManager() const
These are loaded from Eeschema settings but then overwritten by the project settings.
SCHEMATIC_SETTINGS & Settings() const
void AddToScreen(EDA_ITEM *aItem, SCH_SCREEN *aScreen=nullptr)
Add an item to the screen (and view) aScreen is the screen the item is located on,...
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
EESCHEMA_SETTINGS * eeconfig() const
void RemoveFromScreen(EDA_ITEM *aItem, SCH_SCREEN *aScreen)
Remove an item from the screen (and view) aScreen is the screen the item is located on,...
Object to handle a bitmap image that can be inserted in a schematic.
virtual void Push(const wxString &aMessage=wxT("A commit"), int aCommitFlags=0) override
Revert the commit by restoring the modified items state.
virtual void Revert() override
KIGFX::SCH_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
Schematic editor (Eeschema) main window.
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag and update other data struc...
bool EditSheetProperties(SCH_SHEET *aSheet, SCH_SHEET_PATH *aHierarchy, bool *aIsUndoable=nullptr, bool *aClearAnnotationNewItems=nullptr, bool *aUpdateHierarchyNavigator=nullptr)
Edit an existing sheet or add a new sheet to the schematic.
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
void SchematicCleanUp(SCH_COMMIT *aCommit, SCH_SCREEN *aScreen=nullptr)
Perform routine schematic cleaning including breaking wire and buses and deleting identical objects s...
void UpdateHierarchyNavigator(bool aRefreshNetNavigator=true)
Update the hierarchy navigation tree and history.
void SaveCopyInUndoList(SCH_SCREEN *aScreen, SCH_ITEM *aItemToCopy, UNDO_REDO aTypeCommand, bool aAppend, bool aDirtyConnectivity=true)
Create a copy of the current schematic item, and put it in the undo list.
void AnnotateSymbols(SCH_COMMIT *aCommit, ANNOTATE_SCOPE_T aAnnotateScope, ANNOTATE_ORDER_T aSortOption, ANNOTATE_ALGO_T aAlgoOption, bool aRecursive, int aStartNumber, bool aResetAnnotation, bool aRepairTimestamps, REPORTER &aReporter)
Annotate the symbols in the schematic that are not currently annotated.
SCH_SHEET_PATH & GetCurrentSheet() const
SCHEMATIC & Schematic() const
const std::vector< std::unique_ptr< SCH_ITEM > > & GetRepeatItems() const
Return the items which are to be repeated with the insert key.
void FlipBodyStyle(SCH_SYMBOL *aSymbol)
void OnPageSettingsChange() override
Called when modifying the page settings.
bool AddSheetAndUpdateDisplay(const wxString aFullFileName)
Add a sheet file into the current sheet and updates display.
bool CheckSheetForRecursion(SCH_SHEET *aSheet, SCH_SHEET_PATH *aCurrentSheet)
Verify that aSheet will not cause a recursion error in aCurrentSheet.
void UpdateLabelsHierarchyNavigator()
Update the hierarchy navigation tree labels.
void BreakSegment(SCH_COMMIT *aCommit, SCH_LINE *aSegment, const VECTOR2I &aPoint, SCH_LINE **aNewSegment, SCH_SCREEN *aScreen)
Break a single segment into two at the specified point.
const wxString & GetHighlightedConnection() const
void UpdateItem(EDA_ITEM *aItem, bool isAddOrDelete=false, bool aUpdateRtree=false) override
Mark an item for refresh.
void AddCopyForRepeatItem(const SCH_ITEM *aItem)
void TestDanglingEnds()
Test all of the connectable objects in the schematic for unused connection points.
void DeleteJunction(SCH_COMMIT *aCommit, SCH_ITEM *aItem)
Removes a given junction and heals any wire segments under the junction.
void SaveCopyForRepeatItem(const SCH_ITEM *aItem)
Clone aItem and owns that clone in this container.
Instances are attached to a symbol or sheet and provide a place for the symbol's value,...
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
Base class for any item which can be embedded within the SCHEMATIC container class,...
virtual bool IsConnectable() const
const SYMBOL * GetParentSymbol() const
SCHEMATIC * Schematic() const
Searches 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 ClearFieldsAutoplaced()
virtual void Rotate(const VECTOR2I &aCenter, bool aRotateCCW)
Rotate the item around aCenter 90 degrees in the clockwise direction.
virtual void AutoplaceFields(SCH_SCREEN *aScreen, bool aManual)
wxString GetClass() const override
Return the class name.
void AutoAutoplaceFields(SCH_SCREEN *aScreen)
Autoplace fields only if correct to do so automatically.
virtual bool HasLineStroke() const
Check if this schematic item has line stoke properties.
virtual std::vector< VECTOR2I > GetConnectionPoints() const
Add all the connection points for this item to aPoints.
SCH_ITEM * Duplicate(bool doClone=false) const
Routine to create a new copy of given item.
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
bool IsEndPoint(const VECTOR2I &aPoint) const
const wxString & GetName() const
std::map< wxString, ALT > & GetAlternates()
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
Indicates that a junction dot is necessary at the given location.
EE_RTREE & Items()
Gets 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...
wxString PathHumanReadable(bool aUseShortRootName=true, bool aStripTrailingSeparator=false) const
Return the sheet path in a human readable form made from the sheet names.
SCH_SCREEN * LastScreen()
wxString GetPageNumber() const
void SetPageNumber(const wxString &aPageNumber)
Set the sheet instance user definable page number.
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
void push_back(SCH_SHEET *aSheet)
Forwarded method from std::vector.
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
SCH_SHEET * GetParent() const
Get the parent sheet object of this sheet pin.
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.
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 SubReference(int aUnit, bool aAddSeparator=true) const
SCH_FIELD * GetField(MANDATORY_FIELD_T aFieldType)
Return a mandatory field in this 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
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
VECTOR2I GetPosition() const override
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
const std::deque< EDA_ITEM * > GetItems() const
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
T * GetAppSettings()
Returns a handle to the a given settings by type If the settings have already been loaded,...
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 GetExcludedFromBoard() const
bool GetExcludedFromBOM() const
void SetExcludedFromSim(bool aExcludeFromSim) override
Set or clear the exclude from simulation flag.
bool GetDNP() const
Set or clear the 'Do Not Populate' flaga.
void SetExcludedFromBOM(bool aExcludeFromBOM)
Set or clear the exclude from schematic bill of materials flag.
void SetExcludedFromBoard(bool aExcludeFromBoard)
Set or clear exclude from board netlist flag.
bool GetExcludedFromSim() const override
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_VERTICAL
static constexpr EDA_ANGLE ANGLE_HORIZONTAL
#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_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
@ 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.
PGM_BASE & Pgm()
The global Program "get" accessor.
ANNOTATE_ORDER_T
Schematic annotation order options.
@ ANNOTATE_SELECTION
Annotate the selection.
ANNOTATE_ALGO_T
Schematic annotation type options.
SHEET_SIDE
Define the edge of the sheet that the sheet pin is positioned.
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:...
constexpr int MilsToIU(int mils) const
int default_repeat_offset_x
int default_repeat_offset_y
int repeat_label_increment
static const wxString GetDefaultFieldName(int aFieldNdx, bool aTranslateForHI=false)
Return a default symbol field name for field aFieldNdx for all components.
@ FOOTPRINT_FIELD
Field Name Module PCB, i.e. "16DIP300".
@ VALUE_FIELD
Field Value of part, i.e. "3.3K".
@ REFERENCE_FIELD
Field Reference of part, i.e. "IC21".
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
@ SCH_ITEM_LOCATE_GRAPHIC_LINE_T
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
VECTOR2< int32_t > VECTOR2I