Schematic: make menu bar rotation items conditional
Also fix some items not getting a context menu rotate action.
This commit is contained in:
parent
438c4b58a3
commit
f1fab140a1
|
@ -414,6 +414,16 @@ void SCH_EDIT_FRAME::setupUIConditions()
|
||||||
return m_auimgr.GetPane( SchematicHierarchyPaneName() ).IsShown();
|
return m_auimgr.GetPane( SchematicHierarchyPaneName() ).IsShown();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
auto orientCondition =
|
||||||
|
[]( const SELECTION& aSel )
|
||||||
|
{
|
||||||
|
if( SCH_LINE_WIRE_BUS_TOOL::IsDrawingLineWireOrBus( aSel ) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return SELECTION_CONDITIONS::HasTypes( SCH_EDIT_TOOL::RotatableItems )( aSel );
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define ENABLE( x ) ACTION_CONDITIONS().Enable( x )
|
#define ENABLE( x ) ACTION_CONDITIONS().Enable( x )
|
||||||
#define CHECK( x ) ACTION_CONDITIONS().Check( x )
|
#define CHECK( x ) ACTION_CONDITIONS().Check( x )
|
||||||
|
@ -443,10 +453,10 @@ void SCH_EDIT_FRAME::setupUIConditions()
|
||||||
mgr->SetConditions( ACTIONS::duplicate, ENABLE( hasElements ) );
|
mgr->SetConditions( ACTIONS::duplicate, ENABLE( hasElements ) );
|
||||||
mgr->SetConditions( ACTIONS::selectAll, ENABLE( hasElements ) );
|
mgr->SetConditions( ACTIONS::selectAll, ENABLE( hasElements ) );
|
||||||
|
|
||||||
mgr->SetConditions( EE_ACTIONS::rotateCW, ENABLE( hasElements ) );
|
mgr->SetConditions( EE_ACTIONS::rotateCW, ENABLE( orientCondition ) );
|
||||||
mgr->SetConditions( EE_ACTIONS::rotateCCW, ENABLE( hasElements ) );
|
mgr->SetConditions( EE_ACTIONS::rotateCCW, ENABLE( orientCondition ) );
|
||||||
mgr->SetConditions( EE_ACTIONS::mirrorH, ENABLE( hasElements ) );
|
mgr->SetConditions( EE_ACTIONS::mirrorH, ENABLE( orientCondition ) );
|
||||||
mgr->SetConditions( EE_ACTIONS::mirrorV, ENABLE( hasElements ) );
|
mgr->SetConditions( EE_ACTIONS::mirrorV, ENABLE( orientCondition ) );
|
||||||
|
|
||||||
mgr->SetConditions( ACTIONS::zoomTool,
|
mgr->SetConditions( ACTIONS::zoomTool,
|
||||||
CHECK( cond.CurrentTool( ACTIONS::zoomTool ) ) );
|
CHECK( cond.CurrentTool( ACTIONS::zoomTool ) ) );
|
||||||
|
|
|
@ -193,29 +193,10 @@ bool SCH_EDIT_TOOL::Init()
|
||||||
auto orientCondition =
|
auto orientCondition =
|
||||||
[]( const SELECTION& aSel )
|
[]( const SELECTION& aSel )
|
||||||
{
|
{
|
||||||
if( aSel.Empty() )
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if( SCH_LINE_WIRE_BUS_TOOL::IsDrawingLineWireOrBus( aSel ) )
|
if( SCH_LINE_WIRE_BUS_TOOL::IsDrawingLineWireOrBus( aSel ) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if( aSel.GetSize() > 1 )
|
return SELECTION_CONDITIONS::HasTypes( SCH_EDIT_TOOL::RotatableItems )( aSel );
|
||||||
return true;
|
|
||||||
|
|
||||||
SCH_ITEM* item = (SCH_ITEM*) aSel.Front();
|
|
||||||
|
|
||||||
switch( item->Type() )
|
|
||||||
{
|
|
||||||
case SCH_MARKER_T:
|
|
||||||
case SCH_JUNCTION_T:
|
|
||||||
case SCH_NO_CONNECT_T:
|
|
||||||
case SCH_PIN_T:
|
|
||||||
return false;
|
|
||||||
case SCH_LINE_T:
|
|
||||||
return item->GetLayer() != LAYER_WIRE && item->GetLayer() != LAYER_BUS;
|
|
||||||
default:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
auto propertiesCondition =
|
auto propertiesCondition =
|
||||||
|
@ -510,7 +491,7 @@ bool SCH_EDIT_TOOL::Init()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const std::vector<KICAD_T> rotatableItems = {
|
const std::vector<KICAD_T> SCH_EDIT_TOOL::RotatableItems = {
|
||||||
SCH_SHAPE_T,
|
SCH_SHAPE_T,
|
||||||
SCH_TEXT_T,
|
SCH_TEXT_T,
|
||||||
SCH_TEXTBOX_T,
|
SCH_TEXTBOX_T,
|
||||||
|
@ -526,15 +507,13 @@ const std::vector<KICAD_T> rotatableItems = {
|
||||||
SCH_BUS_BUS_ENTRY_T,
|
SCH_BUS_BUS_ENTRY_T,
|
||||||
SCH_BUS_WIRE_ENTRY_T,
|
SCH_BUS_WIRE_ENTRY_T,
|
||||||
SCH_LINE_T,
|
SCH_LINE_T,
|
||||||
SCH_JUNCTION_T,
|
|
||||||
SCH_NO_CONNECT_T
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
int SCH_EDIT_TOOL::Rotate( const TOOL_EVENT& aEvent )
|
int SCH_EDIT_TOOL::Rotate( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
bool clockwise = ( aEvent.Matches( EE_ACTIONS::rotateCW.MakeEvent() ) );
|
bool clockwise = ( aEvent.Matches( EE_ACTIONS::rotateCW.MakeEvent() ) );
|
||||||
EE_SELECTION& selection = m_selectionTool->RequestSelection( rotatableItems );
|
EE_SELECTION& selection = m_selectionTool->RequestSelection( RotatableItems );
|
||||||
|
|
||||||
if( selection.GetSize() == 0 )
|
if( selection.GetSize() == 0 )
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -797,7 +776,7 @@ int SCH_EDIT_TOOL::Rotate( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
int SCH_EDIT_TOOL::Mirror( const TOOL_EVENT& aEvent )
|
int SCH_EDIT_TOOL::Mirror( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
EE_SELECTION& selection = m_selectionTool->RequestSelection( rotatableItems );
|
EE_SELECTION& selection = m_selectionTool->RequestSelection( RotatableItems );
|
||||||
|
|
||||||
if( selection.GetSize() == 0 )
|
if( selection.GetSize() == 0 )
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1447,7 +1426,7 @@ int SCH_EDIT_TOOL::EditField( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
int SCH_EDIT_TOOL::AutoplaceFields( const TOOL_EVENT& aEvent )
|
int SCH_EDIT_TOOL::AutoplaceFields( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
EE_SELECTION& selection = m_selectionTool->RequestSelection( rotatableItems );
|
EE_SELECTION& selection = m_selectionTool->RequestSelection( RotatableItems );
|
||||||
SCH_ITEM* head = static_cast<SCH_ITEM*>( selection.Front() );
|
SCH_ITEM* head = static_cast<SCH_ITEM*>( selection.Front() );
|
||||||
bool moving = head && head->IsMoving();
|
bool moving = head && head->IsMoving();
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,8 @@ public:
|
||||||
SCH_EDIT_TOOL();
|
SCH_EDIT_TOOL();
|
||||||
~SCH_EDIT_TOOL() override { }
|
~SCH_EDIT_TOOL() override { }
|
||||||
|
|
||||||
|
static const std::vector<KICAD_T> RotatableItems;
|
||||||
|
|
||||||
/// @copydoc TOOL_INTERACTIVE::Init()
|
/// @copydoc TOOL_INTERACTIVE::Init()
|
||||||
bool Init() override;
|
bool Init() override;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue