Disable editing tools on the canvas when DRC is running
This commit is contained in:
parent
975e5562a0
commit
d3dd1c45b6
|
@ -711,37 +711,51 @@ void PCB_EDIT_FRAME::setupUIConditions()
|
||||||
|
|
||||||
#define CURRENT_TOOL( action ) mgr->SetConditions( action, CHECK( cond.CurrentTool( action ) ) )
|
#define CURRENT_TOOL( action ) mgr->SetConditions( action, CHECK( cond.CurrentTool( action ) ) )
|
||||||
|
|
||||||
|
// These tools can be used at any time to inspect the board
|
||||||
CURRENT_TOOL( ACTIONS::zoomTool );
|
CURRENT_TOOL( ACTIONS::zoomTool );
|
||||||
CURRENT_TOOL( ACTIONS::deleteTool );
|
|
||||||
CURRENT_TOOL( ACTIONS::measureTool );
|
CURRENT_TOOL( ACTIONS::measureTool );
|
||||||
CURRENT_TOOL( ACTIONS::selectionTool );
|
CURRENT_TOOL( ACTIONS::selectionTool );
|
||||||
CURRENT_TOOL( PCB_ACTIONS::highlightNetTool );
|
CURRENT_TOOL( PCB_ACTIONS::highlightNetTool );
|
||||||
CURRENT_TOOL( PCB_ACTIONS::localRatsnestTool );
|
CURRENT_TOOL( PCB_ACTIONS::localRatsnestTool );
|
||||||
CURRENT_TOOL( PCB_ACTIONS::placeModule );
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::routeSingleTrack);
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::drawVia );
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::drawZone );
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::drawZoneKeepout );
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::drawLine );
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::drawRectangle );
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::drawCircle );
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::drawArc );
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::drawPolygon );
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::placeText );
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::drawAlignedDimension );
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::drawCenterDimension );
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::drawLeader );
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::placeTarget );
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::drillOrigin );
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::gridSetOrigin );
|
|
||||||
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::microwaveCreateLine );
|
|
||||||
CURRENT_TOOL( PCB_ACTIONS::microwaveCreateGap );
|
auto isDrcRunning =
|
||||||
CURRENT_TOOL( PCB_ACTIONS::microwaveCreateStub );
|
[this] ( const SELECTION& )
|
||||||
CURRENT_TOOL( PCB_ACTIONS::microwaveCreateStubArc );
|
{
|
||||||
CURRENT_TOOL( PCB_ACTIONS::microwaveCreateFunctionShape );
|
DRC_TOOL* tool = m_toolManager->GetTool<DRC_TOOL>();
|
||||||
|
return !tool->IsDRCRunning();
|
||||||
|
};
|
||||||
|
|
||||||
|
#define CURRENT_EDIT_TOOL( action ) mgr->SetConditions( action, ACTION_CONDITIONS().Check( cond.CurrentTool( action ) ).Enable( isDrcRunning ) )
|
||||||
|
|
||||||
|
// These tools edit the board, so they must be disabled during some operations
|
||||||
|
CURRENT_EDIT_TOOL( ACTIONS::deleteTool );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::placeModule );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::routeSingleTrack);
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::drawVia );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::drawZone );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::drawZoneKeepout );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::drawLine );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::drawRectangle );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::drawCircle );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::drawArc );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::drawPolygon );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::placeText );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::drawAlignedDimension );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::drawCenterDimension );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::drawLeader );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::placeTarget );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::drillOrigin );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::gridSetOrigin );
|
||||||
|
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::microwaveCreateLine );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::microwaveCreateGap );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::microwaveCreateStub );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::microwaveCreateStubArc );
|
||||||
|
CURRENT_EDIT_TOOL( PCB_ACTIONS::microwaveCreateFunctionShape );
|
||||||
|
|
||||||
#undef CURRENT_TOOL
|
#undef CURRENT_TOOL
|
||||||
|
#undef CURRENT_EDIT_TOOL
|
||||||
#undef ENABLE
|
#undef ENABLE
|
||||||
#undef CHECK
|
#undef CHECK
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,8 @@ DRC_TOOL::DRC_TOOL() :
|
||||||
PCB_TOOL_BASE( "pcbnew.DRCTool" ),
|
PCB_TOOL_BASE( "pcbnew.DRCTool" ),
|
||||||
m_editFrame( nullptr ),
|
m_editFrame( nullptr ),
|
||||||
m_pcb( nullptr ),
|
m_pcb( nullptr ),
|
||||||
m_drcDialog( nullptr )
|
m_drcDialog( nullptr ),
|
||||||
|
m_drcRunning( false )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,6 +155,8 @@ void DRC_TOOL::RunTests( PROGRESS_REPORTER* aProgressReporter, bool aTestTracksA
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_drcRunning = true;
|
||||||
|
|
||||||
if( aRefillZones )
|
if( aRefillZones )
|
||||||
{
|
{
|
||||||
aProgressReporter->AdvancePhase( _( "Refilling all zones..." ) );
|
aProgressReporter->AdvancePhase( _( "Refilling all zones..." ) );
|
||||||
|
@ -218,6 +221,8 @@ void DRC_TOOL::RunTests( PROGRESS_REPORTER* aProgressReporter, bool aTestTracksA
|
||||||
|
|
||||||
commit.Push( _( "DRC" ), false );
|
commit.Push( _( "DRC" ), false );
|
||||||
|
|
||||||
|
m_drcRunning = false;
|
||||||
|
|
||||||
// update the m_drcDialog listboxes
|
// update the m_drcDialog listboxes
|
||||||
updatePointers();
|
updatePointers();
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,7 @@ private:
|
||||||
PCB_EDIT_FRAME* m_editFrame; // The pcb frame editor which owns the board
|
PCB_EDIT_FRAME* m_editFrame; // The pcb frame editor which owns the board
|
||||||
BOARD* m_pcb;
|
BOARD* m_pcb;
|
||||||
DIALOG_DRC* m_drcDialog;
|
DIALOG_DRC* m_drcDialog;
|
||||||
|
bool m_drcRunning;
|
||||||
|
|
||||||
std::shared_ptr<DRC_ENGINE> m_drcEngine;
|
std::shared_ptr<DRC_ENGINE> m_drcEngine;
|
||||||
|
|
||||||
|
@ -97,6 +98,13 @@ public:
|
||||||
*/
|
*/
|
||||||
bool IsDRCDialogShown();
|
bool IsDRCDialogShown();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check to see if the DRC engine is running the tests
|
||||||
|
*
|
||||||
|
* @return true if the DRC engine is running the tests
|
||||||
|
*/
|
||||||
|
bool IsDRCRunning() const { return m_drcRunning; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Closes and frees the DRC dialog.
|
* Closes and frees the DRC dialog.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue