Warn user when placing a junction is just going to remove it again.

Also removes a duplicate call to SaveCopyForRepeatItem (which has
already been done in AddItemToScreenAndUndoList).

Fixes https://gitlab.com/kicad/code/kicad/issues/7651
This commit is contained in:
Jeff Young 2021-02-23 12:49:38 +00:00
parent b938df0e46
commit d7b6d4a541
1 changed files with 17 additions and 3 deletions

View File

@ -31,6 +31,7 @@
#include <id.h> #include <id.h>
#include <eeschema_id.h> #include <eeschema_id.h>
#include <confirm.h> #include <confirm.h>
#include <widgets/infobar.h>
#include <view/view_controls.h> #include <view/view_controls.h>
#include <view/view.h> #include <view/view.h>
#include <sch_component.h> #include <sch_component.h>
@ -507,6 +508,7 @@ int SCH_DRAWING_TOOLS::SingleClickPlace( const TOOL_EVENT& aEvent )
EE_GRID_HELPER grid( m_toolMgr ); EE_GRID_HELPER grid( m_toolMgr );
KIGFX::VIEW_CONTROLS* controls = getViewControls(); KIGFX::VIEW_CONTROLS* controls = getViewControls();
SCH_ITEM* previewItem; SCH_ITEM* previewItem;
bool loggedInfoBarError = false;
if( m_inSingleClickPlace ) if( m_inSingleClickPlace )
return 0; return 0;
@ -635,15 +637,27 @@ int SCH_DRAWING_TOOLS::SingleClickPlace( const TOOL_EVENT& aEvent )
{ {
if( !m_frame->GetScreen()->GetItem( cursorPos, 0, type ) ) if( !m_frame->GetScreen()->GetItem( cursorPos, 0, type ) )
{ {
if( type == SCH_JUNCTION_T )
{
if( !m_frame->GetScreen()->IsJunctionNeeded( cursorPos ) )
{
m_frame->ShowInfoBarError( _( "Junction location contains no joinable "
"wires and/or pins." ) );
loggedInfoBarError = true;
continue;
}
else if( loggedInfoBarError )
{
m_frame->GetInfoBar()->Dismiss();
}
}
SCH_ITEM* newItem = static_cast<SCH_ITEM*>( previewItem->Clone() ); SCH_ITEM* newItem = static_cast<SCH_ITEM*>( previewItem->Clone() );
newItem->SetPosition( cursorPos ); newItem->SetPosition( cursorPos );
newItem->SetFlags( IS_NEW ); newItem->SetFlags( IS_NEW );
m_frame->AddItemToScreenAndUndoList( m_frame->GetScreen(), newItem, false ); m_frame->AddItemToScreenAndUndoList( m_frame->GetScreen(), newItem, false );
if( type != SCH_SHEET_PIN_T )
m_frame->SaveCopyForRepeatItem( newItem );
if( type == SCH_JUNCTION_T ) if( type == SCH_JUNCTION_T )
m_frame->TestDanglingEnds(); m_frame->TestDanglingEnds();
else else