Correctly handle excluding an ERC marker in eeschema when right clicking
In addition, hide the option to exclude a marker if the selected marker
is already excluded.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/10173
(cherry picked from commit 701e256b3f
)
This commit is contained in:
parent
11c967b259
commit
e19acb4632
|
@ -675,15 +675,22 @@ void DIALOG_ERC::NextMarker()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DIALOG_ERC::ExcludeMarker()
|
void DIALOG_ERC::ExcludeMarker( SCH_MARKER* aMarker )
|
||||||
{
|
{
|
||||||
|
SCH_MARKER* marker = aMarker;
|
||||||
|
|
||||||
|
if( marker != nullptr )
|
||||||
|
m_markerTreeModel->SelectMarker( marker );
|
||||||
|
|
||||||
if( m_notebook->GetSelection() != 1 )
|
if( m_notebook->GetSelection() != 1 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
RC_TREE_NODE* node = RC_TREE_MODEL::ToNode( m_markerDataView->GetCurrentItem() );
|
RC_TREE_NODE* node = RC_TREE_MODEL::ToNode( m_markerDataView->GetCurrentItem() );
|
||||||
SCH_MARKER* marker = dynamic_cast<SCH_MARKER*>( node->m_RcItem->GetParent() );
|
|
||||||
|
|
||||||
if( marker && !marker->IsExcluded() )
|
if( node && node->m_RcItem )
|
||||||
|
marker = dynamic_cast<SCH_MARKER*>( node->m_RcItem->GetParent() );
|
||||||
|
|
||||||
|
if( node && marker && !marker->IsExcluded() )
|
||||||
{
|
{
|
||||||
marker->SetExcluded( true );
|
marker->SetExcluded( true );
|
||||||
m_parent->GetCanvas()->GetView()->Update( marker );
|
m_parent->GetCanvas()->GetView()->Update( marker );
|
||||||
|
|
|
@ -37,6 +37,9 @@
|
||||||
#define DIALOG_ERC_WINDOW_NAME "DialogErcWindowName"
|
#define DIALOG_ERC_WINDOW_NAME "DialogErcWindowName"
|
||||||
|
|
||||||
|
|
||||||
|
class SCH_MARKER;
|
||||||
|
|
||||||
|
|
||||||
class DIALOG_ERC : public DIALOG_ERC_BASE, PROGRESS_REPORTER_BASE
|
class DIALOG_ERC : public DIALOG_ERC_BASE, PROGRESS_REPORTER_BASE
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -50,7 +53,14 @@ public:
|
||||||
|
|
||||||
void PrevMarker();
|
void PrevMarker();
|
||||||
void NextMarker();
|
void NextMarker();
|
||||||
void ExcludeMarker();
|
|
||||||
|
/**
|
||||||
|
* Exclude aMarker from the ERC list. If aMarker is nullptr, exclude the selected marker
|
||||||
|
* in this dialog.
|
||||||
|
*
|
||||||
|
* @param aMarker aMarker to exclude
|
||||||
|
*/
|
||||||
|
void ExcludeMarker( SCH_MARKER* aMarker = nullptr );
|
||||||
|
|
||||||
void UpdateAnnotationWarning();
|
void UpdateAnnotationWarning();
|
||||||
|
|
||||||
|
|
|
@ -70,14 +70,11 @@ bool EE_INSPECTION_TOOL::Init()
|
||||||
{
|
{
|
||||||
EE_TOOL_BASE::Init();
|
EE_TOOL_BASE::Init();
|
||||||
|
|
||||||
auto singleMarkerCondition = SELECTION_CONDITIONS::OnlyType( SCH_MARKER_T )
|
|
||||||
&& SELECTION_CONDITIONS::Count( 1 );
|
|
||||||
|
|
||||||
// Add inspection actions to the selection tool menu
|
// Add inspection actions to the selection tool menu
|
||||||
//
|
//
|
||||||
CONDITIONAL_MENU& selToolMenu = m_selectionTool->GetToolMenu().GetMenu();
|
CONDITIONAL_MENU& selToolMenu = m_selectionTool->GetToolMenu().GetMenu();
|
||||||
|
|
||||||
selToolMenu.AddItem( EE_ACTIONS::excludeMarker, singleMarkerCondition, 100 );
|
selToolMenu.AddItem( EE_ACTIONS::excludeMarker, EE_CONDITIONS::SingleNonExcludedMarker, 100 );
|
||||||
|
|
||||||
selToolMenu.AddItem( EE_ACTIONS::showDatasheet,
|
selToolMenu.AddItem( EE_ACTIONS::showDatasheet,
|
||||||
EE_CONDITIONS::SingleSymbol && EE_CONDITIONS::Idle, 220 );
|
EE_CONDITIONS::SingleSymbol && EE_CONDITIONS::Idle, 220 );
|
||||||
|
@ -171,26 +168,27 @@ int EE_INSPECTION_TOOL::NextMarker( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
int EE_INSPECTION_TOOL::ExcludeMarker( const TOOL_EVENT& aEvent )
|
int EE_INSPECTION_TOOL::ExcludeMarker( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
|
EE_SELECTION_TOOL* selTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
|
||||||
|
EE_SELECTION& selection = selTool->GetSelection();
|
||||||
|
SCH_MARKER* marker = nullptr;
|
||||||
|
|
||||||
|
if( selection.GetSize() == 1 && selection.Front()->Type() == SCH_MARKER_T )
|
||||||
|
marker = static_cast<SCH_MARKER*>( selection.Front() );
|
||||||
|
|
||||||
if( m_ercDialog )
|
if( m_ercDialog )
|
||||||
{
|
{
|
||||||
// Let the ERC dialog handle it since it has more update hassles to worry about
|
// Let the ERC dialog handle it since it has more update hassles to worry about
|
||||||
m_ercDialog->ExcludeMarker();
|
// Note that if marker is nullptr the dialog will exclude whichever marker is selected
|
||||||
|
// in the dialog itself
|
||||||
|
m_ercDialog->ExcludeMarker( marker );
|
||||||
}
|
}
|
||||||
else
|
else if( marker != nullptr )
|
||||||
{
|
{
|
||||||
EE_SELECTION_TOOL* selTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
|
|
||||||
EE_SELECTION& selection = selTool->GetSelection();
|
|
||||||
|
|
||||||
if( selection.GetSize() == 1 && selection.Front()->Type() == SCH_MARKER_T )
|
|
||||||
{
|
|
||||||
SCH_MARKER* marker = static_cast<SCH_MARKER*>( selection.Front() );
|
|
||||||
|
|
||||||
marker->SetExcluded( true );
|
marker->SetExcluded( true );
|
||||||
m_frame->GetCanvas()->GetView()->Update( marker );
|
m_frame->GetCanvas()->GetView()->Update( marker );
|
||||||
m_frame->GetCanvas()->Refresh();
|
m_frame->GetCanvas()->Refresh();
|
||||||
m_frame->OnModify();
|
m_frame->OnModify();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
#include <sch_item.h>
|
#include <sch_item.h>
|
||||||
#include <sch_line.h>
|
#include <sch_line.h>
|
||||||
#include <sch_junction.h>
|
#include <sch_junction.h>
|
||||||
|
#include <sch_marker.h>
|
||||||
#include <sch_sheet.h>
|
#include <sch_sheet.h>
|
||||||
#include <sch_sheet_pin.h>
|
#include <sch_sheet_pin.h>
|
||||||
#include <lib_shape.h>
|
#include <lib_shape.h>
|
||||||
|
@ -107,6 +108,15 @@ SELECTION_CONDITION EE_CONDITIONS::SingleMultiUnitSymbol = []( const SELECTION&
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
SELECTION_CONDITION EE_CONDITIONS::SingleNonExcludedMarker = []( const SELECTION& aSel )
|
||||||
|
{
|
||||||
|
if( aSel.CountType( SCH_MARKER_T ) != 1 )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return !static_cast<SCH_MARKER*>( aSel.Front() )->IsExcluded();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#define HITTEST_THRESHOLD_PIXELS 5
|
#define HITTEST_THRESHOLD_PIXELS 5
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,7 @@ public:
|
||||||
static SELECTION_CONDITION SingleSymbolOrPower;
|
static SELECTION_CONDITION SingleSymbolOrPower;
|
||||||
static SELECTION_CONDITION SingleDeMorganSymbol;
|
static SELECTION_CONDITION SingleDeMorganSymbol;
|
||||||
static SELECTION_CONDITION SingleMultiUnitSymbol;
|
static SELECTION_CONDITION SingleMultiUnitSymbol;
|
||||||
|
static SELECTION_CONDITION SingleNonExcludedMarker;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue