26#include <wx/clipbrd.h>
69 if( aSelected.
Empty() )
78 auto deleteUnselectedCells =
81 int minCol = aTable->GetColCount();
83 int minRow = aTable->GetRowCount();
86 for(
int row = 0; row < aTable->GetRowCount(); ++row )
88 for(
int col = 0; col < aTable->GetColCount(); ++col )
94 minRow = std::min( minRow, row );
95 maxRow = std::max( maxRow, row );
96 minCol = std::min( minCol, col );
97 maxCol = std::max( maxCol, col );
106 wxCHECK_MSG( maxCol >= minCol && maxRow >= minRow, ,
107 wxT(
"No selected cells!" ) );
112 for(
int row = minRow; row <= maxRow; row++ )
113 aTable->SetRowHeight( destRow++, aTable->GetRowHeight( row ) );
117 for(
int col = minCol; col <= maxCol; col++ )
118 aTable->SetColWidth( destCol++, aTable->GetColWidth( col ) );
120 aTable->DeleteMarkedCells();
121 aTable->SetColCount( ( maxCol - minCol ) + 1 );
125 std::set<PCB_TABLE*> promotedTables;
127 auto parentIsPromoted =
132 if( table->m_Uuid == cell->GetParent()->m_Uuid )
147 pad->SetNetCode( 0 );
160 else if( isFootprintEditor )
169 partialFootprint.
SetFPID(
id );
173 if( !item->IsBOARD_ITEM() )
181 if( field->IsMandatoryField() )
195 if( parentIsPromoted(
static_cast<PCB_TABLECELL*
>( item ) ) )
208 pad->SetNetCode( 0 );
212 copy->SetParentGroup(
nullptr );
220 std::vector<BOARD_ITEM*> skipped_items;
224 copy->RunOnDescendants(
233 if( field->IsMandatoryField() )
238 partialFootprint.
Add( descendant );
240 skipped_items.push_back( descendant );
245 copy->Move( -refPoint );
248 for(
BOARD_ITEM* skipped_item : skipped_items )
263 deleteUnselectedCells( table );
265 Format( &partialFootprint, 0 );
275 m_formatter.
Print( 0,
"(kicad_pcb (version %d) (generator \"pcbnew\") (generator_version \"%s\")\n",
287 if( !item->IsBOARD_ITEM() )
293 wxCHECK2( boardItem,
continue );
308 if ( textItem->
GetText() == wxT(
"${VALUE}" ) )
310 else if ( textItem->
GetText() == wxT(
"${REFERENCE}" ) )
320 if( textItem->
GetText() == wxT(
"${VALUE}" ) )
322 else if( textItem->
GetText() == wxT(
"${REFERENCE}" ) )
335 if( parentIsPromoted(
static_cast<PCB_TABLECELL*
>( item ) ) )
360 if( field->IsMandatoryField() )
367 copy->SetLocked(
false );
370 copy->Move( -refPoint );
376 if( promotedTables.count( table ) )
377 deleteUnselectedCells( table );
384 copy->RunOnDescendants(
392 copy->SetParentGroup(
nullptr );
402 auto clipboard = wxTheClipboard;
403 wxClipboardLocker clipboardLock( clipboard );
405 if( !clipboardLock || !clipboard->IsOpened() )
421 if( clipboard->IsSupported( wxDF_TEXT ) || clipboard->IsSupported( wxDF_UNICODETEXT ) )
423 wxTextDataObject data;
424 clipboard->GetData( data );
438 auto clipboard = wxTheClipboard;
439 wxClipboardLocker clipboardLock( clipboard );
444 if( clipboard->IsSupported( wxDF_TEXT ) || clipboard->IsSupported( wxDF_UNICODETEXT ) )
446 wxTextDataObject data;
447 clipboard->GetData( data );
448 result = data.GetText();
465 const std::map<std::string, UTF8>* aProperties )
486 auto clipboard = wxTheClipboard;
487 wxClipboardLocker clipboardLock( clipboard );
492 clipboard->SetData(
new wxTextDataObject(
500 if( clipboard->IsSupported( wxDF_TEXT ) || clipboard->IsSupported( wxDF_UNICODETEXT ) )
502 wxTextDataObject data;
503 clipboard->GetData( data );
510 const std::map<std::string, UTF8>* aProperties,
PROJECT* aProject )
518 auto clipboard = wxTheClipboard;
519 wxClipboardLocker clipboardLock( clipboard );
524 if( clipboard->IsSupported( wxDF_TEXT ) || clipboard->IsSupported( wxDF_UNICODETEXT ) )
526 wxTextDataObject data;
527 clipboard->GetData( data );
529 result = data.GetText().mb_str();
532 std::function<bool( wxString,
int, wxString, wxString )> queryUser =
533 [&]( wxString aTitle,
int aIcon, wxString aMessage, wxString aAction ) ->
bool
535 KIDIALOG dlg(
nullptr, aMessage, aTitle, wxOK | wxCANCEL | aIcon );
537 if( !aAction.IsEmpty() )
538 dlg.SetOKLabel( aAction );
555 item = parser.
Parse();
573 THROW_PARSE_ERROR(
_(
"Clipboard content is not KiCad compatible" ), parser.CurSource(),
574 parser.CurLine(), parser.CurLineNumber(), parser.CurOffset() );
578 board =
dynamic_cast<BOARD*
>( item );
582 if( board && !aAppendToMe )
wxString GetMajorMinorVersion()
Get only the major and minor version in a string major.minor.
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.
void SetParentGroup(PCB_GROUP *aGroup)
virtual void SetLocked(bool aLocked)
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
FOOTPRINT * GetParentFootprint() const
Information pertinent to a Pcbnew printed circuit board.
void SetFileName(const wxString &aFileName)
const FOOTPRINTS & Footprints() const
void SaveSelection(const PCB_SELECTION &selected, bool isFootprintEditor)
STRING_FORMATTER m_formatter
void SaveBoard(const wxString &aFileName, BOARD *aBoard, const std::map< std::string, UTF8 > *aProperties=nullptr) override
Write aBoard to a storage file in a format that this PCB_IO implementation knows about or it can be u...
void SetBoard(BOARD *aBoard)
BOARD * LoadBoard(const wxString &aFileName, BOARD *aAppendToMe, const std::map< std::string, UTF8 > *aProperties=nullptr, PROJECT *aProject=nullptr) override
Load information from some input file format that this PCB_IO implementation knows about into either ...
A base class for most all the KiCad significant classes used in schematics and boards.
void SetFlags(EDA_ITEM_FLAGS aMask)
KICAD_T Type() const
Returns the type of object.
virtual void SetParent(EDA_ITEM *aParent)
virtual EDA_ITEM * Clone() const
Create a duplicate of this item with linked list members set to NULL.
virtual const wxString & GetText() const
Return the string associated with the text object.
void SetAttributes(const EDA_TEXT &aSrc, bool aSetPosition=true)
Set the text attributes from another instance.
wxString GetHyperlink() const
const TEXT_ATTRIBUTES & GetAttributes() const
void SetHyperlink(wxString aLink)
virtual void SetText(const wxString &aText)
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
Helper class to create more flexible dialogs, including 'do not show again' checkbox handling.
void DoNotShowCheckbox(wxString file, int line)
Checks the 'do not show again' setting for the dialog.
A logical library item identifier and consists of various portions much like a URI.
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
void SetBoard(const BOARD *aBoard)
Set a BOARD object that is used to prepare the net code map.
A set of BOARD_ITEMs (i.e., without duplicates).
Read a Pcbnew s-expression formatted LINE_READER object and returns the appropriate BOARD_ITEM object...
bool IsTooRecent()
Return whether a version number, if any was parsed, was too recent.
wxString GetRequiredVersion()
Return a string representing the version of KiCad required to open this file.
A #PLUGIN derivation for saving and loading Pcbnew s-expression formatted files.
NETINFO_MAPPING * m_mapping
mapping for net codes, so only not empty net codes are stored with consecutive integers as net codes
void formatNetInformation(const BOARD *aBoard, int aNestLevel=0) const
formats the Nets and Netclasses
void Format(const BOARD_ITEM *aItem, int aNestLevel=0) const
Output aItem to aFormatter in s-expression format.
BOARD_ITEM * Parse(const wxString &aClipboardSourceInput)
void init(const std::map< std::string, UTF8 > *aProperties)
void formatBoardLayers(const BOARD *aBoard, int aNestLevel=0) const
formats the board layer information
OUTPUTFORMATTER * m_out
output any Format()s to this, no ownership
BOARD * m_board
The board BOARD being worked on, no ownership here.
virtual VECTOR2I GetPosition() const override
virtual void SetPosition(const VECTOR2I &aPos) override
EDA_ANGLE GetDrawRotation() const override
Container for project specific data.
VECTOR2I GetReferencePoint() const
int Size() const
Returns the number of selected parts.
bool Empty() const
Checks if there is anything selected.
bool HasReferencePoint() const
Is a LINE_READER that reads from a multiline 8 bit wide std::string.
static void SetReporter(REPORTER *aReporter)
Set the reporter to use for reporting font substitution warnings.
#define STRUCT_DELETED
flag indication structures to be erased
void ignore_unused(const T &)
#define THROW_PARSE_ERROR(aProblem, aSource, aInputLine, aLineNumber, aByteIndex)
This file is part of the common library.
Class to handle a set of BOARD_ITEMs.
#define CTL_FOR_CLIPBOARD
Format output for the clipboard instead of footprint library or BOARD.
#define SEXPR_BOARD_FILE_VERSION
Current s-expression file format version. 2 was the last legacy format version.
Pcbnew s-expression file format parser definition.
std::vector< FAB_LAYER_COLOR > dummy
A filename or source description, a problem input line, a line number, a byte offset,...
@ PCB_GENERATOR_T
class PCB_GENERATOR, generator on a layer
@ PCB_GROUP_T
class PCB_GROUP, a set of BOARD_ITEMs
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
@ PCB_FIELD_T
class PCB_FIELD, text associated with a footprint property
@ PCB_TABLECELL_T
class PCB_TABLECELL, PCB_TEXTBOX for use in tables
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
@ PCB_PAD_T
class PAD, a pad in a footprint
@ PCB_TABLE_T
class PCB_TABLE, table of PCB_TABLECELLs
VECTOR2< int32_t > VECTOR2I