Don't double-add pins to parent part when pasting.

Also adds undo to paste operations in LibEdit.

Fixes: lp:1829355
* https://bugs.launchpad.net/kicad/+bug/1829355
This commit is contained in:
Jeff Young 2019-05-16 23:50:29 +01:00
parent 0dd1584394
commit 68224e0fcd
3 changed files with 9 additions and 4 deletions

View File

@ -534,6 +534,9 @@ int LIB_EDIT_TOOL::PinTable( const TOOL_EVENT& aEvent )
{
LIB_PART* part = m_frame->GetCurPart();
if( !part )
return 0;
m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
saveCopyInUndoList( part, UR_LIBEDIT );
@ -634,13 +637,15 @@ int LIB_EDIT_TOOL::Paste( const TOOL_EVENT& aEvent )
return -1;
}
m_frame->SaveCopyInUndoList( part );
for( LIB_ITEM& item : newPart->GetDrawItems() )
{
if( item.Type() == LIB_FIELD_T )
continue;
LIB_ITEM* newItem = (LIB_ITEM*) item.Clone();
newItem->SetFlags( IS_NEW );
newItem->SetFlags( IS_NEW | IS_PASTED );
newItems.push_back( newItem );
part->GetDrawItems().push_back( newItem );

View File

@ -171,7 +171,7 @@ bool LIB_PIN_TOOL::PlacePin( LIB_PIN* aPin )
test->GetUnit() );
KIDIALOG dlg( m_frame, msg, _( "Confirmation" ), wxOK | wxCANCEL | wxICON_WARNING );
dlg.SetOKLabel( _( "Create Pin Anyway" ) );
dlg.SetOKLabel( _( "Place Pin Anyway" ) );
dlg.DoNotShowCheckbox( __FILE__, __LINE__ );
bool status = dlg.ShowModal() == wxID_OK;
@ -193,7 +193,7 @@ bool LIB_PIN_TOOL::PlacePin( LIB_PIN* aPin )
}
}
if( aPin->IsNew() )
if( aPin->IsNew() && !( aPin->GetFlags() & IS_PASTED ) )
{
g_LastPinOrient = aPin->GetOrientation();
g_LastPinType = aPin->GetType();

View File

@ -124,7 +124,7 @@ typedef const INSPECTOR_FUNC& INSPECTOR; /// std::function passed to nested u
#define CANDIDATE (1 << 14) ///< flag indicating that the structure is connected
#define SKIP_STRUCT (1 << 15) ///< flag indicating that the structure should be ignored
#define DO_NOT_DRAW (1 << 16) ///< Used to disable draw function
// empty spot (1 << 17)
#define IS_PASTED (1 << 17) ///< Modifier on IS_NEW which indicates it came from clipboard
#define TRACK_LOCKED (1 << 18) ///< Pcbnew: track locked: protected from global deletion
#define TRACK_AR (1 << 19) ///< Pcbnew: autorouted track
#define FLAG1 (1 << 20) ///< Pcbnew: flag used in local computations