73#include <wx/hyperlink.h>
76using namespace std::placeholders;
86 m_pickerItem( nullptr )
99 m_frame = getEditFrame<PCB_BASE_FRAME>();
127 const wxString fn = *aEvent.
Parameter<wxString*>();
135 const wxString fn = *aEvent.
Parameter<wxString*>();
149template<
class T>
void Flip( T& aValue )
183 getEditFrame<PCB_EDIT_FRAME>()->SetElementVisibility(
LAYER_RATSNEST,
192 frame()->OnDisplayOptionsChanged();
223 if(
Pgm().GetCommonSettings()->m_DoNotShowAgain.zone_fill_warning )
226 bool unfilledZones =
false;
228 for(
const ZONE* zone :
board()->Zones() )
230 if( !zone->GetIsRuleArea() && !zone->IsFilled() )
232 unfilledZones =
true;
240 wxHyperlinkCtrl* button =
new wxHyperlinkCtrl( infobar, wxID_ANY,
_(
"Don't show again" ),
243 button->Bind( wxEVT_COMMAND_HYPERLINK, std::function<
void( wxHyperlinkEvent& aEvent )>(
244 [&]( wxHyperlinkEvent& aEvent )
247 frame()->GetInfoBar()->Dismiss();
254 msg.Printf(
_(
"Not all zones are filled. Use Edit > Fill All Zones (%s) "
255 "if you wish to see all fills." ),
314 ? HIGH_CONTRAST_MODE::DIMMED
315 : HIGH_CONTRAST_MODE::NORMAL;
342 if( !
Pgm().GetCommonSettings()->m_Input.hotkey_feedback )
347 wxArrayString labels;
348 labels.Add(
_(
"Normal" ) );
349 labels.Add(
_(
"Dimmed" ) );
350 labels.Add(
_(
"Hidden" ) );
359 popup->
Popup(
_(
"Inactive Layer Display" ), labels,
373 case NET_COLOR_MODE::ALL: opts.
m_NetColorMode = NET_COLOR_MODE::RATSNEST;
break;
374 case NET_COLOR_MODE::RATSNEST: opts.
m_NetColorMode = NET_COLOR_MODE::OFF;
break;
375 case NET_COLOR_MODE::OFF: opts.
m_NetColorMode = NET_COLOR_MODE::ALL;
break;
399 getEditFrame<PCB_EDIT_FRAME>()->SetElementVisibility(
LAYER_RATSNEST,
402 frame()->OnDisplayOptionsChanged();
423 bool wraparound =
false;
437 for( ; ii < (int)layerStack.size(); ii++ )
439 if( layer == layerStack[ii] )
444 for( ; ii < (int)layerStack.size(); ii++ )
448 if( jj >= (
int)layerStack.size() )
451 layer = layerStack[jj];
483 bool wraparound =
false;
497 for( ; ii < (int)layerStack.size(); ii++ )
499 if( layer == layerStack[ii] )
504 for( ; ii >= 0; ii-- )
509 jj = (int)layerStack.size() - 1;
511 layer = layerStack[jj];
554#define ALPHA_MIN 0.20
555#define ALPHA_MAX 1.00
556#define ALPHA_STEP 0.05
568 settings->
SetColor( currentLayer, currentColor );
598 settings->
SetColor( currentLayer, currentColor );
634 if( presets.size() < 2 )
637 if( currentIndex < 0 )
639 wxASSERT_MSG(
false,
"Current layer pair not found in layer settings" );
643 const int nextIndex = ( currentIndex + 1 ) % presets.size();
644 const LAYER_PAIR& nextPair = presets[nextIndex].GetLayerPair();
655 if( !
Pgm().GetCommonSettings()->m_Input.hotkey_feedback )
673 wxArrayString labels;
676 wxString label = layerPresentation.
getLayerPairName( layerPairInfo.GetLayerPair() );
678 if( layerPairInfo.GetName() )
680 label += wxT(
" (" ) + *layerPairInfo.GetName() + wxT(
")" );
736 [
this](
const VECTOR2D& pt ) ->
bool
758#define HITTEST_THRESHOLD_PIXELS 5
777 [
this](
const VECTOR2D& aPosition ) ->
bool
783 m_statusPopup.reset( new STATUS_TEXT_POPUP( m_frame ) );
784 m_statusPopup->SetText( _(
"Item locked." ) );
785 m_statusPopup->PopupFor( 2000 );
786 m_statusPopup->Move( KIPLATFORM::UI::GetMousePosition()
787 + wxPoint( 20, 20 ) );
821 for(
int i = collector.
GetCount() - 1; i >= 0; --i )
823 if( !selectionTool->
Selectable( collector[ i ] ) )
848 [
this](
const int& aFinalState )
867 std::vector<BOARD_ITEM*>& aPastedItems )
875 pad->SetParent( editorFootprint );
876 aPastedItems.push_back(
pad );
879 aClipFootprint->
Pads().clear();
886 if( field->IsMandatory() )
889 parentGroup->RemoveItem( field );
898 VECTOR2I pos = field->GetFPRelativePosition();
899 field->SetParent( editorFootprint );
900 field->SetFPRelativePosition( pos );
902 aPastedItems.push_back( field );
918 item->Rotate( item->GetPosition(), -aClipFootprint->
GetOrientation() );
919 item->Rotate( item->GetPosition(), editorFootprint->
GetOrientation() );
921 VECTOR2I pos = item->GetFPRelativePosition();
922 item->SetParent( editorFootprint );
923 item->SetFPRelativePosition( pos );
925 aPastedItems.push_back( item );
930 for(
ZONE* zone : aClipFootprint->
Zones() )
932 zone->SetParent( editorFootprint );
933 aPastedItems.push_back( zone );
936 aClipFootprint->
Zones().clear();
940 group->SetParent( editorFootprint );
941 aPastedItems.push_back(
group );
944 aClipFootprint->
Groups().clear();
958 std::vector<BOARD_ITEM*> returnItems;
959 bool fpItemDeleted =
false;
974 returnItems.push_back( fp );
978 returnItems.push_back( item );
982 LSET allowed = item->GetLayerSet() & enabledLayers;
983 bool item_valid =
true;
992 if( allowed.any() && item_valid )
994 item->SetLayerSet( allowed );
995 returnItems.push_back( item );
1000 parentGroup->RemoveItem( item );
1005 if( ( returnItems.size() < aItems.size() ) || fpItemDeleted )
1008 "present in the current board.\n"
1009 "These items could not be pasted.\n" ) );
1012 aItems = returnItems;
1030 if( wxDialog::OSXHasModalDialogsOpen() )
1045 std::vector<BOARD_ITEM*> newItems;
1049 auto refImg = std::make_unique<PCB_REFERENCE_IMAGE>(
m_frame->
GetModel() );
1051 if( refImg->GetReferenceImage().SetImage( *clipImg ) )
1052 newItems.push_back( refImg.release() );
1058 if( clipText.empty() )
1061 std::unique_ptr<PCB_TEXT> item;
1064 item->SetText( clipText );
1066 newItems.push_back( item.release() );
1069 bool cancelled = !
placeBoardItems( &commit, newItems,
true,
false,
false );
1074 commit.
Push(
_(
"Paste Text" ) );
1080 PASTE_MODE mode = PASTE_MODE::KEEP_ANNOTATIONS;
1081 bool clear_nets =
false;
1082 const wxString defaultRef = wxT(
"REF**" );
1099 BOARD* clipBoard =
static_cast<BOARD*
>( clipItem );
1101 if( isFootprintEditor || clear_nets )
1112 bool cancelled =
false;
1114 switch( clipItem->
Type() )
1118 BOARD* clipBoard =
static_cast<BOARD*
>( clipItem );
1120 if( isFootprintEditor )
1123 std::vector<BOARD_ITEM*> pastedItems;
1127 group->SetParent( editorFootprint );
1128 pastedItems.push_back(
group );
1138 switch( clipDrawItem->Type() )
1149 clipDrawItem->SetParent( editorFootprint );
1150 pastedItems.push_back( clipDrawItem );
1157 parentGroup->RemoveItem( clipDrawItem );
1168 [&](
EDA_ITEM* item,
void* testData )
1178 return INSPECT_RESULT::CONTINUE;
1187 mode == PASTE_MODE::UNIQUE_ANNOTATIONS );
1194 clipFootprint->ResolveComponentClassNames(
1195 board(), clipFootprint->GetTransientComponentClassNames() );
1196 clipFootprint->ClearTransientComponentClassNames();
1199 if( mode == PASTE_MODE::REMOVE_ANNOTATIONS )
1202 clipFootprint->SetReference( defaultRef );
1206 mode == PASTE_MODE::UNIQUE_ANNOTATIONS );
1215 std::vector<BOARD_ITEM*> pastedItems;
1217 if( isFootprintEditor )
1220 delete clipFootprint;
1224 if( mode == PASTE_MODE::REMOVE_ANNOTATIONS )
1231 pastedItems.push_back( clipFootprint );
1237 mode == PASTE_MODE::UNIQUE_ANNOTATIONS );
1249 commit.
Push(
_(
"Paste" ) );
1283 std::copy_if( aList.begin(), aList.end(), std::back_inserter( aTarget ),
1286 bool doCopy = ( aItem->GetFlags() & SKIP_STRUCT ) == 0;
1288 aItem->ClearFlags( SKIP_STRUCT );
1289 aItem->SetFlags( aIsNew ? IS_NEW : 0 );
1300 std::copy_if( aList.begin(), aList.end(), std::back_inserter( aTarget ),
1303 bool doCopy = ( aItem->GetFlags() & SKIP_STRUCT ) == 0;
1305 aItem->ClearFlags( SKIP_STRUCT );
1306 aItem->SetFlags( aIsNew ? IS_NEW : 0 );
1314 bool aReannotateDuplicates )
1317 bool isNew =
board() != aBoard;
1318 std::vector<BOARD_ITEM*> items;
1342 item->SetParent(
board() );
1347 return placeBoardItems( aCommit, items, isNew, aAnchorAtOrigin, aReannotateDuplicates );
1352 bool aIsNew,
bool aAnchorAtOrigin,
bool aReannotateDuplicates )
1358 std::vector<BOARD_ITEM*> itemsToSel;
1359 itemsToSel.reserve( aItems.size() );
1365 const_cast<KIID&
>( item->m_Uuid ) =
KIID();
1367 item->RunOnDescendants(
1379 item->SetParent(
board() );
1405 if( !item->GetParentGroup() || !
alg::contains( aItems, item->GetParentGroup() ) )
1406 itemsToSel.push_back( item );
1410 EDA_ITEMS toSel( itemsToSel.begin(), itemsToSel.end() );
1420 aCommit->
Add( item );
1422 aCommit->
Added( item );
1429 if( aAnchorAtOrigin )
1484 std::map<wxString, wxString> oldProperties = brd->
GetProperties();
1485 std::map<wxString, wxString> newProperties;
1497 std::map<std::string, UTF8> props;
1501 props[
"page_width"] = std::to_string( editFrame->
GetPageSizeIU().
x );
1502 props[
"page_height"] = std::to_string( editFrame->
GetPageSizeIU().
y );
1505 [&]( wxString aTitle,
int aIcon, wxString aMessage, wxString aAction ) ->
bool
1507 KIDIALOG dlg( editFrame, aMessage, aTitle, wxOK | wxCANCEL | aIcon );
1509 if( !aAction.IsEmpty() )
1510 dlg.SetOKLabel( aAction );
1521 pi.
LoadBoard( fileName, brd, &props,
nullptr );
1532 for(
const std::pair<const wxString, wxString>& prop : oldProperties )
1533 newProperties[ prop.first ] = prop.second;
1549 if( copperLayerCount > initialCopperLayerCount )
1554 enabledLayers |= initialEnabledLayers;
1559 commit.
Push(
_(
"Append Board" ) );
1573 wxCommandEvent
dummy;
1585 wxCommandEvent
dummy;
1606 snapMode = !snapMode;
1616 if( !
Pgm().GetCommonSettings()->m_Input.hotkey_feedback )
1619 wxArrayString labels;
1620 labels.Add(
_(
"Active Layer" ) );
1621 labels.Add(
_(
"All Layers" ) );
1633 popup->
Popup(
_(
"Object Snapping" ), labels,
static_cast<int>( settings.
allLayers ) );
1648 std::vector<MSG_PANEL_ITEM> msgItems;
1650 if( routerTool && routerTool->RoutingInProgress() )
1652 routerTool->UpdateMessagePanel();
1676 msgItems.emplace_back(
_(
"UUID" ), *uuid );
1692 if( candidate->GetNet() != coupledNet )
1696 candidate->GetEnd() ) );
1698 if( !coupledItem || dist_sq < closestDist_sq )
1700 coupledItem = candidate;
1701 closestDist_sq = dist_sq;
1710 if( !msg.IsEmpty() )
1712 msgItems.emplace_back( wxString::Format(
_(
"DP Gap Constraints: %s" ), msg ),
1713 wxString::Format(
_(
"(from %s)" ), constraint.
GetName() ) );
1722 msgItems.emplace_back( wxString::Format(
_(
"DP Max Uncoupled-length: %s" ), msg ),
1723 wxString::Format(
_(
"(from %s)" ), constraint.
GetName() ) );
1741 if( a_conn && b_conn )
1747 if( overlap.count() > 0
1748 && ( a_netcode != b_netcode || a_netcode < 0 || b_netcode < 0 ) )
1753 msgItems.emplace_back(
_(
"Resolved clearance" ),
1759 int actual_clearance = a_shape->GetClearance( b_shape.get() );
1761 if( actual_clearance > -1 && actual_clearance < std::numeric_limits<int>::max() )
1763 msgItems.emplace_back(
_(
"Actual clearance" ),
1785 int actual = std::numeric_limits<int>::max();
1792 actual = std::min(
actual, hole->GetClearance( other.get() ) );
1800 actual = std::min(
actual, hole->GetClearance( other.get() ) );
1803 if(
actual < std::numeric_limits<int>::max() )
1806 msgItems.emplace_back(
_(
"Resolved hole clearance" ),
1809 if(
actual > -1 &&
actual < std::numeric_limits<int>::max() )
1811 msgItems.emplace_back(
_(
"Actual hole clearance" ),
1844 msgItems.emplace_back(
_(
"Resolved edge clearance" ),
1849 msgItems.emplace_back(
_(
"Resolved margin clearance" ),
1858 if( msgItems.empty() )
1860 msgItems.emplace_back(
_(
"Selected Items" ),
1865 std::set<wxString> netNames;
1866 std::set<wxString> netClasses;
1874 bci->GetEffectiveNetClass()->GetHumanReadableName() ) );
1876 if( netNames.size() > 1 && netClasses.size() > 1 )
1881 if( netNames.size() == 1 )
1882 msgItems.emplace_back(
_(
"Net" ), *netNames.begin() );
1884 if( netClasses.size() == 1 )
1885 msgItems.emplace_back(
_(
"Resolved Netclass" ), *netClasses.begin() );
1891 bool lengthValid =
true;
1892 double selectedLength = 0;
1895 std::function<void(
EDA_ITEM* )> accumulateTrackLength;
1897 accumulateTrackLength = [&](
EDA_ITEM* aItem )
1901 selectedLength += track->GetLength();
1905 const SHAPE_T shapeType = shape->GetShape();
1906 if( shapeType == SHAPE_T::SEGMENT || shapeType == SHAPE_T::ARC
1907 || shapeType == SHAPE_T::BEZIER )
1909 selectedLength += shape->GetLength();
1913 lengthValid =
false;
1918 group->RunOnChildren( accumulateTrackLength );
1922 lengthValid =
false;
1927 accumulateTrackLength( item );
1931 msgItems.emplace_back(
_(
"Selected 2D Length" ),
1949 wxFileName fileName = wxFileName( *aEvent.
Parameter<wxString*>() );
1956 wxString filePath = fileName.GetFullPath();
1971 frame()->GetCanvas()->ForceRefresh();
1972 frame()->OnDisplayOptionsChanged();
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
static TOOL_ACTION addLibrary
static TOOL_ACTION pickerTool
static TOOL_ACTION gridResetOrigin
static TOOL_ACTION pasteSpecial
static TOOL_ACTION highContrastModeCycle
static TOOL_ACTION highContrastMode
static TOOL_ACTION deleteTool
static TOOL_ACTION newLibrary
static TOOL_ACTION gridSetOrigin
static TOOL_ACTION ddAddLibrary
virtual void Push(const wxString &aMessage=wxEmptyString, int aCommitFlags=0) override
Execute the changes.
virtual void Revert() override
Revert the commit by restoring the modified items state.
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
NETINFO_ITEM * GetNet() const
Return #NET_INFO object for a given item.
std::shared_ptr< NET_SETTINGS > m_NetSettings
void SetGridOrigin(const VECTOR2I &aOrigin)
std::shared_ptr< DRC_ENGINE > m_DRCEngine
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
PCB_GROUP * GetParentGroup() const
virtual bool IsOnLayer(PCB_LAYER_ID aLayer) const
Test to see if this object is on the given layer.
virtual std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER, FLASHING aFlash=FLASHING::DEFAULT) const
Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes.
virtual LSET GetLayerSet() const
Return a std::bitset of all layers on which the item physically resides.
virtual bool IsLocked() const
virtual bool IsOnCopperLayer() const
virtual std::shared_ptr< SHAPE_SEGMENT > GetEffectiveHoleShape() const
virtual bool HasHole() const
Information pertinent to a Pcbnew printed circuit board.
INSPECT_RESULT Visit(INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &scanTypes) override
May be re-implemented for each derived class in order to handle all the types given by its member dat...
LSET GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
NETINFO_ITEM * DpCoupledNet(const NETINFO_ITEM *aNet)
void MapNets(BOARD *aDestBoard)
Map all nets in the given board to nets with the same name (if any) in the destination board.
const GENERATORS & Generators() const
const std::vector< BOARD_CONNECTED_ITEM * > AllConnectedItems()
void SetEnabledLayers(LSET aLayerMask)
A proxy function that calls the correspondent function in m_BoardSettings.
const PAGE_INFO & GetPageSettings() const
void SetProperties(const std::map< wxString, wxString > &aProps)
const ZONES & Zones() const
const GROUPS & Groups() const
The groups must maintain the following invariants.
bool BuildConnectivity(PROGRESS_REPORTER *aReporter=nullptr)
Build or rebuild the board connectivity database for the board, especially the list of connected item...
void SynchronizeNetsAndNetClasses(bool aResetTrackAndViaSizes)
Copy NETCLASS info to each NET, based on NET membership in a NETCLASS.
FOOTPRINT * GetFirstFootprint() const
Get the first footprint on the board or nullptr.
TITLE_BLOCK & GetTitleBlock()
int GetCopperLayerCount() const
const std::map< wxString, wxString > & GetProperties() const
const FOOTPRINTS & Footprints() const
void RemoveAll(std::initializer_list< KICAD_T > aTypes={ PCB_NETINFO_T, PCB_MARKER_T, PCB_GROUP_T, PCB_ZONE_T, PCB_GENERATOR_T, PCB_FOOTPRINT_T, PCB_TRACE_T, PCB_SHAPE_T })
An efficient way to remove all items of a certain type from the board.
const TRACKS & Tracks() const
void SetPageSettings(const PAGE_INFO &aPageSettings)
void SetVisibleLayers(LSET aLayerMask)
A proxy function that calls the correspondent function in m_BoardSettings changes the bit-mask of vis...
void SetCopperLayerCount(int aCount)
bool IsLayerVisible(PCB_LAYER_ID aLayer) const
A proxy function that calls the correspondent function in m_BoardSettings tests whether a given layer...
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
void SetTitleBlock(const TITLE_BLOCK &aTitleBlock)
const DRAWINGS & Drawings() const
int GetCount() const
Return the number of objects in the list.
void Remove(int aIndex)
Remove the item at aIndex (first position is 0).
Color settings are a bit different than most of the settings objects in that there can be more than o...
void SetColor(int aLayer, const COLOR4D &aColor)
COLOR4D GetColor(int aLayer) const
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.
DO_NOT_SHOW_AGAIN m_DoNotShowAgain
bool GetClearNets() const
MINOPTMAX< int > & Value()
bool IsType(FRAME_T aType) const
HOTKEY_CYCLE_POPUP * GetHotkeyPopup()
void DisplayToolMsg(const wxString &msg) override
void SetMsgPanel(const std::vector< MSG_PANEL_ITEM > &aList)
Clear the message panel and populates it with the contents of aList.
virtual COLOR4D GetGridColor()
virtual void Zoom_Automatique(bool aWarpPointer)
Redraw the screen with best zoom level and the best centering that shows all the page or the board.
virtual void CreateHotkeyPopup()
void ForceRefresh()
Force a redraw.
void SetCurrentCursor(KICURSOR aCursor)
Set the current cursor shape for this panel.
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)
void SetFlags(EDA_ITEM_FLAGS aMask)
virtual wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const
Return a user-visible description string of this item.
KICAD_T Type() const
Returns the type of object.
virtual void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList)
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
virtual void SetParent(EDA_ITEM *aParent)
static const TOOL_EVENT ClearedEvent
static const TOOL_EVENT SelectedEvent
static const TOOL_EVENT SelectedItemsModified
Selected items were moved, this can be very high frequency on the canvas, use with care.
static const TOOL_EVENT PointSelectedEvent
static const TOOL_EVENT ContrastModeChangedByKeyEvent
static const TOOL_EVENT ConnectivityChangedEvent
Selected item had a property changed (except movement)
static const TOOL_EVENT UnselectedEvent
A general implementation of a COLLECTORS_GUIDE.
Used when the right click button is pressed, or when the select tool is in effect.
static const std::vector< KICAD_T > BoardLevelItems
A scan list for all primary board items, omitting items which are subordinate to a FOOTPRINT,...
static const std::vector< KICAD_T > AllBoardItems
A scan list for all editable board items.
void Collect(BOARD_ITEM *aItem, const std::vector< KICAD_T > &aScanList, const VECTOR2I &aRefPos, const COLLECTORS_GUIDE &aGuide)
Scan a BOARD_ITEM using this class's Inspector method, which does the collection.
static const std::vector< KICAD_T > FootprintItems
A scan list for primary footprint items.
virtual void SetProgressReporter(PROGRESS_REPORTER *aReporter)
Set an optional progress reporter.
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
virtual const wxString What() const
A composite of Problem() and Where()
Helper class to create more flexible dialogs, including 'do not show again' checkbox handling.
void DoNotShowCheckbox(wxString file, int line)
Shows the 'do not show again' checkbox.
A color representation with 4 components: red, green, blue, alpha.
void SetGridOrigin(const VECTOR2D &aGridOrigin)
Set the origin point for the grid.
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const override
For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has chan...
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.
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
void SetMirror(bool aMirrorX, bool aMirrorY)
Control the mirroring of the VIEW.
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.
GAL * GetGAL() const
Return the #GAL this view is using to draw graphical primitives.
void RecacheAllItems()
Rebuild GAL display lists.
void UpdateLayerColor(int aLayer)
Apply the new coloring scheme held by RENDER_SETTINGS in case that it has changed.
void MarkDirty()
Force redraw of view on the next rendering.
All information about a layer pair as stored in the layer pair store.
Management class for layer pairs in a PCB.
std::vector< LAYER_PAIR_INFO > GetEnabledLayerPairs(int &aCurrentIndex) const
Get a vector of all enabled layer pairs, in order.
void SetCurrentLayerPair(const LAYER_PAIR &aPair)
Set the "active" layer pair.
LSEQ is a sequence (and therefore also a set) of PCB_LAYER_IDs.
LSET is a set of PCB_LAYER_IDs.
LSEQ UIOrder() const
Return the copper, technical and user layers in the order shown in layer widget.
LSEQ CuStack() const
Return a sequence of copper layers in starting from the front/top and extending to the back/bottom.
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
EDA_MSG_PANEL items for displaying messages.
Handle the data for a net.
static NETINFO_ITEM * OrphanedItem()
NETINFO_ITEM meaning that there was no net assigned for an item, as there was no board storing net li...
Describe the page size and margins of a paper page on which to eventually print or plot.
MAGNETIC_SETTINGS m_MagneticItems
static TOOL_ACTION layerToggle
static TOOL_ACTION layerInner12
static TOOL_ACTION layerInner8
static TOOL_ACTION zoneDisplayToggle
static TOOL_ACTION layerInner3
static TOOL_ACTION layerPrev
static TOOL_ACTION showRatsnest
static TOOL_ACTION zoneFillAll
static TOOL_ACTION layerInner2
static TOOL_ACTION magneticSnapAllLayers
static TOOL_ACTION ddAppendBoard
Drag and drop.
static TOOL_ACTION layerInner25
static TOOL_ACTION magneticSnapActiveLayer
Snapping controls.
static TOOL_ACTION layerAlphaDec
static TOOL_ACTION zoneDisplayFilled
static TOOL_ACTION layerInner24
static TOOL_ACTION viaDisplayMode
static TOOL_ACTION selectionClear
Clear the current selection.
static TOOL_ACTION layerInner29
static TOOL_ACTION layerInner11
static TOOL_ACTION layerAlphaInc
static TOOL_ACTION layerPairPresetsCycle
static TOOL_ACTION layerInner16
static TOOL_ACTION layerInner26
static TOOL_ACTION layerInner18
static TOOL_ACTION layerInner14
static TOOL_ACTION trackDisplayMode
static TOOL_ACTION magneticSnapToggle
static TOOL_ACTION layerInner6
static TOOL_ACTION ddImportFootprint
static TOOL_ACTION zoneDisplayTriangulated
static TOOL_ACTION layerInner22
static TOOL_ACTION layerInner5
static TOOL_ACTION zoneDisplayFractured
static TOOL_ACTION ratsnestModeCycle
static TOOL_ACTION layerInner20
static TOOL_ACTION layerInner7
static TOOL_ACTION layerInner27
static TOOL_ACTION appendBoard
static TOOL_ACTION netColorModeCycle
static TOOL_ACTION layerInner1
static TOOL_ACTION layerInner10
static TOOL_ACTION layerInner15
static TOOL_ACTION layerInner17
static TOOL_ACTION flipBoard
static TOOL_ACTION layerBottom
static TOOL_ACTION zoneDisplayOutline
static TOOL_ACTION ratsnestLineMode
static TOOL_ACTION layerInner19
static TOOL_ACTION layerInner9
static TOOL_ACTION move
move or drag an item
static TOOL_ACTION layerInner30
static TOOL_ACTION layerTop
static TOOL_ACTION selectItems
Select a list of items (specified as the event parameter)
static TOOL_ACTION layerInner4
static TOOL_ACTION layerInner13
static TOOL_ACTION layerInner21
static TOOL_ACTION layerNext
static TOOL_ACTION layerInner23
static TOOL_ACTION layerInner28
Common, abstract interface for edit frames.
LAYER_PAIR_SETTINGS * GetLayerPairSettings()
Acess to the layer pair settings controller of the board, if available.
bool AddLibrary(const wxString &aLibName=wxEmptyString, FP_LIB_TABLE *aTable=nullptr)
Add an existing library to either the global or project library table.
void RestoreCopyFromUndoList(wxCommandEvent &aEvent)
Undo the last edit:
APPEARANCE_CONTROLS * GetAppearancePanel()
void RestoreCopyFromRedoList(wxCommandEvent &aEvent)
Redo the last edit:
Base PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
const VECTOR2I GetPageSizeIU() const override
Works off of GetPageSettings() to return the size of the paper page in the internal units of this par...
PCBNEW_SETTINGS * GetPcbNewSettings() const
virtual void SwitchLayer(PCB_LAYER_ID aLayer)
Change the active layer in the frame.
virtual PCB_LAYER_ID GetActiveLayer() const
void OnModify() override
Must be called after a change in order to set the "modify" flag and update other data structures and ...
virtual void SaveCopyInUndoList(EDA_ITEM *aItemToCopy, UNDO_REDO aTypeCommand)
Create a new entry in undo list of commands.
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
PCB_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
virtual BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Return the BOARD_DESIGN_SETTINGS for the open project.
void SetDisplayOptions(const PCB_DISPLAY_OPTIONS &aOptions, bool aRefresh=true)
Update the current display options.
GENERAL_COLLECTORS_GUIDE GetCollectorsGuide()
virtual BOARD_ITEM_CONTAINER * GetModel() const =0
FOOTPRINT_EDITOR_SETTINGS * GetFootprintEditorSettings() const
virtual COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const override
Helper to retrieve the current color settings.
void setTransitions() override
< Sets up handlers for various events.
int AppendBoardFromFile(const TOOL_EVENT &aEvent)
int AddLibrary(const TOOL_EVENT &aEvent)
int DdAppendBoard(const TOOL_EVENT &aEvent)
int AppendBoard(PCB_IO &pi, wxString &fileName)
int DdImportFootprint(const TOOL_EVENT &aEvent)
int SnapModeFeedback(const TOOL_EVENT &aEvent)
int NetColorModeCycle(const TOOL_EVENT &aEvent)
int RatsnestModeCycle(const TOOL_EVENT &aEvent)
int TrackDisplayMode(const TOOL_EVENT &aEvent)
int DdAddLibrary(const TOOL_EVENT &aEvent)
int Redo(const TOOL_EVENT &aEvent)
int LayerPresetFeedback(const TOOL_EVENT &aEvent)
int UpdateMessagePanel(const TOOL_EVENT &aEvent)
int LayerAlphaDec(const TOOL_EVENT &aEvent)
int LayerNext(const TOOL_EVENT &aEvent)
std::unique_ptr< STATUS_TEXT_POPUP > m_statusPopup
int ToggleRatsnest(const TOOL_EVENT &aEvent)
int LayerAlphaInc(const TOOL_EVENT &aEvent)
int HighContrastModeCycle(const TOOL_EVENT &aEvent)
std::unique_ptr< KIGFX::ORIGIN_VIEWITEM > m_gridOrigin
int Quit(const TOOL_EVENT &aEvent)
int HighContrastMode(const TOOL_EVENT &aEvent)
int Undo(const TOOL_EVENT &aEvent)
int ViaDisplayMode(const TOOL_EVENT &aEvent)
PCB_BASE_FRAME * m_frame
Grid origin marker.
static void DoSetGridOrigin(KIGFX::VIEW *aView, PCB_BASE_FRAME *aFrame, EDA_ITEM *originViewItem, const VECTOR2D &aPoint)
void pruneItemLayers(std::vector< BOARD_ITEM * > &aItems)
Helper for pasting.
int GridPlaceOrigin(const TOOL_EVENT &aEvent)
int FlipPcbView(const TOOL_EVENT &aEvent)
int SnapMode(const TOOL_EVENT &aEvent)
bool placeBoardItems(BOARD_COMMIT *aCommit, std::vector< BOARD_ITEM * > &aItems, bool aIsNew, bool aAnchorAtOrigin, bool aReannotateDuplicates)
Add and select or just select for move/place command a list of board items.
int ContrastModeFeedback(const TOOL_EVENT &aEvent)
int LayerToggle(const TOOL_EVENT &aEvent)
void Reset(RESET_REASON aReason) override
Bring the tool to a known, initial state.
int Print(const TOOL_EVENT &aEvent)
int ZoneDisplayMode(const TOOL_EVENT &aEvent)
int GridResetOrigin(const TOOL_EVENT &aEvent)
BOARD_ITEM * m_pickerItem
int InteractiveDelete(const TOOL_EVENT &aEvent)
int LayerPrev(const TOOL_EVENT &aEvent)
int CycleLayerPresets(const TOOL_EVENT &aEvent)
int Paste(const TOOL_EVENT &aEvent)
void unfilledZoneCheck()
We have bug reports indicating that some new users confuse zone filling/unfilling with the display mo...
int LayerSwitch(const TOOL_EVENT &aEvent)
HIGH_CONTRAST_MODE m_ContrastModeDisplay
How inactive layers are displayed.
NET_COLOR_MODE m_NetColorMode
How to use color overrides on specific nets and netclasses.
ZONE_DISPLAY_MODE m_ZoneDisplayMode
void UpdateColors()
Update the color settings in the painter and GAL.
virtual KIGFX::PCB_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
void RedrawRatsnest()
Return the bounding box of the view that should be used if model is not valid.
The main frame for Pcbnew.
static const TOOL_EVENT & SnappingModeChangedByKeyEvent()
Hotkey feedback.
static const TOOL_EVENT & LayerPairPresetChangedByKeyEvent()
A set of BOARD_ITEMs (i.e., without duplicates).
virtual bool RemoveItem(BOARD_ITEM *aItem)
Remove item from group.
virtual bool AddItem(BOARD_ITEM *aItem)
Add item to group.
static PCB_IO * PluginFind(PCB_FILE_T aFileType)
Return a #PLUGIN which the caller can use to import, export, save, or load design documents.
PCB_FILE_T
The set of file types that the PCB_IO_MGR knows about, and for which there has been a plugin written,...
static PCB_FILE_T FindPluginTypeFromBoardPath(const wxString &aFileName, int aCtl=0)
Return a plugin type given a path for a board file.
A base class that BOARD loading and saving plugins should derive from.
virtual void SetQueryUserCallback(std::function< bool(wxString aTitle, int aIcon, wxString aMessage, wxString aAction)> aCallback)
Registers a KIDIALOG callback for collecting info from the user.
virtual BOARD * LoadBoard(const wxString &aFileName, BOARD *aAppendToMe, const std::map< std::string, UTF8 > *aProperties=nullptr, PROJECT *aProject=nullptr)
Load information from some input file format that this PCB_IO implementation knows about into either ...
Class that manages the presentation of PCB layers in a PCB frame.
wxString getLayerPairName(const LAYER_PAIR &aPair) const
PCB_LAYER_ID m_Route_Layer_TOP
PCB_LAYER_ID m_Route_Layer_BOTTOM
EDA_ITEM * GetTopLeftItem(bool aFootprintsOnly=false) const override
const VECTOR2I & GetStart() const
const VECTOR2I & GetEnd() const
bool HasValidLayerPair(int aCopperLayerCount)
virtual COMMON_SETTINGS * GetCommonSettings() const
ecoord SquaredDistance(const SEG &aSeg) const
VECTOR2I::extended_type ecoord
virtual void Add(EDA_ITEM *aItem)
virtual unsigned int GetSize() const override
Return the number of stored items.
int Size() const
Returns the number of selected parts.
void SetReferencePoint(const VECTOR2I &aP)
bool Empty() const
Checks if there is anything selected.
Hold the information shown in the lower right corner of a plot, printout, or editing view.
wxString MessageTextFromMinOptMax(const MINOPTMAX< int > &aValue) const
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
A lower-precision version of StringFromValue().
static constexpr extended_type ECOORD_MAX
A modified version of the wxInfoBar class that allows us to:
void RemoveAllButtons()
Remove all the buttons that have been added by the user.
void ShowMessageFor(const wxString &aMessage, int aTime, int aFlags=wxICON_INFORMATION, MESSAGE_TYPE aType=WX_INFOBAR::MESSAGE_TYPE::GENERIC)
Show the infobar with the provided message and icon for a specific period of time.
void AddButton(wxButton *aButton)
Add an already created button to the infobar.
Multi-thread safe progress reporter dialog, intended for use of tasks that parallel reporting back of...
Handle a list of polygons defining a copper zone.
std::string GetClipboardUTF8()
Return the information currently stored in the system clipboard.
std::unique_ptr< wxImage > GetImageFromClipboard()
Get image data from the clipboard, if there is any.
void DisplayError(wxWindow *aParent, const wxString &aText, int aDisplayTime)
Display an error or warning message box with aMessage.
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
This file is part of the common library.
@ DIFF_PAIR_GAP_CONSTRAINT
@ EDGE_CLEARANCE_CONSTRAINT
@ MAX_UNCOUPLED_CONSTRAINT
@ HOLE_CLEARANCE_CONSTRAINT
Declaration of the eda_3d_viewer class.
std::vector< EDA_ITEM * > EDA_ITEMS
Define list of drawing items for screens.
#define SKIP_STRUCT
flag indicating that the structure should be ignored
wxString KeyNameFromKeyCode(int aKeycode, bool *aIsFound)
Return the key name from the key code.
std::unique_ptr< T > IO_RELEASER
Helper to hold and release an IO_BASE object when exceptions are thrown.
This file is part of the common library.
#define KICTL_KICAD_ONLY
chosen file is from KiCad according to user
int GetNetnameLayer(int aLayer)
Return a netname layer corresponding to the given layer.
bool IsCopperLayer(int aLayerId)
Test whether a layer is a copper layer.
PCB_LAYER_ID
A quick note on layer IDs:
#define ZONE_LAYER_FOR(boardLayer)
std::optional< wxString > GetMsgPanelDisplayUuid(const KIID &aKiid)
Get a formatted UUID string for display in the message panel, according to the current advanced confi...
@ REPAINT
Item needs to be redrawn.
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
bool AskLoadBoardFileName(PCB_EDIT_FRAME *aParent, wxString *aFileName, int aCtl=0)
Show a wxFileDialog asking for a BOARD filename to open.
static void pasteFootprintItemsToFootprintEditor(FOOTPRINT *aClipFootprint, BOARD *aBoard, std::vector< BOARD_ITEM * > &aPastedItems)
static void moveUnflaggedItems(const std::deque< T > &aList, std::vector< BOARD_ITEM * > &aTarget, bool aIsNew)
Class to handle a set of BOARD_ITEMs.
bool AskLoadBoardFileName(PCB_EDIT_FRAME *aParent, wxString *aFileName, int aCtl=0)
Show a wxFileDialog asking for a BOARD filename to open.
PGM_BASE & Pgm()
The global program "get" accessor.
std::vector< FAB_LAYER_COLOR > dummy
wxString UnescapeString(const wxString &aSource)
RATSNEST_MODE m_RatsnestMode
bool m_ShowGlobalRatsnest
constexpr KICAD_T BaseType(const KICAD_T aType)
Return the underlying type of the given type.
@ PCB_SHAPE_T
class PCB_SHAPE, a segment not on copper layers
@ PCB_DIM_ORTHOGONAL_T
class PCB_DIM_ORTHOGONAL, a linear dimension constrained to x/y
@ PCB_DIM_LEADER_T
class PCB_DIM_LEADER, a leader dimension (graphic item)
@ PCB_GENERATOR_T
class PCB_GENERATOR, generator on a layer
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
@ PCB_DIM_CENTER_T
class PCB_DIM_CENTER, a center point marking (graphic item)
@ PCB_GROUP_T
class PCB_GROUP, a set of BOARD_ITEMs
@ PCB_TEXTBOX_T
class PCB_TEXTBOX, wrapped text on a layer
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
@ PCB_DIM_ALIGNED_T
class PCB_DIM_ALIGNED, a linear dimension (graphic item)
@ PCB_ARC_T
class PCB_ARC, an arc track segment on a copper layer
@ PCB_DIMENSION_T
class PCB_DIMENSION_BASE: abstract dimension meta-type
@ PCB_TABLE_T
class PCB_TABLE, table of PCB_TABLECELLs
@ PCB_TRACE_T
class PCB_TRACK, a track segment (segment on a copper layer)
@ PCB_DIM_RADIAL_T
class PCB_DIM_RADIAL, a radius or diameter dimension
VECTOR2< int32_t > VECTOR2I
Definition of file extensions used in Kicad.