mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-04-20 18:31:43 +00:00
Immediate actions for PlEditor, PcbNew, etc.
This commit is contained in:
parent
cda3a82c66
commit
f9702aab87
common
cvpcb
eeschema
gerbview
include
pagelayout_editor
pcbnew
cross-probing.cppedit.cppfootprint_editor_utils.cppmenubar_footprint_editor.cppmenubar_pcb_editor.cpppcb_base_frame.cpppcb_edit_frame.cpppcb_edit_frame.hpcbnew_id.h
router
toolbars_footprint_editor.cpptoolbars_pcb_editor.cpptools
drawing_tool.cppdrawing_tool.hedit_tool.cppfootprint_editor_tools.cppmicrowave_tool.cpppad_tool.cpppcb_actions.cpppcb_actions.hpcb_editor_control.cpppcb_editor_control.hpcb_tool_base.cpppcbnew_control.cpppcbnew_control.hpcbnew_picker_tool.cppselection_tool.cppselection_tool.hzone_create_helper.cppzone_create_helper.h
@ -139,7 +139,7 @@ EDA_DRAW_FRAME::EDA_DRAW_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrame
|
||||
// units display, Inches is bigger than mm
|
||||
GetTextSize( _( "Inches" ), stsbar ).x + 10,
|
||||
|
||||
// Size for the "Current Tool" panel; longest string from SetToolID()
|
||||
// Size for the "Current Tool" panel; longest string from SetTool()
|
||||
GetTextSize( wxT( "Add layer alignment target" ), stsbar ).x + 10,
|
||||
};
|
||||
|
||||
@ -480,31 +480,12 @@ void EDA_DRAW_FRAME::ClearToolStack()
|
||||
}
|
||||
|
||||
|
||||
void EDA_DRAW_FRAME::SetToolID( int aId, int aCursor, const wxString& aToolMsg )
|
||||
bool EDA_DRAW_FRAME::IsCurrentTool( const TOOL_ACTION& aAction )
|
||||
{
|
||||
// Keep default cursor in toolbars
|
||||
SetCursor( wxNullCursor );
|
||||
|
||||
// Change GAL canvas cursor if requested.
|
||||
if( aCursor >= 0 )
|
||||
GetCanvas()->SetCurrentCursor( aCursor );
|
||||
|
||||
DisplayToolMsg( aToolMsg );
|
||||
|
||||
if( aId < 0 )
|
||||
return;
|
||||
|
||||
wxCHECK2_MSG( aId >= ID_NO_TOOL_SELECTED, aId = ID_NO_TOOL_SELECTED,
|
||||
wxString::Format( wxT( "Current tool ID cannot be set to %d." ), aId ) );
|
||||
|
||||
m_toolId = aId;
|
||||
}
|
||||
|
||||
|
||||
void EDA_DRAW_FRAME::SetNoToolSelected()
|
||||
{
|
||||
// Select the ID_NO_TOOL_SELECTED id tool (Idle tool)
|
||||
SetToolID( ID_NO_TOOL_SELECTED, GetCanvas()->GetDefaultCursor(), wxEmptyString );
|
||||
if( m_toolStack.empty() )
|
||||
return &aAction == &ACTIONS::selectionTool;
|
||||
else
|
||||
return m_toolStack.back() == aAction.GetName();
|
||||
}
|
||||
|
||||
|
||||
@ -628,9 +609,6 @@ void EDA_DRAW_FRAME::ActivateGalCanvas()
|
||||
{
|
||||
GetCanvas()->SetEvtHandlerEnabled( true );
|
||||
GetCanvas()->StartDrawing();
|
||||
|
||||
// Reset current tool on switch();
|
||||
SetNoToolSelected();
|
||||
}
|
||||
|
||||
|
||||
|
@ -46,12 +46,17 @@ void ZOOM_TOOL::Reset( RESET_REASON aReason )
|
||||
|
||||
int ZOOM_TOOL::Main( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
m_frame->SetToolID( ID_ZOOM_SELECTION, wxCURSOR_MAGNIFIER, _( "Zoom to selection" ) );
|
||||
m_frame->PushTool( aEvent.GetCommandStr().get() );
|
||||
|
||||
while( auto evt = Wait() )
|
||||
{
|
||||
if( evt->IsCancel() || evt->IsActivate() )
|
||||
if( TOOL_EVT_UTILS::IsCancelInteractive( *evt ) || evt->IsActivate() )
|
||||
{
|
||||
if( TOOL_EVT_UTILS::IsCancelInteractive( *evt ) )
|
||||
m_frame->ClearToolStack();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
else if( evt->IsDrag( BUT_LEFT ) || evt->IsDrag( BUT_RIGHT ) )
|
||||
{
|
||||
@ -64,7 +69,7 @@ int ZOOM_TOOL::Main( const TOOL_EVENT& aEvent )
|
||||
}
|
||||
|
||||
// Exit zoom tool
|
||||
m_frame->SetNoToolSelected();
|
||||
m_frame->PopTool();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,7 @@ set( CVPCB_SRCS
|
||||
../pcbnew/board_items_to_polygon_shape_transform.cpp
|
||||
../pcbnew/pcb_general_settings.cpp
|
||||
../pcbnew/drc_item.cpp
|
||||
../pcbnew/tools/pcb_actions.cpp
|
||||
../pcbnew/tools/grid_helper.cpp
|
||||
auto_associate.cpp
|
||||
cfg.cpp
|
||||
|
@ -445,11 +445,11 @@ void DISPLAY_FOOTPRINTS_FRAME::UpdateMsgPanel()
|
||||
|
||||
void DISPLAY_FOOTPRINTS_FRAME::SyncToolbars()
|
||||
{
|
||||
m_mainToolBar->Toggle( ACTIONS::zoomTool, GetToolId() == ID_ZOOM_SELECTION );
|
||||
m_mainToolBar->Toggle( ACTIONS::zoomTool, IsCurrentTool( ACTIONS::zoomTool ) );
|
||||
m_mainToolBar->Refresh();
|
||||
|
||||
m_optionsToolBar->Toggle( ACTIONS::selectionTool, GetToolId() == ID_NO_TOOL_SELECTED );
|
||||
m_optionsToolBar->Toggle( ACTIONS::measureTool, GetToolId() == ID_TB_MEASUREMENT_TOOL );
|
||||
m_optionsToolBar->Toggle( ACTIONS::selectionTool, IsCurrentTool( ACTIONS::selectionTool ) );
|
||||
m_optionsToolBar->Toggle( ACTIONS::measureTool, IsCurrentTool( ACTIONS::measureTool ) );
|
||||
m_optionsToolBar->Toggle( ACTIONS::metricUnits, GetUserUnits() != INCHES );
|
||||
m_optionsToolBar->Toggle( ACTIONS::imperialUnits, GetUserUnits() == INCHES );
|
||||
m_optionsToolBar->Refresh();
|
||||
|
@ -60,7 +60,7 @@ int CVPCB_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
|
||||
// There doesn't seem to be any other good way to tell when another tool
|
||||
// is canceled and control returns to the selection tool, except by the
|
||||
// fact that the selection tool starts to get events again.
|
||||
if( m_frame->GetToolId() == ID_NO_TOOL_SELECTED)
|
||||
if( m_frame->IsCurrentTool( ACTIONS::selectionTool ) )
|
||||
{
|
||||
getViewControls()->SetAdditionalPanButtons( false, true );
|
||||
}
|
||||
@ -105,8 +105,8 @@ int CVPCB_SELECTION_TOOL::MeasureTool( const TOOL_EVENT& aEvent )
|
||||
auto& controls = *getViewControls();
|
||||
auto previous_settings = controls.GetSettings();
|
||||
|
||||
m_frame->SetTool( aEvent.GetCommandStr().get() );
|
||||
Activate();
|
||||
m_frame->SetToolID( ID_TB_MEASUREMENT_TOOL, wxCURSOR_PENCIL, _( "Measure distance" ) );
|
||||
|
||||
KIGFX::PREVIEW::TWO_POINT_GEOMETRY_MANAGER twoPtMgr;
|
||||
KIGFX::PREVIEW::RULER_ITEM ruler( twoPtMgr, m_frame->GetUserUnits() );
|
||||
@ -126,12 +126,25 @@ int CVPCB_SELECTION_TOOL::MeasureTool( const TOOL_EVENT& aEvent )
|
||||
|
||||
if( evt->IsCancel() || evt->IsActivate() )
|
||||
{
|
||||
break;
|
||||
if( originSet )
|
||||
{
|
||||
view.SetVisible( &ruler, false );
|
||||
controls.SetAutoPan( false );
|
||||
controls.CaptureCursor( false );
|
||||
originSet = false;
|
||||
}
|
||||
else if( TOOL_EVT_UTILS::IsCancelInteractive( *evt ) )
|
||||
{
|
||||
m_frame->ClearToolStack();
|
||||
break;
|
||||
}
|
||||
|
||||
if( evt->IsActivate() )
|
||||
break;
|
||||
}
|
||||
|
||||
// click or drag starts
|
||||
else if( !originSet &&
|
||||
( evt->IsDrag( BUT_LEFT ) || evt->IsClick( BUT_LEFT ) ) )
|
||||
else if( !originSet && ( evt->IsDrag( BUT_LEFT ) || evt->IsClick( BUT_LEFT ) ) )
|
||||
{
|
||||
if( !evt->IsDrag( BUT_LEFT ) )
|
||||
{
|
||||
@ -154,8 +167,7 @@ int CVPCB_SELECTION_TOOL::MeasureTool( const TOOL_EVENT& aEvent )
|
||||
}
|
||||
|
||||
// second click or mouse up after drag ends
|
||||
else if( originSet &&
|
||||
( evt->IsClick( BUT_LEFT ) || evt->IsMouseUp( BUT_LEFT ) ) )
|
||||
else if( originSet && ( evt->IsClick( BUT_LEFT ) || evt->IsMouseUp( BUT_LEFT ) ) )
|
||||
{
|
||||
originSet = false;
|
||||
|
||||
@ -166,8 +178,7 @@ int CVPCB_SELECTION_TOOL::MeasureTool( const TOOL_EVENT& aEvent )
|
||||
}
|
||||
|
||||
// move or drag when origin set updates rules
|
||||
else if( originSet &&
|
||||
( evt->IsMotion() || evt->IsDrag( BUT_LEFT ) ) )
|
||||
else if( originSet && ( evt->IsMotion() || evt->IsDrag( BUT_LEFT ) ) )
|
||||
{
|
||||
twoPtMgr.SetAngleSnap( evt->Modifier( MD_CTRL ) );
|
||||
twoPtMgr.SetEnd( cursorPos );
|
||||
@ -187,8 +198,6 @@ int CVPCB_SELECTION_TOOL::MeasureTool( const TOOL_EVENT& aEvent )
|
||||
|
||||
controls.ApplySettings( previous_settings );
|
||||
|
||||
m_frame->SetNoToolSelected();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -77,7 +77,7 @@ void SCH_EDIT_FRAME::ExecuteRemoteCommand( const char* cmdline )
|
||||
|
||||
if( strcmp( idcmd, "$NET:" ) == 0 )
|
||||
{
|
||||
if( GetCurrentToolName() == EE_ACTIONS::highlightNetCursor.GetName() )
|
||||
if( IsCurrentTool( EE_ACTIONS::highlightNetCursor ) )
|
||||
{
|
||||
m_SelectedNetName = FROM_UTF8( text );
|
||||
|
||||
|
@ -50,7 +50,7 @@ void LIB_EDIT_FRAME::ReCreateVToolbar()
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
|
||||
// Set up toolbar
|
||||
m_drawToolBar->Add( EE_ACTIONS::selectionTool, ACTION_TOOLBAR::TOGGLE );
|
||||
m_drawToolBar->Add( ACTIONS::selectionTool, ACTION_TOOLBAR::TOGGLE );
|
||||
|
||||
KiScaledSeparator( m_drawToolBar, this );
|
||||
m_drawToolBar->Add( EE_ACTIONS::placeSymbolPin, ACTION_TOOLBAR::TOGGLE );
|
||||
@ -164,7 +164,7 @@ void LIB_EDIT_FRAME::SyncToolbars()
|
||||
m_mainToolBar->Toggle( ACTIONS::saveAll, modified );
|
||||
m_mainToolBar->Toggle( ACTIONS::undo, GetScreen() && GetScreen()->GetUndoCommandCount() > 0 );
|
||||
m_mainToolBar->Toggle( ACTIONS::redo, GetScreen() && GetScreen()->GetRedoCommandCount() > 0 );
|
||||
m_mainToolBar->Toggle( ACTIONS::zoomTool, GetToolId() == ID_ZOOM_SELECTION );
|
||||
m_mainToolBar->Toggle( ACTIONS::zoomTool, IsCurrentTool( ACTIONS::zoomTool ) );
|
||||
m_mainToolBar->Toggle( EE_ACTIONS::showDatasheet, GetCurPart() != nullptr );
|
||||
m_mainToolBar->Toggle( EE_ACTIONS::showDeMorganStandard,
|
||||
GetShowDeMorgan(),
|
||||
@ -185,15 +185,15 @@ void LIB_EDIT_FRAME::SyncToolbars()
|
||||
m_optionsToolBar->Toggle( EE_ACTIONS::showComponentTree, IsSearchTreeShown() );
|
||||
m_optionsToolBar->Refresh();
|
||||
|
||||
#define TOGGLE_TOOL( tool ) m_drawToolBar->Toggle( tool, GetCurrentToolName() == tool.GetName() )
|
||||
#define TOGGLE_TOOL( toolbar, tool ) toolbar->Toggle( tool, IsCurrentTool( tool ) )
|
||||
|
||||
TOGGLE_TOOL( EE_ACTIONS::selectionTool );
|
||||
TOGGLE_TOOL( EE_ACTIONS::placeSymbolPin );
|
||||
TOGGLE_TOOL( EE_ACTIONS::placeSymbolText );
|
||||
TOGGLE_TOOL( EE_ACTIONS::drawSymbolRectangle );
|
||||
TOGGLE_TOOL( EE_ACTIONS::drawSymbolCircle );
|
||||
TOGGLE_TOOL( EE_ACTIONS::drawSymbolArc );
|
||||
TOGGLE_TOOL( EE_ACTIONS::drawSymbolLines );
|
||||
TOGGLE_TOOL( EE_ACTIONS::deleteItemCursor );
|
||||
TOGGLE_TOOL( m_drawToolBar, ACTIONS::selectionTool );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeSymbolPin );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeSymbolText );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::drawSymbolRectangle );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::drawSymbolCircle );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::drawSymbolArc );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::drawSymbolLines );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::deleteItemCursor );
|
||||
m_drawToolBar->Refresh();
|
||||
}
|
||||
|
@ -441,12 +441,3 @@ void SCH_BASE_FRAME::SyncView()
|
||||
}
|
||||
|
||||
|
||||
std::string SCH_BASE_FRAME::GetCurrentToolName()
|
||||
{
|
||||
if( m_toolStack.empty() )
|
||||
return EE_ACTIONS::selectionTool.GetName();
|
||||
else
|
||||
return m_toolStack.back();
|
||||
}
|
||||
|
||||
|
||||
|
@ -302,8 +302,6 @@ public:
|
||||
|
||||
void HardRedraw() override;
|
||||
|
||||
std::string GetCurrentToolName();
|
||||
|
||||
/**
|
||||
* Add an item to the screen (and view)
|
||||
* aScreen is the screen the item is located on, if not the current screen
|
||||
|
@ -113,7 +113,7 @@ void SCH_EDIT_FRAME::ReCreateVToolbar()
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
|
||||
// Set up toolbar
|
||||
m_drawToolBar->Add( EE_ACTIONS::selectionTool, ACTION_TOOLBAR::TOGGLE );
|
||||
m_drawToolBar->Add( ACTIONS::selectionTool, ACTION_TOOLBAR::TOGGLE );
|
||||
m_drawToolBar->Add( EE_ACTIONS::highlightNetCursor, ACTION_TOOLBAR::TOGGLE );
|
||||
|
||||
KiScaledSeparator( m_drawToolBar, this );
|
||||
@ -166,13 +166,15 @@ void SCH_EDIT_FRAME::ReCreateOptToolbar()
|
||||
|
||||
void SCH_EDIT_FRAME::SyncToolbars()
|
||||
{
|
||||
#define TOGGLE_TOOL( toolbar, tool ) toolbar->Toggle( tool, IsCurrentTool( tool ) )
|
||||
|
||||
KIGFX::GAL_DISPLAY_OPTIONS& galOpts = GetGalDisplayOptions();
|
||||
SCH_SHEET_LIST sheetList( g_RootSheet );
|
||||
|
||||
m_mainToolBar->Toggle( ACTIONS::saveAll, sheetList.IsModified() );
|
||||
m_mainToolBar->Toggle( ACTIONS::undo, GetScreen() && GetScreen()->GetUndoCommandCount() > 0 );
|
||||
m_mainToolBar->Toggle( ACTIONS::redo, GetScreen() && GetScreen()->GetRedoCommandCount() > 0 );
|
||||
m_mainToolBar->Toggle( ACTIONS::zoomTool, GetToolId() == ID_ZOOM_SELECTION );
|
||||
TOGGLE_TOOL( m_mainToolBar, ACTIONS::zoomTool );
|
||||
m_mainToolBar->Refresh();
|
||||
|
||||
m_optionsToolBar->Toggle( ACTIONS::toggleGrid, IsGridVisible() );
|
||||
@ -183,27 +185,25 @@ void SCH_EDIT_FRAME::SyncToolbars()
|
||||
m_optionsToolBar->Toggle( EE_ACTIONS::toggleForceHV, GetForceHVLines() );
|
||||
m_optionsToolBar->Refresh();
|
||||
|
||||
#define TOGGLE_TOOL( tool ) m_drawToolBar->Toggle( tool, GetCurrentToolName() == tool.GetName() )
|
||||
|
||||
TOGGLE_TOOL( ACTIONS::selectionTool );
|
||||
TOGGLE_TOOL( EE_ACTIONS::highlightNetCursor );
|
||||
TOGGLE_TOOL( EE_ACTIONS::placeSymbol );
|
||||
TOGGLE_TOOL( EE_ACTIONS::placePower );
|
||||
TOGGLE_TOOL( EE_ACTIONS::drawWire );
|
||||
TOGGLE_TOOL( EE_ACTIONS::drawBus );
|
||||
TOGGLE_TOOL( EE_ACTIONS::placeBusWireEntry );
|
||||
TOGGLE_TOOL( EE_ACTIONS::placeBusBusEntry );
|
||||
TOGGLE_TOOL( EE_ACTIONS::placeNoConnect );
|
||||
TOGGLE_TOOL( EE_ACTIONS::placeJunction );
|
||||
TOGGLE_TOOL( EE_ACTIONS::placeLabel );
|
||||
TOGGLE_TOOL( EE_ACTIONS::placeGlobalLabel );
|
||||
TOGGLE_TOOL( EE_ACTIONS::placeHierLabel );
|
||||
TOGGLE_TOOL( EE_ACTIONS::drawSheet );
|
||||
TOGGLE_TOOL( EE_ACTIONS::importSheetPin );
|
||||
TOGGLE_TOOL( EE_ACTIONS::placeSheetPin );
|
||||
TOGGLE_TOOL( EE_ACTIONS::drawLines );
|
||||
TOGGLE_TOOL( EE_ACTIONS::placeSchematicText );
|
||||
TOGGLE_TOOL( EE_ACTIONS::placeImage );
|
||||
TOGGLE_TOOL( EE_ACTIONS::deleteItemCursor );
|
||||
TOGGLE_TOOL( m_drawToolBar, ACTIONS::selectionTool );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::highlightNetCursor );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeSymbol );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placePower );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::drawWire );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::drawBus );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeBusWireEntry );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeBusBusEntry );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeNoConnect );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeJunction );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeLabel );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeGlobalLabel );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeHierLabel );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::drawSheet );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::importSheetPin );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeSheetPin );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::drawLines );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeSchematicText );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::placeImage );
|
||||
TOGGLE_TOOL( m_drawToolBar, EE_ACTIONS::deleteItemCursor );
|
||||
m_drawToolBar->Refresh();
|
||||
}
|
||||
|
@ -291,19 +291,62 @@ static bool deleteItem( SCH_BASE_FRAME* aFrame, const VECTOR2D& aPosition )
|
||||
}
|
||||
|
||||
|
||||
#define HITTEST_THRESHOLD_PIXELS 5
|
||||
|
||||
|
||||
int LIB_EDIT_TOOL::DeleteItemCursor( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
m_frame->PushTool( aEvent.GetCommandStr().get() );
|
||||
m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
|
||||
|
||||
m_frame->SetTool( aEvent.GetCommandStr().get() );
|
||||
Activate();
|
||||
|
||||
EE_PICKER_TOOL* picker = m_toolMgr->GetTool<EE_PICKER_TOOL>();
|
||||
wxCHECK( picker, 0 );
|
||||
m_pickerItem = nullptr;
|
||||
|
||||
picker->SetClickHandler( [this] ( const VECTOR2D& aPosition ) -> bool
|
||||
{
|
||||
if( m_pickerItem )
|
||||
{
|
||||
EE_SELECTION_TOOL* selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
|
||||
selectionTool->AddItemToSel( m_pickerItem, true );
|
||||
m_toolMgr->RunAction( EE_ACTIONS::doDelete, true );
|
||||
m_pickerItem = nullptr;
|
||||
}
|
||||
|
||||
return true;
|
||||
} );
|
||||
|
||||
picker->SetMotionHandler( [this] ( const VECTOR2D& aPos )
|
||||
{
|
||||
EE_COLLECTOR collector;
|
||||
collector.m_Threshold = KiROUND( getView()->ToWorld( HITTEST_THRESHOLD_PIXELS ) );
|
||||
collector.Collect( m_frame->GetCurPart(), nonFields, (wxPoint) aPos );
|
||||
EDA_ITEM* item = collector.GetCount() == 1 ? collector[ 0 ] : nullptr;
|
||||
|
||||
if( m_pickerItem != item )
|
||||
{
|
||||
EE_SELECTION_TOOL* selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
|
||||
|
||||
if( m_pickerItem )
|
||||
selectionTool->UnbrightenItem( m_pickerItem );
|
||||
|
||||
m_pickerItem = item;
|
||||
|
||||
if( m_pickerItem )
|
||||
selectionTool->BrightenItem( m_pickerItem );
|
||||
}
|
||||
} );
|
||||
|
||||
picker->SetFinalizeHandler( [&]( const int& aFinalState )
|
||||
{
|
||||
if( aFinalState == EE_PICKER_TOOL::EVT_CANCEL )
|
||||
m_frame->ClearToolStack();
|
||||
} );
|
||||
|
||||
picker->SetClickHandler( std::bind( deleteItem, m_frame, std::placeholders::_1 ) );
|
||||
picker->Activate();
|
||||
Wait();
|
||||
|
||||
m_frame->PopTool();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -71,6 +71,9 @@ private:
|
||||
|
||||
///> Sets up handlers for various events.
|
||||
void setTransitions() override;
|
||||
|
||||
private:
|
||||
EDA_ITEM* m_pickerItem;
|
||||
};
|
||||
|
||||
#endif //KICAD_LIB_EDIT_TOOL_H
|
||||
|
@ -99,8 +99,7 @@ int SCH_DRAWING_TOOLS::PlaceComponent( const TOOL_EVENT& aEvent )
|
||||
m_selectionTool->AddItemToSel( component );
|
||||
}
|
||||
|
||||
m_frame->PushTool( aEvent.GetCommandStr().get() );
|
||||
|
||||
m_frame->SetTool( aEvent.GetCommandStr().get() );
|
||||
Activate();
|
||||
|
||||
// Prime the pump
|
||||
@ -460,7 +459,6 @@ int SCH_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
|
||||
getViewControls()->ShowCursor( true );
|
||||
|
||||
m_frame->SetTool( aEvent.GetCommandStr().get() );
|
||||
|
||||
Activate();
|
||||
|
||||
// Prime the pump
|
||||
|
@ -136,14 +136,14 @@ bool SCH_EDIT_TOOL::Init()
|
||||
wxASSERT_MSG( drawingTools, "eeshema.InteractiveDrawing tool is not available" );
|
||||
|
||||
auto sheetTool = [ this ] ( const SELECTION& aSel ) {
|
||||
return ( m_frame->GetCurrentToolName() == EE_ACTIONS::drawSheet.GetName() );
|
||||
return ( m_frame->IsCurrentTool( EE_ACTIONS::drawSheet ) );
|
||||
};
|
||||
|
||||
auto anyTextTool = [ this ] ( const SELECTION& aSel ) {
|
||||
return ( m_frame->GetCurrentToolName() == EE_ACTIONS::placeLabel.GetName()
|
||||
|| m_frame->GetCurrentToolName() == EE_ACTIONS::placeGlobalLabel.GetName()
|
||||
|| m_frame->GetCurrentToolName() == EE_ACTIONS::placeHierLabel.GetName()
|
||||
|| m_frame->GetCurrentToolName() == EE_ACTIONS::placeSchematicText.GetName() );
|
||||
return ( m_frame->IsCurrentTool( EE_ACTIONS::placeLabel )
|
||||
|| m_frame->IsCurrentTool( EE_ACTIONS::placeGlobalLabel )
|
||||
|| m_frame->IsCurrentTool( EE_ACTIONS::placeHierLabel )
|
||||
|| m_frame->IsCurrentTool( EE_ACTIONS::placeSchematicText ) );
|
||||
};
|
||||
|
||||
auto duplicateCondition = [] ( const SELECTION& aSel ) {
|
||||
@ -947,51 +947,58 @@ int SCH_EDIT_TOOL::DeleteItemCursor( const TOOL_EVENT& aEvent )
|
||||
Activate();
|
||||
|
||||
EE_PICKER_TOOL* picker = m_toolMgr->GetTool<EE_PICKER_TOOL>();
|
||||
wxCHECK( picker, 0 );
|
||||
m_pickerItem = nullptr;
|
||||
|
||||
picker->SetClickHandler( [this] ( const VECTOR2D& aPosition ) -> bool {
|
||||
if( m_pickerItem )
|
||||
picker->SetClickHandler( [this] ( const VECTOR2D& aPosition ) -> bool
|
||||
{
|
||||
SCH_ITEM* sch_item = dynamic_cast<SCH_ITEM*>( m_pickerItem );
|
||||
|
||||
if( sch_item && sch_item->IsLocked() )
|
||||
if( m_pickerItem )
|
||||
{
|
||||
STATUS_TEXT_POPUP statusPopup( m_frame );
|
||||
statusPopup.SetText( _( "Item locked." ) );
|
||||
statusPopup.PopupFor( 2000 );
|
||||
statusPopup.Move( wxGetMousePosition() + wxPoint( 20, 20 ) );
|
||||
return true;
|
||||
SCH_ITEM* sch_item = dynamic_cast<SCH_ITEM*>( m_pickerItem );
|
||||
|
||||
if( sch_item && sch_item->IsLocked() )
|
||||
{
|
||||
STATUS_TEXT_POPUP statusPopup( m_frame );
|
||||
statusPopup.SetText( _( "Item locked." ) );
|
||||
statusPopup.PopupFor( 2000 );
|
||||
statusPopup.Move( wxGetMousePosition() + wxPoint( 20, 20 ) );
|
||||
return true;
|
||||
}
|
||||
|
||||
EE_SELECTION_TOOL* selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
|
||||
selectionTool->AddItemToSel( m_pickerItem, true );
|
||||
m_toolMgr->RunAction( EE_ACTIONS::doDelete, true );
|
||||
m_pickerItem = nullptr;
|
||||
}
|
||||
|
||||
EE_SELECTION_TOOL* selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
|
||||
selectionTool->AddItemToSel( m_pickerItem, true );
|
||||
m_toolMgr->RunAction( EE_ACTIONS::doDelete, true );
|
||||
m_pickerItem = nullptr;
|
||||
}
|
||||
return true;
|
||||
} );
|
||||
|
||||
return true;
|
||||
} );
|
||||
|
||||
picker->SetMotionHandler( [this] ( const VECTOR2D& aPos ) {
|
||||
EE_COLLECTOR collector;
|
||||
collector.m_Threshold = KiROUND( getView()->ToWorld( HITTEST_THRESHOLD_PIXELS ) );
|
||||
collector.Collect( m_frame->GetScreen()->GetDrawItems(), deletableItems, (wxPoint) aPos );
|
||||
EDA_ITEM* item = collector.GetCount() == 1 ? collector[ 0 ] : nullptr;
|
||||
|
||||
if( m_pickerItem != item )
|
||||
picker->SetMotionHandler( [this] ( const VECTOR2D& aPos )
|
||||
{
|
||||
EE_SELECTION_TOOL* selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
|
||||
EE_COLLECTOR collector;
|
||||
collector.m_Threshold = KiROUND( getView()->ToWorld( HITTEST_THRESHOLD_PIXELS ) );
|
||||
collector.Collect( m_frame->GetScreen()->GetDrawItems(), deletableItems, (wxPoint) aPos );
|
||||
EDA_ITEM* item = collector.GetCount() == 1 ? collector[ 0 ] : nullptr;
|
||||
|
||||
if( m_pickerItem )
|
||||
selectionTool->UnbrightenItem( m_pickerItem );
|
||||
if( m_pickerItem != item )
|
||||
{
|
||||
EE_SELECTION_TOOL* selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
|
||||
|
||||
m_pickerItem = item;
|
||||
if( m_pickerItem )
|
||||
selectionTool->UnbrightenItem( m_pickerItem );
|
||||
|
||||
if( m_pickerItem )
|
||||
selectionTool->BrightenItem( m_pickerItem );
|
||||
}
|
||||
} );
|
||||
m_pickerItem = item;
|
||||
|
||||
if( m_pickerItem )
|
||||
selectionTool->BrightenItem( m_pickerItem );
|
||||
}
|
||||
} );
|
||||
|
||||
picker->SetFinalizeHandler( [&]( const int& aFinalState )
|
||||
{
|
||||
if( aFinalState == EE_PICKER_TOOL::EVT_CANCEL )
|
||||
m_frame->ClearToolStack();
|
||||
} );
|
||||
|
||||
picker->Activate();
|
||||
Wait();
|
||||
|
@ -149,26 +149,25 @@ SCH_LINE_WIRE_BUS_TOOL::~SCH_LINE_WIRE_BUS_TOOL()
|
||||
}
|
||||
|
||||
|
||||
using E_C = EE_CONDITIONS;
|
||||
|
||||
bool SCH_LINE_WIRE_BUS_TOOL::Init()
|
||||
{
|
||||
EE_TOOL_BASE::Init();
|
||||
|
||||
auto wireOrBusTool = [ this ] ( const SELECTION& aSel ) {
|
||||
return ( m_frame->GetCurrentToolName() == EE_ACTIONS::drawWire.GetName()
|
||||
|| m_frame->GetCurrentToolName() == EE_ACTIONS::drawBus.GetName() );
|
||||
return ( m_frame->IsCurrentTool( EE_ACTIONS::drawWire )
|
||||
|| m_frame->IsCurrentTool( EE_ACTIONS::drawBus ) );
|
||||
};
|
||||
|
||||
auto lineTool = [ this ] ( const SELECTION& aSel ) {
|
||||
return ( m_frame->GetCurrentToolName() == EE_ACTIONS::drawLines.GetName() );
|
||||
return ( m_frame->IsCurrentTool( EE_ACTIONS::drawLines ) );
|
||||
};
|
||||
|
||||
auto belowRootSheetCondition = [] ( const SELECTION& aSel ) {
|
||||
return g_CurrentSheet->Last() != g_RootSheet;
|
||||
};
|
||||
|
||||
auto busSelection = E_C::MoreThan( 0 ) && E_C::OnlyType( SCH_LINE_LOCATE_BUS_T );
|
||||
auto busSelection = EE_CONDITIONS::MoreThan( 0 )
|
||||
&& EE_CONDITIONS::OnlyType( SCH_LINE_LOCATE_BUS_T );
|
||||
|
||||
auto& ctxMenu = m_menu.GetMenu();
|
||||
|
||||
@ -177,9 +176,9 @@ bool SCH_LINE_WIRE_BUS_TOOL::Init()
|
||||
ctxMenu.AddItem( EE_ACTIONS::leaveSheet, belowRootSheetCondition, 2 );
|
||||
|
||||
ctxMenu.AddSeparator( 10 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::drawWire, wireOrBusTool && E_C::Idle, 10 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::drawBus, wireOrBusTool && E_C::Idle, 10 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::drawLines, lineTool && E_C::Idle, 10 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::drawWire, wireOrBusTool && EE_CONDITIONS::Idle, 10 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::drawBus, wireOrBusTool && EE_CONDITIONS::Idle, 10 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::drawLines, lineTool && EE_CONDITIONS::Idle, 10 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::finishWire, IsDrawingWire, 10 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::finishBus, IsDrawingBus, 10 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::finishLine, IsDrawingLine, 10 );
|
||||
@ -190,16 +189,16 @@ bool SCH_LINE_WIRE_BUS_TOOL::Init()
|
||||
ctxMenu.AddMenu( busUnfoldMenu.get(), EE_CONDITIONS::Idle, 10 );
|
||||
|
||||
ctxMenu.AddSeparator( 100 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::placeJunction, wireOrBusTool && E_C::Idle, 100 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::placeLabel, wireOrBusTool && E_C::Idle, 100 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::placeGlobalLabel, wireOrBusTool && E_C::Idle, 100 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::placeHierLabel, wireOrBusTool && E_C::Idle, 100 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::breakWire, wireOrBusTool && E_C::Idle, 100 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::breakBus, wireOrBusTool && E_C::Idle, 100 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::placeJunction, wireOrBusTool && EE_CONDITIONS::Idle, 100 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::placeLabel, wireOrBusTool && EE_CONDITIONS::Idle, 100 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::placeGlobalLabel, wireOrBusTool && EE_CONDITIONS::Idle, 100 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::placeHierLabel, wireOrBusTool && EE_CONDITIONS::Idle, 100 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::breakWire, wireOrBusTool && EE_CONDITIONS::Idle, 100 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::breakBus, wireOrBusTool && EE_CONDITIONS::Idle, 100 );
|
||||
|
||||
ctxMenu.AddSeparator( 200 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::selectNode, wireOrBusTool && E_C::Idle, 200 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::selectConnection, wireOrBusTool && E_C::Idle, 200 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::selectNode, wireOrBusTool && EE_CONDITIONS::Idle, 200 );
|
||||
ctxMenu.AddItem( EE_ACTIONS::selectConnection, wireOrBusTool && EE_CONDITIONS::Idle, 200 );
|
||||
|
||||
// Add bus unfolding to the selection tool
|
||||
//
|
||||
@ -208,7 +207,7 @@ bool SCH_LINE_WIRE_BUS_TOOL::Init()
|
||||
std::shared_ptr<BUS_UNFOLD_MENU> selBusUnfoldMenu = std::make_shared<BUS_UNFOLD_MENU>();
|
||||
selBusUnfoldMenu->SetTool( m_selectionTool );
|
||||
m_selectionTool->GetToolMenu().AddSubMenu( selBusUnfoldMenu );
|
||||
selToolMenu.AddMenu( selBusUnfoldMenu.get(), busSelection && E_C::Idle, 100 );
|
||||
selToolMenu.AddMenu( selBusUnfoldMenu.get(), busSelection && EE_CONDITIONS::Idle, 100 );
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -476,13 +475,10 @@ int SCH_LINE_WIRE_BUS_TOOL::doDrawSegments( int aType, SCH_LINE* aSegment )
|
||||
m_view->ClearPreview();
|
||||
m_view->ShowPreview( false );
|
||||
}
|
||||
else
|
||||
else if( TOOL_EVT_UTILS::IsCancelInteractive( *evt ) )
|
||||
{
|
||||
if( TOOL_EVT_UTILS::IsCancelInteractive( *evt ) )
|
||||
{
|
||||
m_frame->ClearToolStack();
|
||||
break;
|
||||
}
|
||||
m_frame->ClearToolStack();
|
||||
break;
|
||||
}
|
||||
|
||||
if( evt->IsActivate() )
|
||||
|
@ -1260,3 +1260,4 @@ void GERBVIEW_FRAME::CommonSettingsChanged( bool aEnvVarsChanged )
|
||||
Layout();
|
||||
SendSizeEvent();
|
||||
}
|
||||
|
||||
|
@ -586,8 +586,8 @@ public:
|
||||
// currently: do nothing in GerbView.
|
||||
}
|
||||
|
||||
///> @copydoc EDA_DRAW_FRAME::UseGalCanvas
|
||||
virtual void ActivateGalCanvas() override;
|
||||
///> @copydoc EDA_DRAW_FRAME::ActivateGalCanvas
|
||||
void ActivateGalCanvas() override;
|
||||
|
||||
/**
|
||||
* Allows Gerbview to install its preferences panels into the preferences dialog.
|
||||
|
@ -202,7 +202,7 @@ void GERBVIEW_FRAME::ReCreateVToolbar()
|
||||
m_drawToolBar = new ACTION_TOOLBAR( this, ID_V_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
|
||||
m_optionsToolBar->Add( GERBVIEW_ACTIONS::selectionTool, ACTION_TOOLBAR::TOGGLE );
|
||||
m_optionsToolBar->Add( ACTIONS::selectionTool, ACTION_TOOLBAR::TOGGLE );
|
||||
m_drawToolBar->AddSeparator();
|
||||
|
||||
m_drawToolBar->Realize();
|
||||
@ -467,10 +467,12 @@ void GERBVIEW_FRAME::SyncToolbars()
|
||||
{
|
||||
KIGFX::GAL_DISPLAY_OPTIONS& galOpts = GetGalDisplayOptions();
|
||||
|
||||
m_mainToolBar->Toggle( ACTIONS::zoomTool, GetToolId() == ID_ZOOM_SELECTION );
|
||||
#define TOGGLE_TOOL( toolbar, tool ) toolbar->Toggle( tool, IsCurrentTool( tool ) )
|
||||
|
||||
TOGGLE_TOOL( m_mainToolBar, ACTIONS::zoomTool );
|
||||
m_mainToolBar->Refresh();
|
||||
|
||||
m_optionsToolBar->Toggle( GERBVIEW_ACTIONS::selectionTool, GetToolId() == ID_NO_TOOL_SELECTED );
|
||||
TOGGLE_TOOL( m_optionsToolBar, ACTIONS::selectionTool );
|
||||
m_optionsToolBar->Toggle( ACTIONS::toggleGrid, IsGridVisible() );
|
||||
m_optionsToolBar->Toggle( ACTIONS::metricUnits, GetUserUnits() != INCHES );
|
||||
m_optionsToolBar->Toggle( ACTIONS::imperialUnits, GetUserUnits() == INCHES );
|
||||
|
@ -187,7 +187,7 @@ int GERBVIEW_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
|
||||
// There doesn't seem to be any other good way to tell when another tool
|
||||
// is canceled and control returns to the selection tool, except by the
|
||||
// fact that the selection tool starts to get events again.
|
||||
if( m_frame->GetToolId() == ID_NO_TOOL_SELECTED)
|
||||
if( m_frame->IsCurrentTool( ACTIONS::selectionTool ) )
|
||||
{
|
||||
getViewControls()->SetAdditionalPanButtons( false, true );
|
||||
}
|
||||
@ -747,8 +747,8 @@ int GERBVIEW_SELECTION_TOOL::MeasureTool( const TOOL_EVENT& aEvent )
|
||||
auto& controls = *getViewControls();
|
||||
auto previous_settings = controls.GetSettings();
|
||||
|
||||
m_frame->SetTool( aEvent.GetCommandStr().get() );
|
||||
Activate();
|
||||
m_frame->SetToolID( ID_TB_MEASUREMENT_TOOL, wxCURSOR_PENCIL, _( "Measure distance" ) );
|
||||
|
||||
KIGFX::PREVIEW::TWO_POINT_GEOMETRY_MANAGER twoPtMgr;
|
||||
KIGFX::PREVIEW::RULER_ITEM ruler( twoPtMgr, m_frame->GetUserUnits() );
|
||||
@ -768,12 +768,25 @@ int GERBVIEW_SELECTION_TOOL::MeasureTool( const TOOL_EVENT& aEvent )
|
||||
|
||||
if( evt->IsCancel() || evt->IsActivate() )
|
||||
{
|
||||
break;
|
||||
if( originSet )
|
||||
{
|
||||
view.SetVisible( &ruler, false );
|
||||
controls.SetAutoPan( false );
|
||||
controls.CaptureCursor( false );
|
||||
originSet = false;
|
||||
}
|
||||
else if( TOOL_EVT_UTILS::IsCancelInteractive( *evt ) )
|
||||
{
|
||||
m_frame->ClearToolStack();
|
||||
break;
|
||||
}
|
||||
|
||||
if( evt->IsActivate() )
|
||||
break;
|
||||
}
|
||||
|
||||
// click or drag starts
|
||||
else if( !originSet &&
|
||||
( evt->IsDrag( BUT_LEFT ) || evt->IsClick( BUT_LEFT ) ) )
|
||||
else if( !originSet && ( evt->IsDrag( BUT_LEFT ) || evt->IsClick( BUT_LEFT ) ) )
|
||||
{
|
||||
if( !evt->IsDrag( BUT_LEFT ) )
|
||||
{
|
||||
@ -796,8 +809,7 @@ int GERBVIEW_SELECTION_TOOL::MeasureTool( const TOOL_EVENT& aEvent )
|
||||
}
|
||||
|
||||
// second click or mouse up after drag ends
|
||||
else if( originSet &&
|
||||
( evt->IsClick( BUT_LEFT ) || evt->IsMouseUp( BUT_LEFT ) ) )
|
||||
else if( originSet && ( evt->IsClick( BUT_LEFT ) || evt->IsMouseUp( BUT_LEFT ) ) )
|
||||
{
|
||||
originSet = false;
|
||||
|
||||
@ -808,8 +820,7 @@ int GERBVIEW_SELECTION_TOOL::MeasureTool( const TOOL_EVENT& aEvent )
|
||||
}
|
||||
|
||||
// move or drag when origin set updates rules
|
||||
else if( originSet &&
|
||||
( evt->IsMotion() || evt->IsDrag( BUT_LEFT ) ) )
|
||||
else if( originSet && ( evt->IsMotion() || evt->IsDrag( BUT_LEFT ) ) )
|
||||
{
|
||||
twoPtMgr.SetAngleSnap( evt->Modifier( MD_CTRL ) );
|
||||
twoPtMgr.SetEnd( cursorPos );
|
||||
@ -829,8 +840,6 @@ int GERBVIEW_SELECTION_TOOL::MeasureTool( const TOOL_EVENT& aEvent )
|
||||
|
||||
controls.ApplySettings( previous_settings );
|
||||
|
||||
m_frame->SetNoToolSelected();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -310,32 +310,16 @@ public:
|
||||
virtual void SetTool( const std::string& actionName );
|
||||
virtual void PushTool( const std::string& actionName );
|
||||
virtual void PopTool();
|
||||
|
||||
/**
|
||||
* The selection tool runs underneath the tool stack, so clearing the stack is equivalent
|
||||
* to selecting the selection tool.
|
||||
*/
|
||||
virtual void ClearToolStack();
|
||||
|
||||
/**
|
||||
* Set the tool command ID to \a aId and sets the cursor to \a aCursor.
|
||||
*
|
||||
* The command ID must be greater or equal ::ID_NO_TOOL_SELECTED. If the command
|
||||
* ID is less than ::ID_NO_TOOL_SELECTED, the tool command ID is set to
|
||||
* ::ID_NO_TOOL_SELECTED. On debug builds, an assertion will be raised when
|
||||
* \a aId is invalid.
|
||||
*
|
||||
* @param aId New tool command ID if greater than or equal to ::ID_NO_TOOL_SELECTED.
|
||||
If less than zero, the current tool command ID is retained.
|
||||
* @param aCursor Sets the cursor shape if greater than or equal to zero.
|
||||
* @param aToolMsg The tool message to set in the status bar.
|
||||
*/
|
||||
virtual void SetToolID( int aId, int aCursor, const wxString& aToolMsg );
|
||||
bool ToolStackIsEmpty() { return m_toolStack.empty(); }
|
||||
|
||||
bool IsCurrentTool( const TOOL_ACTION& aAction );
|
||||
|
||||
/**
|
||||
* Select the ID_NO_TOOL_SELECTED id tool (Idle tool)
|
||||
*/
|
||||
virtual void SetNoToolSelected();
|
||||
|
||||
/**
|
||||
* @return the current tool ID
|
||||
|
@ -200,7 +200,6 @@ public:
|
||||
virtual void ReCreateOptToolbar() { }
|
||||
virtual void ShowChangedLanguage() override;
|
||||
virtual void ReCreateMenuBar() override;
|
||||
virtual void SetToolID( int aId, int aCursor, const wxString& aToolMsg ) override;
|
||||
virtual void UpdateStatusBar() override;
|
||||
|
||||
PCB_SCREEN* GetScreen() const override { return (PCB_SCREEN*) EDA_DRAW_FRAME::GetScreen(); }
|
||||
|
@ -737,3 +737,4 @@ const wxString PL_EDITOR_FRAME::GetZoomLevelIndicator() const
|
||||
{
|
||||
return EDA_DRAW_FRAME::GetZoomLevelIndicator();
|
||||
}
|
||||
|
||||
|
@ -42,13 +42,6 @@ enum pl_editor_ids
|
||||
|
||||
ID_APPEND_DESCR_FILE,
|
||||
|
||||
ID_PL_MOVE_TOOL,
|
||||
ID_PL_LINE_TOOL,
|
||||
ID_PL_RECTANGLE_TOOL,
|
||||
ID_PL_TEXT_TOOL,
|
||||
ID_PL_IMAGE_TOOL,
|
||||
ID_PL_DELETE_TOOL,
|
||||
|
||||
ID_PLEDITOR_END_LIST
|
||||
};
|
||||
|
||||
|
@ -125,7 +125,7 @@ void PL_EDITOR_FRAME::ReCreateVToolbar()
|
||||
m_drawToolBar = new ACTION_TOOLBAR( this, ID_V_TOOLBAR, wxDefaultPosition, wxDefaultSize,
|
||||
KICAD_AUI_TB_STYLE | wxAUI_TB_VERTICAL );
|
||||
|
||||
m_drawToolBar->Add( PL_ACTIONS::selectionTool, ACTION_TOOLBAR::TOGGLE );
|
||||
m_drawToolBar->Add( ACTIONS::selectionTool, ACTION_TOOLBAR::TOGGLE );
|
||||
|
||||
KiScaledSeparator( m_drawToolBar, this );
|
||||
m_drawToolBar->Add( PL_ACTIONS::drawLine, ACTION_TOOLBAR::TOGGLE );
|
||||
@ -148,18 +148,20 @@ void PL_EDITOR_FRAME::ReCreateOptToolbar()
|
||||
|
||||
void PL_EDITOR_FRAME::SyncToolbars()
|
||||
{
|
||||
#define TOGGLE_TOOL( toolbar, tool ) toolbar->Toggle( tool, IsCurrentTool( tool ) )
|
||||
|
||||
m_mainToolBar->Toggle( ACTIONS::save, GetScreen() && GetScreen()->IsModify() );
|
||||
m_mainToolBar->Toggle( ACTIONS::undo, GetScreen() && GetScreen()->GetUndoCommandCount() > 0 );
|
||||
m_mainToolBar->Toggle( ACTIONS::redo, GetScreen() && GetScreen()->GetRedoCommandCount() > 0 );
|
||||
m_mainToolBar->Toggle( ACTIONS::zoomTool, GetToolId() == ID_ZOOM_SELECTION );
|
||||
TOGGLE_TOOL( m_mainToolBar, ACTIONS::zoomTool );
|
||||
m_mainToolBar->Refresh();
|
||||
|
||||
m_drawToolBar->Toggle( PL_ACTIONS::selectionTool, GetToolId() == ID_NO_TOOL_SELECTED );
|
||||
m_drawToolBar->Toggle( PL_ACTIONS::drawLine, GetToolId() == ID_PL_LINE_TOOL );
|
||||
m_drawToolBar->Toggle( PL_ACTIONS::drawRectangle, GetToolId() == ID_PL_RECTANGLE_TOOL );
|
||||
m_drawToolBar->Toggle( PL_ACTIONS::placeText, GetToolId() == ID_PL_TEXT_TOOL );
|
||||
m_drawToolBar->Toggle( PL_ACTIONS::placeImage, GetToolId() == ID_PL_IMAGE_TOOL );
|
||||
m_drawToolBar->Toggle( PL_ACTIONS::deleteItemCursor, GetToolId() == ID_PL_DELETE_TOOL );
|
||||
TOGGLE_TOOL( m_drawToolBar, ACTIONS::selectionTool );
|
||||
TOGGLE_TOOL( m_drawToolBar, PL_ACTIONS::drawLine );
|
||||
TOGGLE_TOOL( m_drawToolBar, PL_ACTIONS::drawRectangle );
|
||||
TOGGLE_TOOL( m_drawToolBar, PL_ACTIONS::placeText );
|
||||
TOGGLE_TOOL( m_drawToolBar, PL_ACTIONS::placeImage );
|
||||
TOGGLE_TOOL( m_drawToolBar, PL_ACTIONS::deleteItemCursor );
|
||||
|
||||
m_drawToolBar->Toggle( PL_ACTIONS::appendImportedWorksheet, false ); // Not really a tool
|
||||
m_drawToolBar->Refresh();
|
||||
|
@ -293,8 +293,7 @@ int PL_EDIT_TOOL::ImportWorksheetContent( const TOOL_EVENT& aEvent )
|
||||
wxCommandEvent evt( wxEVT_NULL, ID_APPEND_DESCR_FILE );
|
||||
m_frame->Files_io( evt );
|
||||
|
||||
m_frame->SetNoToolSelected();
|
||||
|
||||
m_frame->ClearToolStack();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -352,13 +351,20 @@ static bool deleteItem( PL_EDITOR_FRAME* aFrame, const VECTOR2D& aPosition )
|
||||
|
||||
int PL_EDIT_TOOL::DeleteItemCursor( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
m_frame->SetTool( aEvent.GetCommandStr().get() );
|
||||
Activate();
|
||||
|
||||
PL_PICKER_TOOL* picker = m_toolMgr->GetTool<PL_PICKER_TOOL>();
|
||||
wxCHECK( picker, 0 );
|
||||
|
||||
m_frame->SetToolID( ID_PL_DELETE_TOOL, wxCURSOR_BULLSEYE, _( "Delete item" ) );
|
||||
picker->SetClickHandler( std::bind( deleteItem, m_frame, std::placeholders::_1 ) );
|
||||
|
||||
picker->SetFinalizeHandler( [&]( const int& aFinalState )
|
||||
{
|
||||
if( aFinalState == PL_PICKER_TOOL::EVT_CANCEL )
|
||||
m_frame->ClearToolStack();
|
||||
} );
|
||||
|
||||
picker->Activate();
|
||||
Wait();
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user