68#include <dialogs/dialog_text_properties.h>
71#include <dialogs/dialog_table_properties.h>
76#include <wx/filedlg.h>
85 m_lastTextBold( false ),
86 m_lastTextItalic( false ),
99 m_mruPath( wxEmptyString ),
100 m_lastAutoLabelRotateOnPlacement( false ),
101 m_drawingRuleArea( false ),
102 m_inDrawingTool( false )
111 auto belowRootSheetCondition =
117 auto inDrawingRuleArea =
141 bool placeOneOnly = symbol !=
nullptr;
144 std::vector<PICKED_SYMBOL>* historyList =
nullptr;
145 bool ignorePrimePosition =
false;
178 filter.FilterPowerSymbols(
true );
182 wxFAIL_MSG(
"PlaceSymbol(): unexpected request" );
207 : KICURSOR::COMPONENT );
218 existingRefs.
Clear();
240 existingRefs,
false, &hierarchy );
245 for(
size_t i = 0; i < refs.
GetCount(); i++ )
246 existingRefs.
AddItem( refs[i] );
278 ignorePrimePosition =
true;
286 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
292 bool isSyntheticClick = symbol && evt->IsActivate() && evt->HasPosition()
293 && evt->Matches( aEvent );
295 if( evt->IsCancelInteractive() || ( symbol && evt->IsAction( &
ACTIONS::undo ) ) )
309 else if( evt->IsActivate() && !isSyntheticClick )
311 if( symbol && evt->IsMoveTool() )
314 evt->SetPassEvent(
false );
321 evt->SetPassEvent(
false );
325 if( evt->IsMoveTool() )
336 else if( evt->IsClick(
BUT_LEFT ) || evt->IsDblClick(
BUT_LEFT ) || isSyntheticClick )
345 std::set<UTF8> unique_libid;
346 std::vector<PICKED_SYMBOL> alreadyPlaced;
363 alreadyPlaced.push_back( pickedSymbol );
383 if( evt->IsPrime() && !ignorePrimePosition )
385 cursorPos =
grid.Align( evt->Position(), GRID_HELPER_GRIDS::GRID_CONNECTABLE );
392 GRID_HELPER_GRIDS::GRID_CONNECTABLE );
402 existingRefs.
AddItem( placedSymbolReference );
425 commit.
Added( symbol, screen );
431 commit.
Push(
_(
"Place Symbol" ) );
444 int new_unit = symbol->
GetUnit();
447 && symbol->GetUnit() < symbol->GetUnitCount() )
459 nextSymbol =
static_cast<SCH_SYMBOL*
>( symbol->Duplicate() );
460 nextSymbol->
SetUnit( new_unit );
467 addSymbol( nextSymbol );
473 existingRefs.
AddItem( placedSymbolReference );
507 if( symbol && symbol->GetBodyStyle() != bodyStyle )
531 symbol->SetPosition( cursorPos );
569 static const std::vector<KICAD_T> symbolTypes = {
SCH_SYMBOL_T };
572 if( selection.
Size() != 1 )
593 if( missingUnits.empty() )
600 const int nextMissing = *std::min_element( missingUnits.begin(), missingUnits.end() );
602 std::unique_ptr<SCH_SYMBOL> newSymbol = std::make_unique<SCH_SYMBOL>( *symbol );
605 newSymbol->SetUnitProp( nextMissing );
606 newSymbol->SetRefProp( symbol->
GetRef( &sheetPath,
false ) );
620 wxString sheetFileName = wxEmptyString;
622 if( placingDesignBlock )
637 wxString* importSourceFile = aEvent.
Parameter<wxString*>();
639 if( importSourceFile !=
nullptr )
640 sheetFileName = *importSourceFile;
653 if( !cfg || !common_settings )
663 : KICURSOR::COMPONENT );
666 auto placeSheetContents =
681 placingDesignBlock ) )
701 commit.
Added( item, screen );
702 newItems.emplace_back( item );
723 if( !keepAnnotations )
753 commit.
Push( placingDesignBlock ?
_(
"Add design block" )
754 :
_(
"Import Schematic Sheet Content..." ) );
765 if( sheetFileName.IsEmpty() )
770 if (!placingDesignBlock) {
772 if( sheetFileName.IsEmpty() )
775 file = wxEmptyString;
779 path = wxPathOnly( sheetFileName );
780 file = wxFileName( sheetFileName ).GetFullName();
785 wxFileDialog dlg(
m_frame,
_(
"Choose Schematic" ),
path, file,
787 wxFD_OPEN | wxFD_FILE_MUST_EXIST );
790 dlg.SetCustomizeHook( dlgHook );
792 if( dlg.ShowModal() == wxID_CANCEL )
795 sheetFileName = dlg.GetPath();
800 if( sheetFileName.IsEmpty() )
814 designBlock =
nullptr;
841 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
847 bool isSyntheticClick = designBlock && evt->IsActivate() && evt->HasPosition()
848 && evt->Matches( aEvent );
850 if( evt->IsCancelInteractive() || ( designBlock && evt->IsAction( &
ACTIONS::undo ) ) )
855 else if( evt->IsClick(
BUT_LEFT ) || evt->IsDblClick(
BUT_LEFT ) || isSyntheticClick )
857 if( placingDesignBlock )
863 new wxString( sheetFileName ) );
897 bool immediateMode =
image !=
nullptr;
898 bool ignorePrimePosition =
false;
961 ignorePrimePosition =
true;
969 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
975 bool isSyntheticClick =
image && evt->IsActivate() && evt->HasPosition()
976 && evt->Matches( aEvent );
998 else if( evt->IsActivate() && !isSyntheticClick )
1000 if(
image && evt->IsMoveTool() )
1003 evt->SetPassEvent(
false );
1010 evt->SetPassEvent(
false );
1014 if( evt->IsMoveTool() )
1025 else if( evt->IsClick(
BUT_LEFT ) || evt->IsDblClick(
BUT_LEFT ) || isSyntheticClick )
1032 _(
"Image Files" ) + wxS(
" " ) + wxImage::GetImageExtWildcard(),
1035 if( dlg.ShowModal() != wxID_OK )
1041 if( evt->IsPrime() && !ignorePrimePosition )
1043 cursorPos =
grid.Align( evt->Position() );
1052 wxString fullFilename = dlg.GetPath();
1055 if( wxFileExists( fullFilename ) )
1058 if( !
image || !
image->GetReferenceImage().ReadImageFile( fullFilename ) )
1060 wxMessageBox( wxString::Format(
_(
"Could not load image from '%s'." ), fullFilename ) );
1083 commit.
Push(
_(
"Place Image" ) );
1122 image->SetPosition( cursorPos );
1138 evt->SetPassEvent();
1168 if( dlgResult != wxID_OK )
1174 wxMessageBox(
_(
"No graphic items found in file." ) );
1181 std::vector<SCH_ITEM*> newItems;
1182 std::vector<SCH_ITEM*> selectedItems;
1186 for( std::unique_ptr<EDA_ITEM>& ptr : list )
1189 wxCHECK2_MSG( item,
continue, wxString::Format(
"Bad item type: ", ptr->Type() ) );
1191 newItems.push_back( item );
1192 selectedItems.push_back( item );
1193 preview.
Add( item );
1204 commit.
Push(
_(
"Import Graphic" ) );
1213 EDA_ITEMS selItems( selectedItems.begin(), selectedItems.end() );
1218 auto setCursor = [&]()
1238 for(
SCH_ITEM* item : selectedItems )
1239 item->Move(
delta );
1241 currentOffset +=
delta;
1251 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
1256 if( evt->IsCancelInteractive() || evt->IsActivate() )
1265 else if( evt->IsMotion() )
1267 delta = cursorPos - currentOffset;
1269 for(
SCH_ITEM* item : selectedItems )
1270 item->Move(
delta );
1272 currentOffset +=
delta;
1286 commit.
Push(
_(
"Import Graphic" ) );
1291 evt->SetPassEvent();
1314 bool loggedInfoBarError =
false;
1315 wxString description;
1317 bool allowRepeat =
false;
1343 description =
_(
"Add No Connect Flag" );
1350 description =
_(
"Add Junction" );
1356 description =
_(
"Add Wire to Bus Entry" );
1361 wxASSERT_MSG(
false,
"Unknown item type in SCH_DRAWING_TOOLS::SingleClickPlace" );
1399 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
1401 cursorPos = evt->IsPrime() ? evt->Position() : controls->
GetMousePosition();
1402 cursorPos =
grid.BestSnapAnchor( cursorPos,
grid.GetItemGrid( previewItem ),
nullptr );
1405 if( evt->IsCancelInteractive() )
1410 else if( evt->IsActivate() )
1412 if( evt->IsMoveTool() )
1425 if( !screen->
GetItem( cursorPos, 0, type ) )
1432 "wires and/or pins." ) );
1433 loggedInfoBarError =
true;
1436 else if( loggedInfoBarError )
1452 commit.
Added( newItem, screen );
1456 commit.
Push( description );
1511 std::deque<SCH_ITEM*> strokeItems;
1512 strokeItems.push_back( previewItem );
1520 std::deque<SCH_JUNCTION*> junctions;
1521 junctions.push_back(
static_cast<SCH_JUNCTION*
>( previewItem ) );
1536 evt->SetPassEvent();
1541 evt->SetPassEvent();
1574 wxASSERT( aWire->
IsWire() );
1580 SCH_ITEM* wireDriver = wireConnection->Driver();
1582 if( wireDriver && wireDriver->
IsType( { SCH_LABEL_T, SCH_GLOBAL_LABEL_T } ) )
1583 return wireConnection->LocalName();
1586 return wxEmptyString;
1592 SCHEMATIC* schematic = getModel<SCHEMATIC>();
1601 textItem =
new SCH_TEXT( aPosition );
1606 textItem = labelItem;
1616 labelItem->
GetFields().emplace_back(
SCH_FIELD( {0,0}, 0, labelItem, wxT(
"Netclass" ) ) );
1618 SCH_FIELD( { 0, 0 }, 0, labelItem, wxT(
"Component Class" ) ) );
1619 labelItem->
GetFields().back().SetItalic(
true );
1620 labelItem->
GetFields().back().SetVisible(
true );
1621 textItem = labelItem;
1628 textItem = labelItem;
1636 textItem = labelItem;
1644 wxFAIL_MSG(
"SCH_EDIT_FRAME::CreateNewText() unknown layer type" );
1683 else if( !netName.IsEmpty() )
1744 pin->SetText( std::to_string( aSheet->
GetPins().size() + 1 ) );
1746 pin->SetPosition( aPosition );
1747 pin->ClearSelected();
1770 bool ignorePrimePosition =
false;
1773 wxString description;
1804 else if( isGlobalLabel )
1806 else if( isNetLabel )
1808 else if( isClassLabel )
1810 else if( isHierLabel )
1816 auto updatePreview =
1850 && ( isText || isGlobalLabel || isHierLabel || isClassLabel || isNetLabel ) )
1853 ignorePrimePosition =
true;
1863 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
1866 cursorPos =
grid.BestSnapAnchor( cursorPos, snapGrid, item );
1870 bool isSyntheticClick = item && evt->IsActivate() && evt->HasPosition()
1873 if( evt->IsCancelInteractive() || evt->IsAction( &
ACTIONS::undo ) )
1887 else if( evt->IsActivate() && !isSyntheticClick )
1889 if( item && evt->IsMoveTool() )
1892 evt->SetPassEvent(
false );
1899 evt->SetPassEvent(
false );
1903 if( evt->IsPointEditor() )
1907 else if( evt->IsMoveTool() )
1918 else if( evt->IsClick(
BUT_LEFT ) || evt->IsDblClick(
BUT_LEFT ) || isSyntheticClick )
1929 description =
_(
"Add Text" );
1931 else if( isHierLabel )
1938 SCHEMATIC* schematic = getModel<SCHEMATIC>();
1956 description =
_(
"Add Hierarchical Label" );
1958 else if( isNetLabel )
1961 description =
_(
"Add Label" );
1963 else if( isGlobalLabel )
1966 description =
_(
"Add Label" );
1968 else if( isClassLabel )
1971 description =
_(
"Add Label" );
1973 else if( isSheetPin )
1986 + wxPoint( 20, 20 ) );
2008 m_statusPopup->SetText(
_(
"No new hierarchical labels found." ) );
2010 + wxPoint( 20, 20 ) );
2022 description =
_(
"Add Sheet Pin" );
2028 if( evt->IsPrime() && !ignorePrimePosition )
2030 cursorPos =
grid.Align( evt->Position() );
2037 cursorPos =
grid.BestSnapAnchor( cursorPos, snapGrid, item );
2081 commit.
Push( description );
2110 m_statusPopup->SetText(
_(
"No new hierarchical labels found." ) );
2112 + wxPoint( 20, 20 ) );
2131 else if( item && evt->IsSelectionEvent() )
2136 if( selection.
GetSize() == 1 )
2185 evt->SetPassEvent();
2210 SCHEMATIC* schematic = getModel<SCHEMATIC>();
2215 wxString description;
2265 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
2271 bool isSyntheticClick = item && evt->IsActivate() && evt->HasPosition()
2274 if( evt->IsCancelInteractive() || ( item && evt->IsAction( &
ACTIONS::undo ) ) )
2286 else if( evt->IsActivate() && !isSyntheticClick )
2288 if( item && evt->IsMoveTool() )
2291 evt->SetPassEvent(
false );
2298 if( evt->IsPointEditor() )
2302 else if( evt->IsMoveTool() )
2313 else if( evt->IsClick(
BUT_LEFT ) && !item )
2336 description =
_(
"Add Text Box" );
2354 else if( item && ( evt->IsClick(
BUT_LEFT )
2400 commit.
Push( wxString::Format(
_(
"Draw %s" ), item->
GetClass() ) );
2431 else if( evt->IsDblClick(
BUT_LEFT ) && !item )
2449 evt->SetPassEvent();
2478 bool started =
false;
2494 auto cleanup = [&]()
2496 polyGeomMgr.
Reset();
2521 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
2530 if( evt->IsCancelInteractive() )
2541 evt->SetPassEvent(
false );
2545 else if( evt->IsActivate() )
2550 if( evt->IsPointEditor() )
2554 else if( evt->IsMoveTool() )
2577 const bool endPolygon = evt->IsDblClick(
BUT_LEFT )
2584 polyGeomMgr.
Reset();
2591 else if( polyGeomMgr.
AddPoint( cursorPos ) )
2609 cursorPos = last.value();
2619 else if( started && ( evt->IsMotion() || evt->IsDrag(
BUT_LEFT ) ) )
2625 evt->SetPassEvent();
2639 SCHEMATIC* schematic = getModel<SCHEMATIC>();
2690 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
2696 bool isSyntheticClick = table
2697 && evt->IsActivate()
2698 && evt->HasPosition()
2701 if( evt->IsCancelInteractive() || ( table && evt->IsAction( &
ACTIONS::undo ) ) )
2713 else if( evt->IsActivate() && !isSyntheticClick )
2715 if( table && evt->IsMoveTool() )
2718 evt->SetPassEvent(
false );
2725 if( evt->IsPointEditor() )
2729 else if( evt->IsMoveTool() )
2740 else if( evt->IsClick(
BUT_LEFT ) && !table )
2760 else if( table && ( evt->IsClick(
BUT_LEFT )
2776 commit.
Push(
_(
"Draw Table" ) );
2794 VECTOR2I requestedSize( cursorPos - origin );
2796 int colCount = std::max( 1, requestedSize.
x / ( fontSize * 15 ) );
2797 int rowCount = std::max( 1, requestedSize.
y / ( fontSize * 2 ) );
2799 VECTOR2I cellSize( std::max( gridSize.
x * 5, requestedSize.
x / colCount ),
2800 std::max( gridSize.
y * 2, requestedSize.
y / rowCount ) );
2802 cellSize.
x =
KiROUND( (
double) cellSize.
x / gridSize.
x ) * gridSize.
x;
2803 cellSize.
y =
KiROUND( (
double) cellSize.
y / gridSize.
y ) * gridSize.
y;
2808 for(
int col = 0; col < colCount; ++col )
2811 for(
int row = 0; row < rowCount; ++row )
2815 for(
int col = 0; col < colCount; ++col )
2831 else if( evt->IsDblClick(
BUT_LEFT ) && !table )
2849 evt->SetPassEvent();
2873 if( isDrawSheetCopy )
2875 wxString* ptr = aEvent.
Parameter<wxString*>();
2882 else if( isDrawSheetFromDesignBlock )
2885 wxCHECK( designBlock, 0 );
2889 if( ( isDrawSheetCopy || isDrawSheetFromDesignBlock ) && !wxFileExists( filename ) )
2891 wxMessageBox( wxString::Format(
_(
"File '%s' does not exist." ), filename ) );
2933 if( aEvent.
HasPosition() && !( isDrawSheetCopy || isDrawSheetFromDesignBlock ) )
2941 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
2947 bool isSyntheticClick = sheet && evt->IsActivate() && evt->HasPosition()
2950 if( evt->IsCancelInteractive() || ( sheet && evt->IsAction( &
ACTIONS::undo ) ) )
2964 else if( evt->IsActivate() && !isSyntheticClick )
2966 if( sheet && evt->IsMoveTool() )
2969 evt->SetPassEvent(
false );
2976 evt->SetPassEvent(
false );
2980 if( evt->IsPointEditor() )
2984 else if( evt->IsMoveTool() )
2995 else if( !sheet && ( evt->IsClick(
BUT_LEFT ) || evt->IsDblClick(
BUT_LEFT ) ) )
2999 if( selection.
Size() == 1
3008 else if( evt->IsDblClick(
BUT_LEFT ) )
3021 if( isDrawSheetCopy )
3023 wxFileName fn( filename );
3029 else if( isDrawSheetFromDesignBlock )
3031 wxFileName fn( filename );
3037 std::vector<SCH_FIELD>& sheetFields = sheet->
GetFields();
3040 for(
const auto& field : designBlock->
GetFields() )
3042 SCH_FIELD newField( sheet, sheetFields.size(), field.first );
3043 newField.
SetText( field.second );
3046 sheetFields.emplace_back( newField );
3065 wxString pageNumber;
3069 pageNumber.Printf( wxT(
"%d" ),
static_cast<int>( hierarchy.size() ) + 1 );
3075 else if( sheet && ( evt->IsClick(
BUT_LEFT )
3085 nullptr, &filename ) )
3105 && !( ( isDrawSheetCopy || isDrawSheetFromDesignBlock )
3118 c.
Push( isDrawSheetCopy ?
"Import Sheet Copy" :
"Draw Sheet" );
3166 evt->SetPassEvent();
3197 if( !sheetPaths.size() )
3203 m_frame, std::move( sheetPaths ),
3204 std::make_shared<SHEET_SYNCHRONIZATION_AGENT>(
3214 commit.
Push(
_(
"Modify sheet pin" ) );
3220 commit.
Push(
_(
"Modify schematic item" ) );
3232 selectionTool->AddItemToSel( aItem,
true );
3237 std::set<EDA_ITEM*> aTemplates )
3302 static const std::function<void( std::list<SCH_SHEET_PATH>&,
SCH_SCREEN*,
3304 getSheetChildren = []( std::list<SCH_SHEET_PATH>& aPaths,
SCH_SCREEN* aScene,
3305 std::set<SCH_SCREEN*>& aVisited,
SCH_SHEET_PATH const& aCurPath )
3307 if( ! aScene || aVisited.find(aScene) != aVisited.end() )
3310 std::vector<SCH_ITEM*> sheetChildren;
3311 aScene->GetSheets( &sheetChildren );
3312 aVisited.insert( aScene );
3314 for(
SCH_ITEM* child : sheetChildren )
3319 aPaths.push_back( cp );
3320 getSheetChildren( aPaths, sheet->
GetScreen(), aVisited, cp );
3324 std::list<SCH_SHEET_PATH> sheetPaths;
3325 std::set<SCH_SCREEN*> visited;
3330 if( sheetPaths.size() == 0 )
constexpr EDA_IU_SCALE schIUScale
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
static TOOL_ACTION cancelInteractive
static TOOL_ACTION duplicate
static TOOL_ACTION activatePointEditor
static TOOL_ACTION doDelete
static TOOL_ACTION increment
static TOOL_ACTION refreshPreview
static TOOL_ACTION finishInteractive
constexpr bool Contains(const Vec &aPoint) const
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Modify a given item in the model.
COMMIT & Added(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Notify observers that aItem has been added.
COMMIT & Add(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Add a new item to the model.
LIB_ID GetSelectedLibId(int *aUnit=nullptr) const
To be called after this dialog returns from ShowModal().
const wxString & GetSchematicFile() const
const LIB_ID & GetLibId() const
const nlohmann::ordered_map< wxString, wxString > & GetFields() const
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 ClearEditFlags()
virtual void SetPosition(const VECTOR2I &aPos)
virtual const BOX2I GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
EDA_ITEM_FLAGS GetEditFlags() const
void SetFlags(EDA_ITEM_FLAGS aMask)
KICAD_T Type() const
Returns the type of object.
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
virtual bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const
Compare the item against the search criteria in aSearchData.
virtual void SetParent(EDA_ITEM *aParent)
virtual wxString GetFriendlyName() const
virtual EDA_ITEM * Clone() const
Create a duplicate of this item with linked list members set to NULL.
FILL_T GetFillMode() const
void SetFillColor(const COLOR4D &aColor)
COLOR4D GetFillColor() const
void SetEnd(const VECTOR2I &aEnd)
const EDA_ANGLE & GetTextAngle() const
void SetTextSize(VECTOR2I aNewSize, bool aEnforceMinTextSize=true)
virtual const wxString & GetText() const
Return the string associated with the text object.
void SetVertJustify(GR_TEXT_V_ALIGN_T aType)
GR_TEXT_H_ALIGN_T GetHorizJustify() const
virtual void SetVisible(bool aVisible)
void SetBold(bool aBold)
Set the text to be bold - this will also update the font if needed.
GR_TEXT_V_ALIGN_T GetVertJustify() const
virtual void SetText(const wxString &aText)
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
void SetItalic(bool aItalic)
Set the text to be italic - this will also update the font if needed.
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
PANEL_DESIGN_BLOCK_CHOOSER m_DesignBlockChooserPanel
PANEL_ANNOTATE m_AnnotatePanel
PANEL_SYM_CHOOSER m_SymChooserPanel
AUTOPLACE_FIELDS m_AutoplaceFields
static TOOL_ACTION drawSheetFromFile
static TOOL_ACTION mirrorV
static TOOL_ACTION drawSheetFromDesignBlock
static TOOL_ACTION placeDesignBlock
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 drawRuleArea
static TOOL_ACTION placeClassLabel
static TOOL_ACTION placeNextSymbolUnit
static TOOL_ACTION closeOutline
static TOOL_ACTION drawCircle
static TOOL_ACTION rotateCCW
static TOOL_ACTION placePower
static TOOL_ACTION deleteLastPoint
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 drawBezier
static TOOL_ACTION placeLabel
static TOOL_ACTION repeatDrawItem
static TOOL_ACTION placeBusWireEntry
static TOOL_ACTION placeJunction
static TOOL_ACTION importSheet
static TOOL_ACTION placeNoConnect
EE_TYPE Overlapping(const BOX2I &aRect) const
EE_TYPE OfType(KICAD_T aType) const
A color representation with 4 components: red, green, blue, alpha.
An interface for classes handling user events controlling the view behavior such as zooming,...
virtual void CaptureCursor(bool aEnabled)
Force the cursor to stay within the drawing panel area.
virtual void ForceCursorPosition(bool aEnabled, const VECTOR2D &aPosition=VECTOR2D(0, 0))
Place the cursor immediately at a given point.
virtual void ShowCursor(bool aEnabled)
Enable or disables display of cursor.
virtual void WarpMouseCursor(const VECTOR2D &aPosition, bool aWorldCoordinates=false, bool aWarpView=false)=0
If enabled (.
virtual void SetCrossHairCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true)=0
Move the graphic crosshair cursor to the requested position expressed in world coordinates.
VECTOR2D GetCursorPosition() const
Return the current cursor position in world coordinates.
virtual VECTOR2D GetMousePosition(bool aWorldCoordinates=true) const =0
Return the current mouse pointer position.
virtual void SetCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true, bool aTriggeredByArrows=false, long aArrowCommand=0)=0
Move cursor to the requested position expressed in world coordinates.
virtual void SetAutoPan(bool aEnabled)
Turn on/off auto panning (this feature is used when there is a tool active (eg.
virtual void PinCursorInsideNonAutoscrollArea(bool aWarpMouseCursor)=0
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.
const UTF8 & GetLibItemName() const
Define a library symbol object.
const LIB_ID & GetLibId() const override
A singleton reporter that reports to nowhere.
virtual COMMON_SETTINGS * GetCommonSettings() const
Class that handles the drawing of a polygon, including management of last corner deletion and drawing...
bool AddPoint(const VECTOR2I &aPt)
Lock in a polygon point.
@ DIRECT
Unconstrained point-to-point.
void SetCursorPosition(const VECTOR2I &aPos)
Set the current cursor position.
bool NewPointClosesOutline(const VECTOR2I &aPt) const
std::optional< VECTOR2I > DeleteLastCorner()
Remove the last-added point from the polygon.
void SetFinished()
Mark the polygon finished and update the client.
void SetLeaderMode(LEADER_MODE aMode)
Set the leader mode to use when calculating the leader/returner lines.
void Reset()
Clear the manager state and start again.
static SYMBOL_LIB_TABLE * SchSymbolLibTable(PROJECT *aProject)
Accessor for project symbol library table.
static SYMBOL_LIBS * SchLibs(PROJECT *aProject)
virtual const wxString GetProjectFullName() const
Return the full path and name of the project.
An adjunct helper to the DRAWING_TOOL interactive tool, which handles incoming geometry changes from ...
These are loaded from Eeschema settings but then overwritten by the project settings.
bool m_IntersheetRefsShow
Holds all the data relating to one schematic.
SCHEMATIC_SETTINGS & Settings() const
SCH_SHEET_LIST Hierarchy() const override
Return the full schematic flattened hierarchical sheet list.
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.
void SyncView()
Mark all items for refresh.
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, bool aRotateCCW) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
Class for a wire to bus entry.
virtual void Push(const wxString &aMessage=wxT("A commit"), int aCommitFlags=0) override
Execute the changes.
virtual void Revert() override
Revert the commit by restoring the modified items state.
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
Schematic editor (Eeschema) main window.
void 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...
void UpdateHierarchyNavigator(bool aRefreshNetNavigator=true)
Update the hierarchy navigation tree and history.
bool LoadSheetFromFile(SCH_SHEET *aSheet, SCH_SHEET_PATH *aCurrentSheet, const wxString &aFileName, bool aSkipRecursionCheck=false, bool aSkipLibCheck=false)
Load a the KiCad schematic file aFileName into the sheet aSheet.
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.
void HardRedraw() override
Rebuild the GAL and redraw the screen.
SCH_SHEET_PATH & GetCurrentSheet() const
SCHEMATIC & Schematic() const
DESIGN_BLOCK * GetDesignBlock(const LIB_ID &aLibId, bool aUseCacheLib=false, bool aShowErrorMsg=false)
Load design block from design block library table.
bool EditSheetProperties(SCH_SHEET *aSheet, SCH_SHEET_PATH *aHierarchy, bool *aIsUndoable=nullptr, bool *aClearAnnotationNewItems=nullptr, bool *aUpdateHierarchyNavigator=nullptr, wxString *aSourceSheetFilename=nullptr)
Edit an existing sheet or add a new sheet to the schematic.
void FlipBodyStyle(SCH_SYMBOL *aSymbol)
void SetSheetNumberAndCount()
Set the m_ScreenNumber and m_NumberOfScreens members for screens.
void SelectUnit(SCH_SYMBOL *aSymbol, int aUnit)
void UpdateDesignBlockOptions()
Design block panel options have changed and the panel needs to be refreshed.
DESIGN_BLOCK_PANE * GetDesignBlockPane() const
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 SetText(const wxString &aText) override
void SetSpinStyle(SPIN_STYLE aSpinStyle) override
Base class for any item which can be embedded within the SCHEMATIC container class,...
virtual bool IsConnectable() const
virtual void AutoplaceFields(SCH_SCREEN *aScreen, AUTOPLACE_ALGO aAlgo)
SCHEMATIC * Schematic() const
Searches the item hierarchy to find a SCHEMATIC.
virtual void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction)
virtual void SetUnit(int aUnit)
SCH_CONNECTION * Connection(const SCH_SHEET_PATH *aSheet=nullptr) const
Retrieve the connection associated with this object in the given sheet.
bool IsType(const std::vector< KICAD_T > &aScanTypes) const override
Check whether the item is one of the listed types.
bool AutoRotateOnPlacement() const
autoRotateOnPlacement
SPIN_STYLE GetSpinStyle() const
void SetShape(LABEL_FLAG_SHAPE aShape)
LABEL_FLAG_SHAPE GetShape() const
void SetAutoRotateOnPlacement(bool autoRotate=true)
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 BeginEdit(const VECTOR2I &aStartPoint) override
Begin drawing a symbol library draw item at aPosition.
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
void EndEdit(bool aClosed=false) override
End an object editing action.
void SetStroke(const STROKE_PARAMS &aStroke) override
bool ContinueEdit(const VECTOR2I &aPosition) override
Continue an edit in progress at aPosition.
void CalcEdit(const VECTOR2I &aPosition) override
Calculate the attributes of an item at aPosition when it is being edited.
wxString GetClass() const override
Return the class name.
STROKE_PARAMS GetStroke() const override
VECTOR2I GetPosition() const override
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
void SortByPageNumbers(bool aUpdateVirtualPageNums=true)
Sort the list of sheets by page number.
SCH_SHEET_LIST FindAllSheetsForScreen(const SCH_SCREEN *aScreen) const
Return a SCH_SHEET_LIST with a copy of all the SCH_SHEET_PATH using a particular screen.
void GetSymbols(SCH_REFERENCE_LIST &aReferences, bool aIncludePowerSymbols=true, bool aForceIncludeOrphanSymbols=false) const
Add a SCH_REFERENCE object to aReferences for each symbol in the list of sheets.
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
void UpdateAllScreenReferences() const
Update all the symbol references for this sheet path.
SCH_SCREEN * LastScreen()
void SetPageNumber(const wxString &aPageNumber)
Set the sheet instance user definable page number.
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
void push_back(SCH_SHEET *aSheet)
Forwarded method from std::vector.
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
void SetBorderColor(KIGFX::COLOR4D aColor)
void AddPin(SCH_SHEET_PIN *aSheetPin)
Add aSheetPin to the sheet.
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const override
Compare the item against the search criteria in aSearchData.
std::vector< SCH_FIELD > & GetFields()
void SetBackgroundColor(KIGFX::COLOR4D aColor)
SCH_SCREEN * GetScreen() const
VECTOR2I GetPosition() const override
bool HasPin(const wxString &aName) const
Checks if the sheet already has a sheet pin named aName.
void SetScreen(SCH_SCREEN *aScreen)
Set the SCH_SCREEN associated with this sheet to aScreen.
void SetBorderWidth(int aWidth)
void AutoplaceFields(SCH_SCREEN *aScreen, AUTOPLACE_ALGO aAlgo) override
void Resize(const VECTOR2I &aSize)
Resize this sheet to aSize and adjust all of the labels accordingly.
std::vector< SCH_SHEET_PIN * > & GetPins()
void ClearAnnotation(const SCH_SHEET_PATH *aSheetPath, bool aResetPrefix)
Clear exiting symbol annotation.
const LIB_ID & GetLibId() const override
bool IsMulti() const override
void SetUnitSelection(const SCH_SHEET_PATH *aSheet, int aUnitSelection)
Set the selected unit of this symbol on one sheet.
const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const override
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
RAII class that sets an value at construction and resets it to the original value at destruction.
const VECTOR2I NearestPoint(const VECTOR2I &aP) const
Compute a point on the segment (this) that is closest to point aP.
virtual void Add(EDA_ITEM *aItem)
VECTOR2I GetReferencePoint() const
virtual unsigned int GetSize() const override
Return the number of stored items.
virtual void Clear() override
Remove all the stored items from the group.
int Size() const
Returns the number of selected parts.
SHEET_SYNCHRONIZATION_PLACEMENT
std::function< void()> MODIFICATION
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 ENDPOINT
ends. (Used to support dragging.)
#define SKIP_STRUCT
flag indicating that the structure should be ignored
#define IS_MOVING
Item being moved.
#define STARTPOINT
When a line is selected, these flags indicate which.
@ ID_POPUP_SCH_SELECT_UNIT
@ ID_POPUP_SCH_SELECT_BASE
@ ID_POPUP_SCH_SELECT_ALT
@ ID_POPUP_SCH_SELECT_UNIT_END
static const std::string KiCadSchematicFileExtension
static wxString KiCadSchematicFileWildcard()
PGM_BASE & Pgm()
The global program "get" accessor.
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_SELECTION
Annotate the selection.
ANNOTATE_ALGO_T
Schematic annotation type options.
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
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
SCH_SYMBOL * m_Symbol
< Provide a symbol to place
Definition for symbol library class.
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
VECTOR2< int32_t > VECTOR2I
Definition of file extensions used in Kicad.