Real-time highlighting for PlEditor delete tool.
This commit is contained in:
parent
4eaba20cd3
commit
89d1d3d299
|
@ -275,22 +275,6 @@ int LIB_EDIT_TOOL::DoDelete( const TOOL_EVENT& aEvent )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool deleteItem( SCH_BASE_FRAME* aFrame, const VECTOR2D& aPosition )
|
|
||||||
{
|
|
||||||
EE_SELECTION_TOOL* selectionTool = aFrame->GetToolManager()->GetTool<EE_SELECTION_TOOL>();
|
|
||||||
wxCHECK( selectionTool, false );
|
|
||||||
|
|
||||||
aFrame->GetToolManager()->RunAction( EE_ACTIONS::clearSelection, true );
|
|
||||||
|
|
||||||
EDA_ITEM* item = selectionTool->SelectPoint( aPosition );
|
|
||||||
|
|
||||||
if( item )
|
|
||||||
aFrame->GetToolManager()->RunAction( EE_ACTIONS::doDelete, true );
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#define HITTEST_THRESHOLD_PIXELS 5
|
#define HITTEST_THRESHOLD_PIXELS 5
|
||||||
|
|
||||||
|
|
||||||
|
@ -339,7 +323,7 @@ int LIB_EDIT_TOOL::DeleteItemCursor( const TOOL_EVENT& aEvent )
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
|
|
||||||
picker->SetFinalizeHandler( [&]( const int& aFinalState )
|
picker->SetFinalizeHandler( [this] ( const int& aFinalState )
|
||||||
{
|
{
|
||||||
if( m_pickerItem )
|
if( m_pickerItem )
|
||||||
m_toolMgr->GetTool<EE_SELECTION_TOOL>()->UnbrightenItem( m_pickerItem );
|
m_toolMgr->GetTool<EE_SELECTION_TOOL>()->UnbrightenItem( m_pickerItem );
|
||||||
|
|
|
@ -349,21 +349,70 @@ static bool deleteItem( PL_EDITOR_FRAME* aFrame, const VECTOR2D& aPosition )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define HITTEST_THRESHOLD_PIXELS 5
|
||||||
|
|
||||||
|
|
||||||
int PL_EDIT_TOOL::DeleteItemCursor( const TOOL_EVENT& aEvent )
|
int PL_EDIT_TOOL::DeleteItemCursor( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
m_frame->SetTool( aEvent.GetCommandStr().get() );
|
m_frame->SetTool( aEvent.GetCommandStr().get() );
|
||||||
Activate();
|
Activate();
|
||||||
|
|
||||||
PL_PICKER_TOOL* picker = m_toolMgr->GetTool<PL_PICKER_TOOL>();
|
PL_PICKER_TOOL* picker = m_toolMgr->GetTool<PL_PICKER_TOOL>();
|
||||||
wxCHECK( picker, 0 );
|
m_pickerItem = nullptr;
|
||||||
|
|
||||||
picker->SetClickHandler( std::bind( deleteItem, m_frame, std::placeholders::_1 ) );
|
picker->SetClickHandler( [this] ( const VECTOR2D& aPosition ) -> bool
|
||||||
|
{
|
||||||
picker->SetFinalizeHandler( [&]( const int& aFinalState )
|
if( m_pickerItem )
|
||||||
{
|
{
|
||||||
if( aFinalState == PL_PICKER_TOOL::EVT_CANCEL )
|
PL_SELECTION_TOOL* selectionTool = m_toolMgr->GetTool<PL_SELECTION_TOOL>();
|
||||||
m_frame->ClearToolStack();
|
selectionTool->UnbrightenItem( m_pickerItem );
|
||||||
} );
|
selectionTool->AddItemToSel( m_pickerItem, true );
|
||||||
|
m_toolMgr->RunAction( ACTIONS::doDelete, true );
|
||||||
|
m_pickerItem = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} );
|
||||||
|
|
||||||
|
picker->SetMotionHandler( [this] ( const VECTOR2D& aPos )
|
||||||
|
{
|
||||||
|
int threshold = KiROUND( getView()->ToWorld( HITTEST_THRESHOLD_PIXELS ) );
|
||||||
|
EDA_ITEM* item = nullptr;
|
||||||
|
|
||||||
|
for( WS_DATA_ITEM* dataItem : WS_DATA_MODEL::GetTheInstance().GetItems() )
|
||||||
|
{
|
||||||
|
for( WS_DRAW_ITEM_BASE* drawItem : dataItem->GetDrawItems() )
|
||||||
|
{
|
||||||
|
if( drawItem->HitTest( (wxPoint) aPos, threshold ) )
|
||||||
|
{
|
||||||
|
item = drawItem;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( m_pickerItem != item )
|
||||||
|
{
|
||||||
|
PL_SELECTION_TOOL* selectionTool = m_toolMgr->GetTool<PL_SELECTION_TOOL>();
|
||||||
|
|
||||||
|
if( m_pickerItem )
|
||||||
|
selectionTool->UnbrightenItem( m_pickerItem );
|
||||||
|
|
||||||
|
m_pickerItem = item;
|
||||||
|
|
||||||
|
if( m_pickerItem )
|
||||||
|
selectionTool->BrightenItem( m_pickerItem );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
|
picker->SetFinalizeHandler( [this] ( const int& aFinalState )
|
||||||
|
{
|
||||||
|
if( m_pickerItem )
|
||||||
|
m_toolMgr->GetTool<PL_SELECTION_TOOL>()->UnbrightenItem( m_pickerItem );
|
||||||
|
|
||||||
|
if( aFinalState == PL_PICKER_TOOL::EVT_CANCEL )
|
||||||
|
m_frame->ClearToolStack();
|
||||||
|
} );
|
||||||
|
|
||||||
picker->Activate();
|
picker->Activate();
|
||||||
Wait();
|
Wait();
|
||||||
|
|
|
@ -89,6 +89,8 @@ private:
|
||||||
///> Last cursor position (needed for getModificationPoint() to avoid changes
|
///> Last cursor position (needed for getModificationPoint() to avoid changes
|
||||||
///> of edit reference point).
|
///> of edit reference point).
|
||||||
VECTOR2I m_cursor;
|
VECTOR2I m_cursor;
|
||||||
|
|
||||||
|
EDA_ITEM* m_pickerItem;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //PL_EDIT_TOOL_H
|
#endif //PL_EDIT_TOOL_H
|
||||||
|
|
|
@ -103,6 +103,21 @@ int PL_PICKER_TOOL::Main( const TOOL_EVENT& aEvent )
|
||||||
setControls();
|
setControls();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if( evt->IsMotion() )
|
||||||
|
{
|
||||||
|
if( m_motionHandler )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
(*m_motionHandler)( cursorPos );
|
||||||
|
}
|
||||||
|
catch( std::exception& e )
|
||||||
|
{
|
||||||
|
std::cerr << "PL_PICKER_TOOL motion handler error: " << e.what() << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
else if( TOOL_EVT_UTILS::IsCancelInteractive( *evt ) || evt->IsActivate() )
|
else if( TOOL_EVT_UTILS::IsCancelInteractive( *evt ) || evt->IsActivate() )
|
||||||
{
|
{
|
||||||
if( m_cancelHandler )
|
if( m_cancelHandler )
|
||||||
|
@ -163,6 +178,7 @@ void PL_PICKER_TOOL::resetPicker()
|
||||||
m_autoPanning = false;
|
m_autoPanning = false;
|
||||||
|
|
||||||
m_picked = NULLOPT;
|
m_picked = NULLOPT;
|
||||||
|
m_motionHandler = NULLOPT;
|
||||||
m_clickHandler = NULLOPT;
|
m_clickHandler = NULLOPT;
|
||||||
m_cancelHandler = NULLOPT;
|
m_cancelHandler = NULLOPT;
|
||||||
m_finalizeHandler = NULLOPT;
|
m_finalizeHandler = NULLOPT;
|
||||||
|
|
|
@ -45,6 +45,7 @@ public:
|
||||||
|
|
||||||
///> Event handler types.
|
///> Event handler types.
|
||||||
typedef std::function<bool(const VECTOR2D&)> CLICK_HANDLER;
|
typedef std::function<bool(const VECTOR2D&)> CLICK_HANDLER;
|
||||||
|
typedef std::function<void(const VECTOR2D&)> MOTION_HANDLER;
|
||||||
typedef std::function<void(void)> CANCEL_HANDLER;
|
typedef std::function<void(void)> CANCEL_HANDLER;
|
||||||
typedef std::function<void(const int&)> FINALIZE_HANDLER;
|
typedef std::function<void(const int&)> FINALIZE_HANDLER;
|
||||||
|
|
||||||
|
@ -83,6 +84,16 @@ public:
|
||||||
m_clickHandler = aHandler;
|
m_clickHandler = aHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function SetMotionHandler()
|
||||||
|
* Sets a handler for mouse motion. Used for roll-over highlighting.
|
||||||
|
*/
|
||||||
|
inline void SetMotionHandler( MOTION_HANDLER aHandler )
|
||||||
|
{
|
||||||
|
wxASSERT( !m_motionHandler );
|
||||||
|
m_motionHandler = aHandler;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function SetCancelHandler()
|
* Function SetCancelHandler()
|
||||||
* Sets a handler for cancel events (ESC or context-menu Cancel).
|
* Sets a handler for cancel events (ESC or context-menu Cancel).
|
||||||
|
@ -120,6 +131,7 @@ private:
|
||||||
bool m_autoPanning;
|
bool m_autoPanning;
|
||||||
|
|
||||||
OPT<CLICK_HANDLER> m_clickHandler;
|
OPT<CLICK_HANDLER> m_clickHandler;
|
||||||
|
OPT<MOTION_HANDLER> m_motionHandler;
|
||||||
OPT<CANCEL_HANDLER> m_cancelHandler;
|
OPT<CANCEL_HANDLER> m_cancelHandler;
|
||||||
OPT<FINALIZE_HANDLER> m_finalizeHandler;
|
OPT<FINALIZE_HANDLER> m_finalizeHandler;
|
||||||
|
|
||||||
|
|
|
@ -462,6 +462,18 @@ void PL_SELECTION_TOOL::RemoveItemsFromSel( EDA_ITEMS* aList, bool aQuietMode )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PL_SELECTION_TOOL::BrightenItem( EDA_ITEM* aItem )
|
||||||
|
{
|
||||||
|
highlight( aItem, BRIGHTENED );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PL_SELECTION_TOOL::UnbrightenItem( EDA_ITEM* aItem )
|
||||||
|
{
|
||||||
|
unhighlight( aItem, BRIGHTENED );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int PL_SELECTION_TOOL::ClearSelection( const TOOL_EVENT& aEvent )
|
int PL_SELECTION_TOOL::ClearSelection( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
ClearSelection();
|
ClearSelection();
|
||||||
|
|
|
@ -102,6 +102,9 @@ public:
|
||||||
int RemoveItemsFromSel( const TOOL_EVENT& aEvent );
|
int RemoveItemsFromSel( const TOOL_EVENT& aEvent );
|
||||||
void RemoveItemsFromSel( EDA_ITEMS* aList, bool aQuietMode = false );
|
void RemoveItemsFromSel( EDA_ITEMS* aList, bool aQuietMode = false );
|
||||||
|
|
||||||
|
void BrightenItem( EDA_ITEM* aItem );
|
||||||
|
void UnbrightenItem( EDA_ITEM* aItem );
|
||||||
|
|
||||||
///> Clear current selection event handler.
|
///> Clear current selection event handler.
|
||||||
int ClearSelection( const TOOL_EVENT& aEvent );
|
int ClearSelection( const TOOL_EVENT& aEvent );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue