61#include <dialogs/dialog_text_properties.h>
64#include <dialogs/dialog_table_properties.h>
69#include <wx/filedlg.h>
77 m_lastTextBold( false ),
78 m_lastTextItalic( false ),
91 m_mruPath( wxEmptyString ),
92 m_lastAutoLabelRotateOnPlacement( false ),
93 m_inDrawingTool( false )
102 auto belowRootSheetCondition =
119 std::vector<PICKED_SYMBOL>* historyList =
nullptr;
120 bool ignorePrimePosition =
false;
153 filter.FilterPowerSymbols(
true );
157 wxFAIL_MSG(
"PlaceSymbol(): unexpected request" );
182 : KICURSOR::COMPONENT );
193 existingRefs.
Clear();
215 existingRefs,
false, &hierarchy );
220 for(
size_t i = 0; i < refs.
GetCount(); i++ )
221 existingRefs.
AddItem( refs[i] );
250 ignorePrimePosition =
true;
258 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
264 bool isSyntheticClick = symbol && evt->IsActivate() && evt->HasPosition()
267 if( evt->IsCancelInteractive() || ( symbol && evt->IsAction( &
ACTIONS::undo ) ) )
281 else if( evt->IsActivate() && !isSyntheticClick )
283 if( symbol && evt->IsMoveTool() )
286 evt->SetPassEvent(
false );
293 evt->SetPassEvent(
false );
297 if( evt->IsMoveTool() )
308 else if( evt->IsClick(
BUT_LEFT ) || evt->IsDblClick(
BUT_LEFT ) || isSyntheticClick )
318 std::vector<LIB_SYMBOL*> part_list;
322 for(
SCH_ITEM* item : sheet.LastScreen()->Items() )
331 part_list.push_back( libSymbol );
336 sort( part_list.begin(), part_list.end() );
337 part_list.erase( unique( part_list.begin(), part_list.end() ), part_list.end() );
339 std::vector<PICKED_SYMBOL> alreadyPlaced;
343 pickedSymbol.
LibId = libSymbol->GetLibId();
344 alreadyPlaced.push_back( pickedSymbol );
362 if( evt->IsPrime() && !ignorePrimePosition )
364 cursorPos =
grid.Align( evt->Position(), GRID_HELPER_GRIDS::GRID_CONNECTABLE );
371 GRID_HELPER_GRIDS::GRID_CONNECTABLE );
382 existingRefs.
AddItem( placedSymbolReference );
402 commit.
Added( symbol, screen );
408 commit.
Push(
_(
"Add Symbol" ) );
415 int new_unit = symbol->
GetUnit();
431 nextSymbol->
SetUnit( new_unit );
438 addSymbol( nextSymbol );
446 existingRefs.
AddItem( placedSymbolReference );
527 bool immediateMode =
image !=
nullptr;
528 bool ignorePrimePosition =
false;
591 ignorePrimePosition =
true;
599 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
605 bool isSyntheticClick =
image && evt->IsActivate() && evt->HasPosition()
606 && evt->Matches( aEvent );
628 else if( evt->IsActivate() && !isSyntheticClick )
630 if(
image && evt->IsMoveTool() )
633 evt->SetPassEvent(
false );
640 evt->SetPassEvent(
false );
644 if( evt->IsMoveTool() )
655 else if( evt->IsClick(
BUT_LEFT ) || evt->IsDblClick(
BUT_LEFT ) || isSyntheticClick )
662 _(
"Image Files" ) + wxS(
" " ) + wxImage::GetImageExtWildcard(),
665 if( dlg.ShowModal() != wxID_OK )
671 if( evt->IsPrime() && !ignorePrimePosition )
673 cursorPos =
grid.Align( evt->Position() );
682 wxString fullFilename = dlg.GetPath();
685 if( wxFileExists( fullFilename ) )
688 if( !
image || !
image->ReadImageFile( fullFilename ) )
690 wxMessageBox(
_(
"Could not load image from '%s'." ), fullFilename );
713 commit.
Push(
_(
"Add Image" ) );
752 image->SetPosition( cursorPos );
794 int dlgResult = dlg.ShowModal();
798 if( dlgResult != wxID_OK )
804 wxMessageBox(
_(
"No graphic items found in file." ) );
811 std::vector<SCH_ITEM*> newItems;
812 std::vector<SCH_ITEM*> selectedItems;
816 for( std::unique_ptr<EDA_ITEM>& ptr : list )
819 wxCHECK2( item,
continue );
821 newItems.push_back( item );
822 selectedItems.push_back( item );
834 commit.
Push(
_(
"Import Graphic" ) );
843 EDA_ITEMS selItems( selectedItems.begin(), selectedItems.end() );
848 auto setCursor = [&]()
868 for(
SCH_ITEM* item : selectedItems )
871 currentOffset +=
delta;
881 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
886 if( evt->IsCancelInteractive() || evt->IsActivate() )
895 else if( evt->IsMotion() )
897 delta = cursorPos - currentOffset;
899 for(
SCH_ITEM* item : selectedItems )
902 currentOffset +=
delta;
916 commit.
Push(
_(
"Import Graphic" ) );
944 bool loggedInfoBarError =
false;
945 wxString description;
947 bool allowRepeat =
false;
973 description =
_(
"Add No Connect Flag" );
980 description =
_(
"Add Junction" );
986 description =
_(
"Add Wire to Bus Entry" );
991 wxASSERT_MSG(
false,
"Unknown item type in SCH_DRAWING_TOOLS::SingleClickPlace" );
1029 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
1031 cursorPos = evt->IsPrime() ? evt->Position() : controls->
GetMousePosition();
1032 cursorPos =
grid.BestSnapAnchor( cursorPos,
grid.GetItemGrid( previewItem ),
nullptr );
1035 if( evt->IsCancelInteractive() )
1040 else if( evt->IsActivate() )
1042 if( evt->IsMoveTool() )
1055 if( !screen->
GetItem( cursorPos, 0, type ) )
1062 "wires and/or pins." ) );
1063 loggedInfoBarError =
true;
1066 else if( loggedInfoBarError )
1082 commit.
Added( newItem, screen );
1086 commit.
Push( description );
1139 std::deque<SCH_ITEM*> strokeItems;
1140 strokeItems.push_back( previewItem );
1148 std::deque<SCH_JUNCTION*> junctions;
1149 junctions.push_back(
static_cast<SCH_JUNCTION*
>( previewItem ) );
1164 evt->SetPassEvent();
1169 evt->SetPassEvent();
1202 SCHEMATIC* schematic = getModel<SCHEMATIC>();
1211 textItem =
new SCH_TEXT( aPosition );
1216 textItem = labelItem;
1226 labelItem->
GetFields().emplace_back(
SCH_FIELD( {0,0}, 0, labelItem, wxT(
"Netclass" ) ) );
1227 labelItem->
GetFields().back().SetItalic(
true );
1228 labelItem->
GetFields().back().SetVisible(
true );
1229 textItem = labelItem;
1236 textItem = labelItem;
1244 textItem = labelItem;
1252 wxFAIL_MSG(
"SCH_EDIT_FRAME::CreateNewText() unknown layer type" );
1291 else if( !netName.IsEmpty() )
1352 pin->SetText( std::to_string( aSheet->
GetPins().size() + 1 ) );
1354 pin->SetPosition( aPosition );
1355 pin->ClearSelected();
1368 bool ignorePrimePosition =
false;
1371 wxString description;
1402 else if( isGlobalLabel )
1404 else if( isNetLabel )
1406 else if( isClassLabel )
1408 else if( isHierLabel )
1414 auto updatePreview =
1448 && ( isText || isGlobalLabel || isHierLabel || isClassLabel || isNetLabel ) )
1451 ignorePrimePosition =
true;
1459 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
1462 cursorPos =
grid.BestSnapAnchor( cursorPos, snapGrid, item );
1466 bool isSyntheticClick = item && evt->IsActivate() && evt->HasPosition()
1469 if( evt->IsCancelInteractive() || evt->IsAction( &
ACTIONS::undo ) )
1483 else if( evt->IsActivate() && !isSyntheticClick )
1485 if( item && evt->IsMoveTool() )
1488 evt->SetPassEvent(
false );
1495 evt->SetPassEvent(
false );
1499 if( evt->IsPointEditor() )
1503 else if( evt->IsMoveTool() )
1514 else if( evt->IsClick(
BUT_LEFT ) || evt->IsDblClick(
BUT_LEFT ) || isSyntheticClick )
1524 description =
_(
"Add Text" );
1526 else if( isHierLabel )
1533 SCHEMATIC* schematic = getModel<SCHEMATIC>();
1551 description =
_(
"Add Hierarchical Label" );
1553 else if( isNetLabel )
1556 description =
_(
"Add Label" );
1558 else if( isGlobalLabel )
1561 description =
_(
"Add Label" );
1563 else if( isClassLabel )
1566 description =
_(
"Add Label" );
1568 else if( isSheetPin )
1581 + wxPoint( 20, 20 ) );
1594 pin->SetText( label->GetText() );
1595 pin->SetShape( label->GetShape() );
1599 description =
_(
"Add Sheet Pin" );
1605 if( evt->IsPrime() && !ignorePrimePosition )
1607 cursorPos =
grid.Align( evt->Position() );
1614 cursorPos =
grid.BestSnapAnchor( cursorPos, snapGrid, item );
1657 commit.
Push( description );
1689 else if( item && evt->IsSelectionEvent() )
1694 if( selection.
GetSize() == 1 )
1735 evt->SetPassEvent();
1760 SCHEMATIC* schematic = getModel<SCHEMATIC>();
1765 wxString description;
1815 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
1821 bool isSyntheticClick = item && evt->IsActivate() && evt->HasPosition()
1824 if( evt->IsCancelInteractive() || ( item && evt->IsAction( &
ACTIONS::undo ) ) )
1836 else if( evt->IsActivate() && !isSyntheticClick )
1838 if( item && evt->IsMoveTool() )
1841 evt->SetPassEvent(
false );
1848 if( evt->IsPointEditor() )
1852 else if( evt->IsMoveTool() )
1863 else if( evt->IsClick(
BUT_LEFT ) && !item )
1886 description =
_(
"Add Text Box" );
1895 description = wxString::Format(
_(
"Add %s" ), item->EDA_SHAPE::GetFriendlyName() );
1904 else if( item && ( evt->IsClick(
BUT_LEFT )
1950 commit.
Push( wxString::Format(
_(
"Draw %s" ), item->
GetClass() ) );
1981 else if( evt->IsDblClick(
BUT_LEFT ) && !item )
1999 evt->SetPassEvent();
2020 long addedSheetPageNo;
2022 if( aAddedSheet.
GetPageNumber().ToLong( &addedSheetPageNo ) )
2023 pageNo = addedSheetPageNo + 1;
2025 pageNo = (signed)( fullHierarchy.size() - instances.size() + 1 );
2029 if( sheet == aAddedSheet )
2032 sheet.SetPageNumber( wxString::Format( wxS(
"%ld" ), pageNo++ ) );
2039 SCHEMATIC* schematic = getModel<SCHEMATIC>();
2090 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
2096 bool isSyntheticClick = table && evt->IsActivate() && evt->HasPosition()
2099 if( evt->IsCancelInteractive() || ( table && evt->IsAction( &
ACTIONS::undo ) ) )
2111 else if( evt->IsActivate() && !isSyntheticClick )
2113 if( table && evt->IsMoveTool() )
2116 evt->SetPassEvent(
false );
2123 if( evt->IsPointEditor() )
2127 else if( evt->IsMoveTool() )
2138 else if( evt->IsClick(
BUT_LEFT ) && !table )
2153 else if( table && ( evt->IsClick(
BUT_LEFT )
2169 commit.
Push(
_(
"Draw Table" ) );
2187 VECTOR2I requestedSize( cursorPos - origin );
2189 int colCount = std::max( 1, requestedSize.
x / ( fontSize * 15 ) );
2190 int rowCount = std::max( 1, requestedSize.
y / ( fontSize * 2 ) );
2192 VECTOR2I cellSize( std::max( gridSize.
x * 5, requestedSize.
x / colCount ),
2193 std::max( gridSize.
y * 2, requestedSize.
y / rowCount ) );
2195 cellSize.
x =
KiROUND( (
double) cellSize.
x / gridSize.
x ) * gridSize.
x;
2196 cellSize.
y =
KiROUND( (
double) cellSize.
y / gridSize.
y ) * gridSize.
y;
2201 for(
int col = 0; col < colCount; ++col )
2204 for(
int row = 0; row < rowCount; ++row )
2208 for(
int col = 0; col < colCount; ++col )
2221 else if( evt->IsDblClick(
BUT_LEFT ) && !table )
2239 evt->SetPassEvent();
2302 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
2308 bool isSyntheticClick = sheet && evt->IsActivate() && evt->HasPosition()
2311 if( evt->IsCancelInteractive() || ( sheet && evt->IsAction( &
ACTIONS::undo ) ) )
2325 else if( evt->IsActivate() && !isSyntheticClick )
2327 if( sheet && evt->IsMoveTool() )
2330 evt->SetPassEvent(
false );
2337 evt->SetPassEvent(
false );
2341 if( evt->IsPointEditor() )
2345 else if( evt->IsMoveTool() )
2356 else if( !sheet && ( evt->IsClick(
BUT_LEFT ) || evt->IsDblClick(
BUT_LEFT ) ) )
2361 if( selection.
Size() == 1
2370 else if( evt->IsDblClick(
BUT_LEFT ) )
2392 else if( sheet && ( evt->IsClick(
BUT_LEFT )
2409 commit.
Push(
"Draw Sheet" );
2462 evt->SetPassEvent();
2493 if( !sheetPaths.size() )
2497 m_frame, std::move( sheetPaths ),
2498 std::make_shared<SHEET_SYNCHRONIZATION_AGENT>(
2508 commit.
Push(
_(
"Modify sheet pin" ) );
2514 commit.
Push(
_(
"Modify schematic item" ) );
2526 selectionTool->AddItemToSel( aItem,
true );
2596 static const std::function<void( std::list<SCH_SHEET_PATH>&,
SCH_SCREEN*,
2598 getSheetChildren = []( std::list<SCH_SHEET_PATH>& aPaths,
SCH_SCREEN* aScene,
2599 std::set<SCH_SCREEN*>& aVisited,
SCH_SHEET_PATH const& aCurPath )
2601 if( ! aScene || aVisited.find(aScene) != aVisited.end() )
2604 std::vector<SCH_ITEM*> sheetChildren;
2605 aScene->GetSheets( &sheetChildren );
2606 aVisited.insert( aScene );
2608 for(
SCH_ITEM* child : sheetChildren )
2613 aPaths.push_back( cp );
2614 getSheetChildren( aPaths, sheet->
GetScreen(), aVisited, cp );
2618 std::list<SCH_SHEET_PATH> sheetPaths;
2619 std::set<SCH_SCREEN*> visited;
constexpr EDA_IU_SCALE schIUScale
static TOOL_ACTION cancelInteractive
static TOOL_ACTION duplicate
static TOOL_ACTION activatePointEditor
static TOOL_ACTION doDelete
static TOOL_ACTION refreshPreview
static TOOL_ACTION finishInteractive
bool Contains(const Vec &aPoint) const
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.
COMMIT & Add(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Notify observers that aItem has been added.
std::list< std::unique_ptr< EDA_ITEM > > & GetImportedItems()
bool IsPlacementInteractive()
void ShowInfoBarMsg(const wxString &aMsg, bool aShowCloseButton=false)
Show the WX_INFOBAR displayed on the top of the canvas with a message and an info icon on the left of...
void ShowInfoBarError(const wxString &aErrorMsg, bool aShowCloseButton=false, WX_INFOBAR::MESSAGE_TYPE aType=WX_INFOBAR::MESSAGE_TYPE::GENERIC)
Show the WX_INFOBAR displayed on the top of the canvas with a message and an error icon on the left o...
WX_INFOBAR * GetInfoBar()
void SetMsgPanel(const std::vector< MSG_PANEL_ITEM > &aList)
Clear the message panel and populates it with the contents of aList.
VECTOR2I GetNearestGridPosition(const VECTOR2I &aPosition) const
Return the nearest aGridSize location to aPosition.
void SetCurrentCursor(KICURSOR aCursor)
Set the current cursor shape for this panel.
A base class for most all the KiCad significant classes used in schematics and boards.
virtual void SetPosition(const VECTOR2I &aPos)
virtual const BOX2I GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
EDA_ITEM_FLAGS GetEditFlags() const
void SetFlags(EDA_ITEM_FLAGS aMask)
KICAD_T Type() const
Returns the type of object.
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
virtual bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const
Compare the item against the search criteria in aSearchData.
virtual void SetParent(EDA_ITEM *aParent)
virtual EDA_ITEM * Clone() const
Create a duplicate of this item with linked list members set to NULL.
FILL_T GetFillMode() const
void SetFillColor(const COLOR4D &aColor)
COLOR4D GetFillColor() const
void SetEnd(const VECTOR2I &aEnd)
const EDA_ANGLE & GetTextAngle() const
void SetTextSize(VECTOR2I aNewSize, bool aEnforceMinTextSize=true)
virtual const wxString & GetText() const
Return the string associated with the text object.
void SetVertJustify(GR_TEXT_V_ALIGN_T aType)
GR_TEXT_H_ALIGN_T GetHorizJustify() const
GR_TEXT_V_ALIGN_T GetVertJustify() const
virtual void SetText(const wxString &aText)
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
void SetItalic(bool aItalic)
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
PANEL_ANNOTATE m_AnnotatePanel
PANEL_SYM_CHOOSER m_SymChooserPanel
AUTOPLACE_FIELDS m_AutoplaceFields
static TOOL_ACTION mirrorV
static TOOL_ACTION properties
static TOOL_ACTION addItemsToSel
Selects a list of items (specified as the event parameter)
static TOOL_ACTION changeSheet
static TOOL_ACTION drawTable
static TOOL_ACTION syncAllSheetsPins
static TOOL_ACTION placeSymbol
static TOOL_ACTION clearSelection
Clears the current selection.
static TOOL_ACTION placeClassLabel
static TOOL_ACTION drawCircle
static TOOL_ACTION rotateCCW
static TOOL_ACTION placePower
static TOOL_ACTION placeSheetPin
static TOOL_ACTION mirrorH
static TOOL_ACTION syncSheetPins
static TOOL_ACTION rotateCW
static TOOL_ACTION importGraphics
static TOOL_ACTION leaveSheet
static TOOL_ACTION placeGlobalLabel
static TOOL_ACTION placeHierLabel
static TOOL_ACTION drawTextBox
static TOOL_ACTION drawRectangle
static TOOL_ACTION placeImage
static TOOL_ACTION enterSheet
static TOOL_ACTION placeSchematicText
static TOOL_ACTION drawArc
static TOOL_ACTION drawSheet
static TOOL_ACTION placeLabel
static TOOL_ACTION repeatDrawItem
static TOOL_ACTION placeBusWireEntry
static TOOL_ACTION placeJunction
static TOOL_ACTION placeNoConnect
EE_TYPE Overlapping(const BOX2I &aRect) const
A color representation with 4 components: red, green, blue, alpha.
An interface for classes handling user events controlling the view behavior such as zooming,...
virtual void CaptureCursor(bool aEnabled)
Force the cursor to stay within the drawing panel area.
virtual void ForceCursorPosition(bool aEnabled, const VECTOR2D &aPosition=VECTOR2D(0, 0))
Place the cursor immediately at a given point.
virtual void ShowCursor(bool aEnabled)
Enable or disables display of cursor.
virtual void WarpMouseCursor(const VECTOR2D &aPosition, bool aWorldCoordinates=false, bool aWarpView=false)=0
If enabled (.
virtual void SetCrossHairCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true)=0
Move the graphic crosshair cursor to the requested position expressed in world coordinates.
VECTOR2D GetCursorPosition() const
Return the current cursor position in world coordinates.
virtual VECTOR2D GetMousePosition(bool aWorldCoordinates=true) const =0
Return the current mouse pointer position.
virtual void SetCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true, bool aTriggeredByArrows=false, long aArrowCommand=0)=0
Move cursor to the requested position expressed in world coordinates.
virtual void SetAutoPan(bool aEnabled)
Turn on/off auto panning (this feature is used when there is a tool active (eg.
virtual void PinCursorInsideNonAutoscrollArea(bool aWarpMouseCursor)=0
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Add a VIEW_ITEM to the view.
virtual void Remove(VIEW_ITEM *aItem)
Remove a VIEW_ITEM from the view.
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const
For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has chan...
void RecacheAllItems()
Rebuild GAL display lists.
void AddToPreview(VIEW_ITEM *aItem, bool aTakeOwnership=true)
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
bool IsValid() const
Check if this LID_ID is valid.
Define a library symbol object.
static SYMBOL_LIB_TABLE * SchSymbolLibTable(PROJECT *aProject)
Accessor for project symbol library table.
static SYMBOL_LIBS * SchLibs(PROJECT *aProject)
These settings were stored in SCH_BASE_FRAME previously.
bool m_IntersheetRefsShow
Holds all the data relating to one schematic.
SCHEMATIC_SETTINGS & Settings() const
SCH_SHEET_LIST & GetFullHierarchy() const
Return the full schematic flattened hierarchical sheet list.
SCH_SHEET_LIST GetSheets() const override
Builds and returns an updated schematic hierarchy TODO: can this be cached?
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.
PICKED_SYMBOL PickSymbolFromLibrary(const SYMBOL_LIBRARY_FILTER *aFilter, std::vector< PICKED_SYMBOL > &aHistoryList, std::vector< PICKED_SYMBOL > &aAlreadyPlaced, bool aShowFootprints, const LIB_ID *aHighlight=nullptr, bool aAllowFields=true)
Call the library viewer to select symbol to import into schematic.
EESCHEMA_SETTINGS * eeconfig() const
LIB_SYMBOL * GetLibSymbol(const LIB_ID &aLibId, bool aUseCacheLib=false, bool aShowErrorMsg=false)
Load symbol from symbol library table.
Object to handle a bitmap image that can be inserted in a schematic.
Base class for a bus or wire entry.
VECTOR2I GetPosition() const override
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
void MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
void Rotate(const VECTOR2I &aCenter) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
Class for a wire to bus entry.
virtual void Push(const wxString &aMessage=wxT("A commit"), int aCommitFlags=0) override
Revert the commit by restoring the modified items state.
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...
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...
SCH_SHEET_PATH & GetCurrentSheet() const
SCHEMATIC & Schematic() const
bool EditSheetProperties(SCH_SHEET *aSheet, SCH_SHEET_PATH *aHierarchy, bool *aClearAnnotationNewItems, bool *aUpdateHierarchyNavigator=nullptr)
Edit an existing sheet or add a new sheet to the schematic.
void SelectUnit(SCH_SYMBOL *aSymbol, int aUnit)
void UpdateHierarchyNavigator()
Update the hierarchy navigation tree and history.
void AutoRotateItem(SCH_SCREEN *aScreen, SCH_ITEM *aItem)
Automatically set the rotation of an item (if the item supports it)
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 SetSpinStyle(SPIN_STYLE aSpinStyle) override
Base class for any item which can be embedded within the SCHEMATIC container class,...
virtual bool IsConnectable() const
SCHEMATIC * Schematic() const
Searches the item hierarchy to find a SCHEMATIC.
virtual void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction)
virtual void AutoplaceFields(SCH_SCREEN *aScreen, bool aManual)
SCH_ITEM * Duplicate(bool doClone=false) const
Routine to create a new copy of given item.
bool AutoRotateOnPlacement() const
autoRotateOnPlacement
SPIN_STYLE GetSpinStyle() const
void SetShape(LABEL_FLAG_SHAPE aShape)
LABEL_FLAG_SHAPE GetShape() const
void SetAutoRotateOnPlacement(bool autoRotate=true)
setAutoRotateOnPlacement
std::vector< SCH_FIELD > & GetFields()
virtual void SetSpinStyle(SPIN_STYLE aSpinStyle)
Segment description base class to describe items which have 2 end points (track, wire,...
bool IsWire() const
Return true if the line is a wire.
VECTOR2I GetEndPoint() const
VECTOR2I GetStartPoint() const
Container to create a flattened list of symbols because in a complex hierarchy, a symbol can be used ...
void SortByReferenceOnly()
Sort the list of references by reference.
void ReannotateByOptions(ANNOTATE_ORDER_T aSortOption, ANNOTATE_ALGO_T aAlgoOption, int aStartNumber, const SCH_REFERENCE_LIST &aAdditionalRefs, bool aStartAtCurrent, SCH_SHEET_LIST *aHierarchy)
Forces reannotation of the provided references.
void AddItem(const SCH_REFERENCE &aItem)
void UpdateAnnotation()
Update the symbol references for the schematic project (or the current sheet).
A helper to define a symbol's reference designator in a schematic.
bool AlwaysAnnotate() const
Verify the reference should always be automatically annotated.
EE_RTREE & Items()
Gets the full RTree, usually for iterating.
SCH_ITEM * GetItem(const VECTOR2I &aPosition, int aAccuracy=0, KICAD_T aType=SCH_LOCATE_ANY_T) const
Check aPosition within a distance of aAccuracy for items of type aFilter.
bool IsExplicitJunctionAllowed(const VECTOR2I &aPosition) const
Indicates that a juction dot may be placed at the given location.
void SetPosition(const VECTOR2I &aPos) override
void CalcEdit(const VECTOR2I &aPosition)
bool ContinueEdit(const VECTOR2I &aPosition)
void BeginEdit(const VECTOR2I &aStartPoint)
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
void SetStroke(const STROKE_PARAMS &aStroke) override
wxString GetClass() const override
Return the class name.
STROKE_PARAMS GetStroke() const override
VECTOR2I GetPosition() const override
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
void SortByPageNumbers(bool aUpdateVirtualPageNums=true)
Sort the list of sheets by page number.
SCH_SHEET_LIST FindAllSheetsForScreen(const SCH_SCREEN *aScreen) const
Return a SCH_SHEET_LIST with a copy of all the SCH_SHEET_PATH using a particular screen.
void GetSymbols(SCH_REFERENCE_LIST &aReferences, bool aIncludePowerSymbols=true, bool aForceIncludeOrphanSymbols=false) const
Add a SCH_REFERENCE object to aReferences for each symbol in the list of sheets.
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
void UpdateAllScreenReferences() const
Update all the symbol references for this sheet path.
SCH_SCREEN * LastScreen()
wxString GetPageNumber() const
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
void push_back(SCH_SHEET *aSheet)
Forwarded method from std::vector.
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
void SetBorderColor(KIGFX::COLOR4D aColor)
void AddPin(SCH_SHEET_PIN *aSheetPin)
Add aSheetPin to the sheet.
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const override
Compare the item against the search criteria in aSearchData.
std::vector< SCH_FIELD > & GetFields()
void SetBackgroundColor(KIGFX::COLOR4D aColor)
SCH_SCREEN * GetScreen() const
VECTOR2I GetPosition() const override
void SetScreen(SCH_SCREEN *aScreen)
Set the SCH_SCREEN associated with this sheet to aScreen.
void AutoplaceFields(SCH_SCREEN *aScreen, bool aManual) override
void SetBorderWidth(int aWidth)
void Resize(const VECTOR2I &aSize)
Resize this sheet to aSize and adjust all of the labels accordingly.
std::vector< SCH_SHEET_PIN * > & GetPins()
int GetUnitCount() const
Return the number of units per package of the symbol.
void AutoplaceFields(SCH_SCREEN *aScreen, bool aManual) override
Automatically orient all the fields in the symbol.
void SetPosition(const VECTOR2I &aPosition) override
bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const override
Compare the item against the search criteria in aSearchData.
void ClearAnnotation(const SCH_SHEET_PATH *aSheetPath, bool aResetPrefix)
Clear exiting symbol annotation.
void SetUnit(int aUnit)
Change the unit number to aUnit.
const LIB_ID & GetLibId() const
void SetUnitSelection(const SCH_SHEET_PATH *aSheet, int aUnitSelection)
Set the selected unit of this symbol on one sheet.
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
void SetRowHeight(int aRow, int aHeight)
void SetColCount(int aCount)
void SetColWidth(int aCol, int aWidth)
void AddCell(SCH_TABLECELL *aCell)
VECTOR2I GetPosition() const override
bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const override
Compare the item against the search criteria in aSearchData.
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
void SetPosition(const VECTOR2I &aPos) override
const VECTOR2I NearestPoint(const VECTOR2I &aP) const
Compute a point on the segment (this) that is closest to point aP.
virtual void Add(EDA_ITEM *aItem)
virtual unsigned int GetSize() const override
Return the number of stored items.
virtual void Clear() override
Remove all the stored items from the group.
int Size() const
Returns the number of selected parts.
SHEET_SYNCHRONIZATION_PLACEMENT
std::function< void()> MODIFICATION
Helper object to filter a list of libraries.
SYMBOL_LIB * GetCacheLibrary()
Object used to load, save, search, and otherwise manipulate symbol library files.
void Dismiss() override
Dismisses the infobar and updates the containing layout and AUI manager (if one is provided).
This file is part of the common library.
static constexpr EDA_ANGLE ANGLE_0
std::vector< EDA_ITEM * > EDA_ITEMS
Define list of drawing items for screens.
#define IS_NEW
New item, just created.
#define STRUCT_DELETED
flag indication structures to be erased
#define IS_MOVING
Item being moved.
@ ID_POPUP_SCH_SELECT_UNIT
@ ID_POPUP_SCH_SELECT_UNIT_END
static const std::string KiCadSchematicFileExtension
LIB_SYMBOL * SchGetLibSymbol(const LIB_ID &aLibId, SYMBOL_LIB_TABLE *aLibTable, SYMBOL_LIB *aCacheLib, wxWindow *aParent, bool aShowErrorMsg)
Load symbol from symbol library table.
ANNOTATE_ORDER_T
Schematic annotation order options.
ANNOTATE_ALGO_T
Schematic annotation type options.
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
bool NoPrintableChars(const wxString &aString)
Return true if the string is empty or contains only whitespace.
LINE_STYLE
Dashed line types.
constexpr int MilsToIU(int mils) const
COLOR4D default_sheet_border_color
COLOR4D default_sheet_background_color
int default_line_thickness
Definition for symbol library class.
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition of file extensions used in Kicad.