PCB Editor: make locking menu items conditional
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/5202
This commit is contained in:
parent
44ab6876d9
commit
5d94d2634e
|
@ -1114,24 +1114,12 @@ void FOOTPRINT_EDIT_FRAME::setupUIConditions()
|
|||
mgr->SetConditions( ACTIONS::duplicate, ENABLE( cond.HasItems() ) );
|
||||
mgr->SetConditions( ACTIONS::selectAll, ENABLE( cond.HasItems() ) );
|
||||
|
||||
auto haveAtLeastOneGroupCond =
|
||||
[]( const SELECTION& aSel )
|
||||
{
|
||||
for( EDA_ITEM* item : aSel )
|
||||
{
|
||||
if( item->Type() == PCB_GROUP_T )
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
mgr->SetConditions( PCB_ACTIONS::rotateCw, ENABLE( cond.HasItems() ) );
|
||||
mgr->SetConditions( PCB_ACTIONS::rotateCcw, ENABLE( cond.HasItems() ) );
|
||||
mgr->SetConditions( PCB_ACTIONS::mirrorH, ENABLE( cond.HasItems() ) );
|
||||
mgr->SetConditions( PCB_ACTIONS::mirrorV, ENABLE( cond.HasItems() ) );
|
||||
mgr->SetConditions( PCB_ACTIONS::group, ENABLE( SELECTION_CONDITIONS::MoreThan( 1 ) ) );
|
||||
mgr->SetConditions( PCB_ACTIONS::ungroup, ENABLE( haveAtLeastOneGroupCond ) );
|
||||
mgr->SetConditions( PCB_ACTIONS::ungroup, ENABLE( SELECTION_CONDITIONS::HasType( PCB_GROUP_T ) ) );
|
||||
|
||||
mgr->SetConditions( PCB_ACTIONS::padDisplayMode, CHECK( !cond.PadFillDisplay() ) );
|
||||
mgr->SetConditions( PCB_ACTIONS::textOutlines, CHECK( !cond.TextFillDisplay() ) );
|
||||
|
@ -1294,4 +1282,4 @@ void FOOTPRINT_EDIT_FRAME::OnSaveFootprintAsPng( wxCommandEvent& event )
|
|||
// to refresh the screen before creating the PNG or JPEG image from screen
|
||||
wxYield();
|
||||
SaveCanvasImageToFile( this, dlg.GetPath() );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -684,22 +684,10 @@ void PCB_EDIT_FRAME::setupUIConditions()
|
|||
mgr->SetConditions( ACTIONS::doDelete, ENABLE( cond.HasItems() ) );
|
||||
mgr->SetConditions( ACTIONS::duplicate, ENABLE( cond.HasItems() ) );
|
||||
|
||||
auto haveAtLeastOneGroupCond =
|
||||
[]( const SELECTION& aSel )
|
||||
{
|
||||
for( EDA_ITEM* item : aSel )
|
||||
{
|
||||
if( item->Type() == PCB_GROUP_T )
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
mgr->SetConditions( PCB_ACTIONS::group, ENABLE( SELECTION_CONDITIONS::MoreThan( 1 ) ) );
|
||||
mgr->SetConditions( PCB_ACTIONS::ungroup, ENABLE( haveAtLeastOneGroupCond ) );
|
||||
mgr->SetConditions( PCB_ACTIONS::lock, ENABLE( cond.HasItems() ) );
|
||||
mgr->SetConditions( PCB_ACTIONS::unlock, ENABLE( cond.HasItems() ) );
|
||||
mgr->SetConditions( PCB_ACTIONS::ungroup, ENABLE( SELECTION_CONDITIONS::HasType( PCB_GROUP_T ) ) );
|
||||
mgr->SetConditions( PCB_ACTIONS::lock, ENABLE( PCB_SELECTION_CONDITIONS::HasUnlockedItems ) );
|
||||
mgr->SetConditions( PCB_ACTIONS::unlock, ENABLE( PCB_SELECTION_CONDITIONS::HasLockedItems ) );
|
||||
|
||||
mgr->SetConditions( PCB_ACTIONS::padDisplayMode, CHECK( !cond.PadFillDisplay() ) );
|
||||
mgr->SetConditions( PCB_ACTIONS::viaDisplayMode, CHECK( !cond.ViaFillDisplay() ) );
|
||||
|
|
|
@ -58,6 +58,7 @@
|
|||
#include <tools/drawing_tool.h>
|
||||
#include <tools/pcb_actions.h>
|
||||
#include <tools/pcb_picker_tool.h>
|
||||
#include <tools/pcb_selection_conditions.h>
|
||||
#include <tools/pcb_selection_tool.h>
|
||||
#include <tools/edit_tool.h>
|
||||
#include <tools/tool_event_utils.h>
|
||||
|
@ -106,23 +107,23 @@ protected:
|
|||
};
|
||||
|
||||
|
||||
class LOCK_CONTEXT_MENU : public ACTION_MENU
|
||||
class LOCK_CONTEXT_MENU : public CONDITIONAL_MENU
|
||||
{
|
||||
public:
|
||||
LOCK_CONTEXT_MENU() :
|
||||
ACTION_MENU( true )
|
||||
LOCK_CONTEXT_MENU( TOOL_INTERACTIVE* aTool ) :
|
||||
CONDITIONAL_MENU( aTool )
|
||||
{
|
||||
SetIcon( BITMAPS::locked );
|
||||
SetTitle( _( "Locking" ) );
|
||||
|
||||
Add( PCB_ACTIONS::lock );
|
||||
Add( PCB_ACTIONS::unlock );
|
||||
Add( PCB_ACTIONS::toggleLock );
|
||||
AddItem( PCB_ACTIONS::lock, PCB_SELECTION_CONDITIONS::HasUnlockedItems );
|
||||
AddItem( PCB_ACTIONS::unlock, PCB_SELECTION_CONDITIONS::HasLockedItems );
|
||||
AddItem( PCB_ACTIONS::toggleLock, SELECTION_CONDITIONS::ShowAlways );
|
||||
}
|
||||
|
||||
ACTION_MENU* create() const override
|
||||
{
|
||||
return new LOCK_CONTEXT_MENU();
|
||||
return new LOCK_CONTEXT_MENU( this->m_tool );
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -193,8 +194,7 @@ bool BOARD_EDITOR_CONTROL::Init()
|
|||
std::shared_ptr<ZONE_CONTEXT_MENU> zoneMenu = std::make_shared<ZONE_CONTEXT_MENU>();
|
||||
zoneMenu->SetTool( this );
|
||||
|
||||
std::shared_ptr<LOCK_CONTEXT_MENU> lockMenu = std::make_shared<LOCK_CONTEXT_MENU>();
|
||||
lockMenu->SetTool( this );
|
||||
std::shared_ptr<LOCK_CONTEXT_MENU> lockMenu = std::make_shared<LOCK_CONTEXT_MENU>( this );
|
||||
|
||||
// Add the PCB control menus to relevant other tools
|
||||
|
||||
|
|
|
@ -43,6 +43,34 @@ SELECTION_CONDITION PCB_SELECTION_CONDITIONS::SameLayer()
|
|||
}
|
||||
|
||||
|
||||
bool PCB_SELECTION_CONDITIONS::HasLockedItems( const SELECTION& aSelection )
|
||||
{
|
||||
for( EDA_ITEM* item : aSelection.Items() )
|
||||
{
|
||||
BOARD_ITEM* boardItem = dynamic_cast<BOARD_ITEM*>( item );
|
||||
|
||||
if( boardItem && boardItem->IsLocked() )
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool PCB_SELECTION_CONDITIONS::HasUnlockedItems( const SELECTION& aSelection )
|
||||
{
|
||||
for( EDA_ITEM* item : aSelection.Items() )
|
||||
{
|
||||
BOARD_ITEM* boardItem = dynamic_cast<BOARD_ITEM*>( item );
|
||||
|
||||
if( boardItem && !boardItem->IsLocked() )
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool PCB_SELECTION_CONDITIONS::sameNetFunc( const SELECTION& aSelection, bool aAllowUnconnected )
|
||||
{
|
||||
if( aSelection.Empty() )
|
||||
|
@ -107,5 +135,3 @@ bool PCB_SELECTION_CONDITIONS::sameLayerFunc( const SELECTION& aSelection )
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -56,6 +56,16 @@ public:
|
|||
*/
|
||||
static SELECTION_CONDITION SameLayer();
|
||||
|
||||
/**
|
||||
* Test if any selected items are locked.
|
||||
*/
|
||||
static bool HasLockedItems( const SELECTION& aSelection );
|
||||
|
||||
/**
|
||||
* Test if any selected items are unlocked.
|
||||
*/
|
||||
static bool HasUnlockedItems( const SELECTION& aSelection );
|
||||
|
||||
private:
|
||||
///< Helper function used by SameNet()
|
||||
static bool sameNetFunc( const SELECTION& aSelection, bool aAllowUnconnected );
|
||||
|
|
Loading…
Reference in New Issue