Insert EE_TOOL_BASE under SchEdit and LibEdit tools, and fix errant rename scope which clobbered PCBNew's PICKER_TOOL.

This commit is contained in:
Jeff Young 2019-05-12 12:49:58 +01:00
parent 5c39521149
commit f602ccd814
69 changed files with 422 additions and 673 deletions

View File

@ -224,20 +224,20 @@ set( EESCHEMA_SRCS
netlist_exporters/netlist_exporter_orcadpcb2.cpp netlist_exporters/netlist_exporter_orcadpcb2.cpp
netlist_exporters/netlist_exporter_pspice.cpp netlist_exporters/netlist_exporter_pspice.cpp
tools/ee_actions.cpp
tools/ee_inspection_tool.cpp
tools/ee_picker_tool.cpp
tools/ee_point_editor.cpp
tools/ee_selection_tool.cpp
tools/lib_drawing_tools.cpp tools/lib_drawing_tools.cpp
tools/lib_edit_tool.cpp tools/lib_edit_tool.cpp
tools/lib_move_tool.cpp tools/lib_move_tool.cpp
tools/lib_pin_tool.cpp tools/lib_pin_tool.cpp
tools/ee_point_editor.cpp
tools/ee_actions.cpp
tools/sch_drawing_tools.cpp tools/sch_drawing_tools.cpp
tools/sch_edit_tool.cpp tools/sch_edit_tool.cpp
tools/sch_editor_control.cpp tools/sch_editor_control.cpp
tools/ee_inspection_tool.cpp
tools/sch_wire_bus_tool.cpp tools/sch_wire_bus_tool.cpp
tools/sch_move_tool.cpp tools/sch_move_tool.cpp
tools/ee_picker_tool.cpp
tools/ee_selection_tool.cpp
tools/selection.cpp tools/selection.cpp
) )

View File

@ -476,7 +476,8 @@ public:
* Because a component in library editor does not have a lot of primitives, * Because a component in library editor does not have a lot of primitives,
* the full data is duplicated. It is not worth to try to optimize this save function. * the full data is duplicated. It is not worth to try to optimize this save function.
*/ */
void SaveCopyInUndoList( EDA_ITEM* ItemToCopy, UNDO_REDO_T undoType = UR_LIBEDIT ); void SaveCopyInUndoList( EDA_ITEM* ItemToCopy, UNDO_REDO_T undoType = UR_LIBEDIT,
bool aAppend = false );
void RollbackPartFromUndo(); void RollbackPartFromUndo();

View File

@ -34,8 +34,10 @@
#include <tools/ee_actions.h> #include <tools/ee_actions.h>
#include <tools/ee_selection_tool.h> #include <tools/ee_selection_tool.h>
void LIB_EDIT_FRAME::SaveCopyInUndoList( EDA_ITEM* ItemToCopy, UNDO_REDO_T undoType ) void LIB_EDIT_FRAME::SaveCopyInUndoList( EDA_ITEM* ItemToCopy, UNDO_REDO_T undoType, bool aAppend )
{ {
wxASSERT_MSG( !aAppend, "Append not needed/supported for LibEdit" );
LIB_PART* CopyItem; LIB_PART* CopyItem;
PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST(); PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST();

View File

@ -50,21 +50,14 @@ TOOL_ACTION EE_ACTIONS::showMarkerInfo( "eeschema.InspectionTool.showMarkerInfo"
EE_INSPECTION_TOOL::EE_INSPECTION_TOOL() EE_INSPECTION_TOOL::EE_INSPECTION_TOOL()
: TOOL_INTERACTIVE( "eeschema.InspectionTool" ), : EE_TOOL_BASE<SCH_BASE_FRAME>( "eeschema.InspectionTool" )
m_selectionTool( nullptr ),
m_view( nullptr ),
m_controls( nullptr ),
m_frame( nullptr )
{ {
} }
bool EE_INSPECTION_TOOL::Init() bool EE_INSPECTION_TOOL::Init()
{ {
m_frame = getEditFrame<SCH_BASE_FRAME>(); EE_TOOL_BASE::Init();
m_selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
wxASSERT_MSG( m_selectionTool, "eeshema.InteractiveSelection tool is not available" );
auto singleMarkerCondition = SELECTION_CONDITIONS::OnlyType( SCH_MARKER_T ) auto singleMarkerCondition = SELECTION_CONDITIONS::OnlyType( SCH_MARKER_T )
&& SELECTION_CONDITIONS::Count( 1 ); && SELECTION_CONDITIONS::Count( 1 );
@ -80,14 +73,6 @@ bool EE_INSPECTION_TOOL::Init()
} }
void EE_INSPECTION_TOOL::Reset( RESET_REASON aReason )
{
m_view = static_cast<KIGFX::SCH_VIEW*>( getView() );
m_controls = getViewControls();
m_frame = getEditFrame<SCH_BASE_FRAME>();
}
int EE_INSPECTION_TOOL::ShowDatasheet( const TOOL_EVENT& aEvent ) int EE_INSPECTION_TOOL::ShowDatasheet( const TOOL_EVENT& aEvent )
{ {
SELECTION& selection = m_selectionTool->RequestSelection( EE_COLLECTOR::ComponentsOnly ); SELECTION& selection = m_selectionTool->RequestSelection( EE_COLLECTOR::ComponentsOnly );

View File

@ -21,19 +21,19 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
#ifndef SCH_INSPECTION_TOOL_H #ifndef EE_INSPECTION_TOOL_H
#define SCH_INSPECTION_TOOL_H #define EE_INSPECTION_TOOL_H
#include <boost/optional/optional.hpp> #include <boost/optional/optional.hpp>
#include <tool/tool_interactive.h> #include <tools/ee_tool_base.h>
#include <sch_base_frame.h> #include <sch_base_frame.h>
class EE_SELECTION_TOOL; class EE_SELECTION_TOOL;
class SCH_EDIT_FRAME; class SCH_BASE_FRAME;
class EE_INSPECTION_TOOL : public TOOL_INTERACTIVE class EE_INSPECTION_TOOL : public EE_TOOL_BASE<SCH_BASE_FRAME>
{ {
public: public:
EE_INSPECTION_TOOL(); EE_INSPECTION_TOOL();
@ -42,9 +42,6 @@ public:
/// @copydoc TOOL_INTERACTIVE::Init() /// @copydoc TOOL_INTERACTIVE::Init()
bool Init() override; bool Init() override;
///> @copydoc TOOL_INTERACTIVE::Reset()
void Reset( RESET_REASON aReason ) override;
int ShowDatasheet( const TOOL_EVENT& aEvent ); int ShowDatasheet( const TOOL_EVENT& aEvent );
int ShowMarkerInfo( const TOOL_EVENT& aEvent ); int ShowMarkerInfo( const TOOL_EVENT& aEvent );
@ -53,12 +50,6 @@ public:
private: private:
///> @copydoc TOOL_INTERACTIVE::setTransitions(); ///> @copydoc TOOL_INTERACTIVE::setTransitions();
void setTransitions() override; void setTransitions() override;
private:
EE_SELECTION_TOOL* m_selectionTool;
KIGFX::SCH_VIEW* m_view;
KIGFX::VIEW_CONTROLS* m_controls;
SCH_BASE_FRAME* m_frame;
}; };
#endif /* SCH_INSPECTION_TOOL_H */ #endif /* EE_INSPECTION_TOOL_H */

View File

@ -31,9 +31,9 @@ TOOL_ACTION EE_ACTIONS::pickerTool( "eeschema.Picker", AS_GLOBAL, 0, "", "", NUL
EE_PICKER_TOOL::EE_PICKER_TOOL() EE_PICKER_TOOL::EE_PICKER_TOOL()
: TOOL_INTERACTIVE( "eeschema.Picker" ) : EE_TOOL_BASE<SCH_BASE_FRAME>( "eeschema.Picker" )
{ {
reset(); resetPicker();
} }
@ -122,7 +122,7 @@ int EE_PICKER_TOOL::Main( const TOOL_EVENT& aEvent )
} }
} }
reset(); resetPicker();
controls->ForceCursorPosition( false ); controls->ForceCursorPosition( false );
getEditFrame<SCH_BASE_FRAME>()->SetNoToolSelected(); getEditFrame<SCH_BASE_FRAME>()->SetNoToolSelected();
@ -136,7 +136,7 @@ void EE_PICKER_TOOL::setTransitions()
} }
void EE_PICKER_TOOL::reset() void EE_PICKER_TOOL::resetPicker()
{ {
m_cursorCapture = false; m_cursorCapture = false;
m_autoPanning = false; m_autoPanning = false;

View File

@ -21,15 +21,17 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
#ifndef SCH_PICKER_TOOL_H #ifndef EE_PICKER_TOOL_H
#define SCH_PICKER_TOOL_H #define EE_PICKER_TOOL_H
#include <boost/optional/optional.hpp> #include <boost/optional/optional.hpp>
#include <tools/ee_tool_base.h>
#include <tool/tool_interactive.h>
class EE_PICKER_TOOL : public TOOL_INTERACTIVE class SCH_BASE_FRAME;
class EE_PICKER_TOOL : public EE_TOOL_BASE<SCH_BASE_FRAME>
{ {
public: public:
EE_PICKER_TOOL(); EE_PICKER_TOOL();
@ -49,9 +51,6 @@ public:
EXCEPTION_CANCEL EXCEPTION_CANCEL
}; };
///> @copydoc TOOL_INTERACTIVE::Reset()
void Reset( RESET_REASON aReason ) override {}
///> Main event loop. ///> Main event loop.
int Main( const TOOL_EVENT& aEvent ); int Main( const TOOL_EVENT& aEvent );
@ -98,6 +97,13 @@ public:
m_finalizeHandler = aHandler; m_finalizeHandler = aHandler;
} }
private:
///> Reinitializes tool to its initial state.
void resetPicker();
///> Applies the requested VIEW_CONTROLS settings.
void setControls();
///> @copydoc TOOL_INTERACTIVE::setTransitions(); ///> @copydoc TOOL_INTERACTIVE::setTransitions();
void setTransitions() override; void setTransitions() override;
@ -110,12 +116,6 @@ private:
OPT<FINALIZE_HANDLER> m_finalizeHandler; OPT<FINALIZE_HANDLER> m_finalizeHandler;
OPT<VECTOR2D> m_picked; OPT<VECTOR2D> m_picked;
///> Reinitializes tool to its initial state.
void reset();
///> Applies the requested VIEW_CONTROLS settings.
void setControls();
}; };
#endif /* SCH_PICKER_TOOL_H */ #endif /* EE_PICKER_TOOL_H */

View File

@ -198,9 +198,7 @@ private:
EE_POINT_EDITOR::EE_POINT_EDITOR() : EE_POINT_EDITOR::EE_POINT_EDITOR() :
TOOL_INTERACTIVE( "eeschema.PointEditor" ), EE_TOOL_BASE<SCH_BASE_FRAME>( "eeschema.PointEditor" ),
m_frame( nullptr ),
m_selectionTool( nullptr ),
m_editedPoint( nullptr ) m_editedPoint( nullptr )
{ {
} }
@ -208,20 +206,15 @@ EE_POINT_EDITOR::EE_POINT_EDITOR() :
void EE_POINT_EDITOR::Reset( RESET_REASON aReason ) void EE_POINT_EDITOR::Reset( RESET_REASON aReason )
{ {
EE_TOOL_BASE::Reset( aReason );
m_editPoints.reset(); m_editPoints.reset();
getViewControls()->SetAutoPan( false );
m_frame = getEditFrame<SCH_BASE_FRAME>();
m_isLibEdit = dynamic_cast<LIB_EDIT_FRAME*>( m_frame ) != nullptr;
} }
bool EE_POINT_EDITOR::Init() bool EE_POINT_EDITOR::Init()
{ {
m_frame = getEditFrame<SCH_BASE_FRAME>(); EE_TOOL_BASE::Init();
m_isLibEdit = dynamic_cast<LIB_EDIT_FRAME*>( m_frame ) != nullptr;
m_selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
wxASSERT_MSG( m_selectionTool, "eeshema.InteractiveSelection tool is not available" );
auto& menu = m_selectionTool->GetToolMenu().GetMenu(); auto& menu = m_selectionTool->GetToolMenu().GetMenu();
menu.AddItem( EE_ACTIONS::pointEditorAddCorner, menu.AddItem( EE_ACTIONS::pointEditorAddCorner,
@ -530,7 +523,7 @@ void EE_POINT_EDITOR::updateItem() const
break; break;
} }
getView()->Update( item, KIGFX::GEOMETRY ); updateView( item );
m_frame->SetMsgPanel( item ); m_frame->SetMsgPanel( item );
} }
@ -701,7 +694,7 @@ int EE_POINT_EDITOR::addCorner( const TOOL_EVENT& aEvent )
VECTOR2I cursorPos = getViewControls()->GetCursorPosition( !aEvent.Modifier( MD_ALT ) ); VECTOR2I cursorPos = getViewControls()->GetCursorPosition( !aEvent.Modifier( MD_ALT ) );
polyLine->AddCorner( mapCoords( cursorPos ) ); polyLine->AddCorner( mapCoords( cursorPos ) );
m_frame->RefreshItem( polyLine ); updateView( polyLine );
updatePoints(); updatePoints();
return 0; return 0;
@ -720,7 +713,7 @@ int EE_POINT_EDITOR::removeCorner( const TOOL_EVENT& aEvent )
polyLine->RemoveCorner( getEditedPointIndex() ); polyLine->RemoveCorner( getEditedPointIndex() );
m_frame->RefreshItem( polyLine ); updateView( polyLine );
updatePoints(); updatePoints();
return 0; return 0;
@ -738,25 +731,23 @@ void EE_POINT_EDITOR::saveItemsToUndo()
{ {
if( m_isLibEdit ) if( m_isLibEdit )
{ {
LIB_EDIT_FRAME* editFrame = static_cast<LIB_EDIT_FRAME*>( m_frame ); saveCopyInUndoList( m_editPoints->GetParent()->GetParent(), UR_LIBEDIT );
editFrame->SaveCopyInUndoList( m_editPoints->GetParent()->GetParent() );
} }
else else
{ {
SCH_EDIT_FRAME* editFrame = static_cast<SCH_EDIT_FRAME*>( m_frame ); saveCopyInUndoList( (SCH_ITEM*) m_editPoints->GetParent(), UR_CHANGED );
editFrame->SaveCopyInUndoList( (SCH_ITEM*) m_editPoints->GetParent(), UR_CHANGED );
if( m_editPoints->GetParent()->Type() == SCH_LINE_T ) if( m_editPoints->GetParent()->Type() == SCH_LINE_T )
{ {
EDA_ITEM* connection = m_editPoints->Point( LINE_START ).GetConnection(); EDA_ITEM* connection = m_editPoints->Point( LINE_START ).GetConnection();
if( connection ) if( connection )
editFrame->SaveCopyInUndoList( (SCH_ITEM*) connection, UR_CHANGED, true ); saveCopyInUndoList( (SCH_ITEM*) connection, UR_CHANGED, true );
connection = m_editPoints->Point( LINE_END ).GetConnection(); connection = m_editPoints->Point( LINE_END ).GetConnection();
if( connection ) if( connection )
editFrame->SaveCopyInUndoList( (SCH_ITEM*) connection, UR_CHANGED, true ); saveCopyInUndoList( (SCH_ITEM*) connection, UR_CHANGED, true );
} }
} }
} }

View File

@ -24,7 +24,7 @@
#ifndef SCH_POINT_EDITOR_H #ifndef SCH_POINT_EDITOR_H
#define SCH_POINT_EDITOR_H #define SCH_POINT_EDITOR_H
#include <tool/tool_interactive.h> #include <tools/ee_tool_base.h>
#include <tool/edit_points.h> #include <tool/edit_points.h>
#include <tool/selection.h> #include <tool/selection.h>
@ -36,7 +36,7 @@ class SCH_BASE_FRAME;
* *
* Tool that displays edit points allowing to modify items by dragging the points. * Tool that displays edit points allowing to modify items by dragging the points.
*/ */
class EE_POINT_EDITOR : public TOOL_INTERACTIVE class EE_POINT_EDITOR : public EE_TOOL_BASE<SCH_BASE_FRAME>
{ {
public: public:
EE_POINT_EDITOR(); EE_POINT_EDITOR();
@ -94,10 +94,6 @@ private:
void rollbackFromUndo(); void rollbackFromUndo();
private: private:
SCH_BASE_FRAME* m_frame;
EE_SELECTION_TOOL* m_selectionTool;
bool m_isLibEdit;
///> Currently edited point, NULL if there is none. ///> Currently edited point, NULL if there is none.
EDIT_POINT* m_editedPoint; EDIT_POINT* m_editedPoint;

View File

@ -0,0 +1,150 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2019 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef EE_TOOL_BASE_H
#define EE_TOOL_BASE_H
#include <tool/tool_event.h>
#include <tool/tool_interactive.h>
#include <tool/tool_manager.h>
#include <tool/tool_menu.h>
#include <tool/actions.h>
#include <tools/ee_selection_tool.h>
#include <sch_view.h>
#include <sch_edit_frame.h>
#include <lib_edit_frame.h>
#include <undo_redo_container.h>
class SELECTION;
/**
* Class EE_TOOL_BASE
*
* A foundation class for a tool operating on a schematic or symbol
**/
template <class T>
class EE_TOOL_BASE : public TOOL_INTERACTIVE
{
public:
/**
* Constructor
*
* Creates a tool with given name. The name must be unique.
*/
EE_TOOL_BASE( const std::string& aName ) :
TOOL_INTERACTIVE ( aName ),
m_frame( nullptr ),
m_view( nullptr ),
m_selectionTool( nullptr ),
m_isLibEdit( false ),
m_menu( *this )
{};
virtual ~EE_TOOL_BASE() {};
/// @copydoc TOOL_INTERACTIVE::Init()
bool Init() override
{
m_frame = getEditFrame<T>();
m_selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
m_isLibEdit = dynamic_cast<LIB_EDIT_FRAME*>( m_frame ) != nullptr;
// A basic context manu. Many (but not all) tools will choose to override this.
auto& ctxMenu = m_menu.GetMenu();
// cancel current tool goes in main context menu at the top if present
ctxMenu.AddItem( ACTIONS::cancelInteractive, SELECTION_CONDITIONS::ShowAlways, 1 );
ctxMenu.AddSeparator( SELECTION_CONDITIONS::ShowAlways, 1 );
// Finally, add the standard zoom/grid items
m_menu.AddStandardSubMenus( m_frame );
return true;
}
/// @copydoc TOOL_INTERACTIVE::Reset()
void Reset( RESET_REASON aReason ) override
{
if( aReason == MODEL_RELOAD )
{
// Init variables used by every drawing tool
m_frame = getEditFrame<T>();
m_isLibEdit = dynamic_cast<LIB_EDIT_FRAME*>( m_frame ) != nullptr;
}
m_view = static_cast<KIGFX::SCH_VIEW*>( getView() );
}
///> Get the tool's top-level context menu
inline TOOL_MENU& GetToolMenu() { return m_menu; }
protected:
///> Similar to getView()->Update(), but handles items that are redrawn by their parents.
void updateView( EDA_ITEM* aItem ) const
{
KICAD_T itemType = aItem->Type();
if( itemType == SCH_PIN_T || itemType == SCH_FIELD_T || itemType == SCH_SHEET_PIN_T )
getView()->Update( aItem->GetParent() );
getView()->Update( aItem );
}
///> Similar to m_frame->SaveCopyInUndoList(), but handles items that are owned by their
///> parents.
void saveCopyInUndoList( EDA_ITEM* aItem, UNDO_REDO_T aType, bool aAppend = false )
{
KICAD_T itemType = aItem->Type();
if( m_isLibEdit )
{
LIB_EDIT_FRAME* editFrame = dynamic_cast<LIB_EDIT_FRAME*>( m_frame );
editFrame->SaveCopyInUndoList( (LIB_ITEM*) aItem, aType, aAppend );
}
else
{
SCH_EDIT_FRAME* editFrame = dynamic_cast<SCH_EDIT_FRAME*>( m_frame );
if( itemType == SCH_PIN_T || itemType == SCH_FIELD_T || itemType == SCH_SHEET_PIN_T )
editFrame->SaveCopyInUndoList( (SCH_ITEM*) aItem->GetParent(), UR_CHANGED, aAppend );
else
editFrame->SaveCopyInUndoList( (SCH_ITEM*) aItem, aType, aAppend );
}
}
protected:
T* m_frame;
KIGFX::SCH_VIEW* m_view;
EE_SELECTION_TOOL* m_selectionTool;
bool m_isLibEdit;
/// Menu model displayed by the tool.
TOOL_MENU m_menu;
};
#endif

View File

@ -21,8 +21,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
#include "lib_drawing_tools.h"
#include "lib_pin_tool.h"
#include <ee_actions.h> #include <ee_actions.h>
#include <lib_edit_frame.h> #include <lib_edit_frame.h>
#include <sch_view.h> #include <sch_view.h>
@ -36,6 +34,8 @@
#include <view/view.h> #include <view/view.h>
#include <tool/tool_manager.h> #include <tool/tool_manager.h>
#include <tools/ee_selection_tool.h> #include <tools/ee_selection_tool.h>
#include <tools/lib_drawing_tools.h>
#include <tools/lib_pin_tool.h>
#include <ee_hotkeys.h> #include <ee_hotkeys.h>
#include <class_libentry.h> #include <class_libentry.h>
#include <bitmaps.h> #include <bitmaps.h>
@ -91,12 +91,7 @@ static void* g_lastPinWeakPtr;
LIB_DRAWING_TOOLS::LIB_DRAWING_TOOLS() : LIB_DRAWING_TOOLS::LIB_DRAWING_TOOLS() :
TOOL_INTERACTIVE( "libedit.InteractiveDrawing" ), EE_TOOL_BASE<LIB_EDIT_FRAME>( "libedit.InteractiveDrawing" )
m_selectionTool( nullptr ),
m_view( nullptr ),
m_controls( nullptr ),
m_frame( nullptr ),
m_menu( *this )
{ {
} }
@ -108,38 +103,19 @@ LIB_DRAWING_TOOLS::~LIB_DRAWING_TOOLS()
bool LIB_DRAWING_TOOLS::Init() bool LIB_DRAWING_TOOLS::Init()
{ {
m_frame = getEditFrame<LIB_EDIT_FRAME>(); EE_TOOL_BASE::Init();
m_selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
auto isDrawingCondition = [] ( const SELECTION& aSel ) { auto isDrawingCondition = [] ( const SELECTION& aSel ) {
LIB_ITEM* item = (LIB_ITEM*) aSel.Front(); LIB_ITEM* item = (LIB_ITEM*) aSel.Front();
return item && item->IsNew(); return item && item->IsNew();
}; };
auto& ctxMenu = m_menu.GetMenu(); m_menu.GetMenu().AddItem( EE_ACTIONS::finishDrawing, isDrawingCondition, 2 );
//
// Build the drawing tool menu
//
ctxMenu.AddItem( ACTIONS::cancelInteractive, EE_CONDITIONS::ShowAlways, 1 );
ctxMenu.AddItem( EE_ACTIONS::finishDrawing, isDrawingCondition, 2 );
ctxMenu.AddSeparator( EE_CONDITIONS::ShowAlways, 1000 );
m_menu.AddStandardSubMenus( m_frame );
return true; return true;
} }
void LIB_DRAWING_TOOLS::Reset( RESET_REASON aReason )
{
// Init variables used by every drawing tool
m_view = static_cast<KIGFX::SCH_VIEW*>( getView() );
m_controls = getViewControls();
m_frame = getEditFrame<LIB_EDIT_FRAME>();
}
int LIB_DRAWING_TOOLS::PlacePin( const TOOL_EVENT& aEvent ) int LIB_DRAWING_TOOLS::PlacePin( const TOOL_EVENT& aEvent )
{ {
m_frame->SetToolID( ID_LIBEDIT_PIN_BUTT, wxCURSOR_PENCIL, _( "Add pin" ) ); m_frame->SetToolID( ID_LIBEDIT_PIN_BUTT, wxCURSOR_PENCIL, _( "Add pin" ) );
@ -157,18 +133,18 @@ int LIB_DRAWING_TOOLS::PlaceText( const TOOL_EVENT& aEvent )
int LIB_DRAWING_TOOLS::doTwoClickPlace( KICAD_T aType ) int LIB_DRAWING_TOOLS::doTwoClickPlace( KICAD_T aType )
{ {
LIB_PIN_TOOL* pinTool = aType == LIB_PIN_T ? m_toolMgr->GetTool<LIB_PIN_TOOL>() : nullptr; LIB_PIN_TOOL* pinTool = aType == LIB_PIN_T ? m_toolMgr->GetTool<LIB_PIN_TOOL>() : nullptr;
VECTOR2I cursorPos = m_controls->GetCursorPosition(); VECTOR2I cursorPos;
EDA_ITEM* item = nullptr; EDA_ITEM* item = nullptr;
m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true ); m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
m_controls->ShowCursor( true ); getViewControls()->ShowCursor( true );
Activate(); Activate();
// Main loop: keep receiving events // Main loop: keep receiving events
while( OPT_TOOL_EVENT evt = Wait() ) while( OPT_TOOL_EVENT evt = Wait() )
{ {
cursorPos = m_controls->GetCursorPosition( !evt->Modifier( MD_ALT ) ); cursorPos = getViewControls()->GetCursorPosition( !evt->Modifier( MD_ALT ) );
if( TOOL_EVT_UTILS::IsCancelInteractive( evt.get() ) ) if( TOOL_EVT_UTILS::IsCancelInteractive( evt.get() ) )
{ {
@ -240,7 +216,7 @@ int LIB_DRAWING_TOOLS::doTwoClickPlace( KICAD_T aType )
m_selectionTool->AddItemToSel( item ); m_selectionTool->AddItemToSel( item );
} }
m_controls->SetCursorPosition( cursorPos, false ); getViewControls()->SetCursorPosition( cursorPos, false );
} }
// ... and second click places: // ... and second click places:
@ -285,8 +261,8 @@ int LIB_DRAWING_TOOLS::doTwoClickPlace( KICAD_T aType )
} }
// Enable autopanning and cursor capture only when there is an item to be placed // Enable autopanning and cursor capture only when there is an item to be placed
m_controls->SetAutoPan( !!item ); getViewControls()->SetAutoPan( !!item );
m_controls->CaptureCursor( !!item ); getViewControls()->CaptureCursor( !!item );
} }
m_frame->SetNoToolSelected(); m_frame->SetNoToolSelected();
@ -311,7 +287,7 @@ int LIB_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
m_frame->SetToolID( ID_LIBEDIT_BODY_RECT_BUTT, wxCURSOR_PENCIL, _( "Draw Rectangle" ) ); m_frame->SetToolID( ID_LIBEDIT_BODY_RECT_BUTT, wxCURSOR_PENCIL, _( "Draw Rectangle" ) );
m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true ); m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
m_controls->ShowCursor( true ); getViewControls()->ShowCursor( true );
Activate(); Activate();
@ -321,7 +297,7 @@ int LIB_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
// Main loop: keep receiving events // Main loop: keep receiving events
while( auto evt = Wait() ) while( auto evt = Wait() )
{ {
VECTOR2I cursorPos = m_controls->GetCursorPosition( !evt->Modifier( MD_ALT ) ); VECTOR2I cursorPos = getViewControls()->GetCursorPosition( !evt->Modifier( MD_ALT ) );
if( TOOL_EVT_UTILS::IsCancelInteractive( evt.get() ) ) if( TOOL_EVT_UTILS::IsCancelInteractive( evt.get() ) )
{ {
@ -412,8 +388,8 @@ int LIB_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
} }
// Enable autopanning and cursor capture only when there is a shape being drawn // Enable autopanning and cursor capture only when there is a shape being drawn
m_controls->SetAutoPan( !!item ); getViewControls()->SetAutoPan( !!item );
m_controls->CaptureCursor( !!item ); getViewControls()->CaptureCursor( !!item );
} }
m_frame->SetNoToolSelected(); m_frame->SetNoToolSelected();
@ -426,8 +402,8 @@ int LIB_DRAWING_TOOLS::PlaceAnchor( const TOOL_EVENT& aEvent )
{ {
m_frame->SetToolID( ID_LIBEDIT_ANCHOR_ITEM_BUTT, wxCURSOR_PENCIL, _( "Move symbol anchor" ) ); m_frame->SetToolID( ID_LIBEDIT_ANCHOR_ITEM_BUTT, wxCURSOR_PENCIL, _( "Move symbol anchor" ) );
m_controls->ShowCursor( true ); getViewControls()->ShowCursor( true );
m_controls->SetSnapping( true ); getViewControls()->SetSnapping( true );
Activate(); Activate();
@ -445,7 +421,7 @@ int LIB_DRAWING_TOOLS::PlaceAnchor( const TOOL_EVENT& aEvent )
if( !part ) if( !part )
continue; continue;
VECTOR2I cursorPos = m_controls->GetCursorPosition( !evt->Modifier( MD_ALT ) ); VECTOR2I cursorPos = getViewControls()->GetCursorPosition( !evt->Modifier( MD_ALT ) );
wxPoint offset( -cursorPos.x, cursorPos.y ); wxPoint offset( -cursorPos.x, cursorPos.y );
part->SetOffset( offset ); part->SetOffset( offset );

View File

@ -24,14 +24,10 @@
#ifndef LIB_DRAWING_TOOLS_H #ifndef LIB_DRAWING_TOOLS_H
#define LIB_DRAWING_TOOLS_H #define LIB_DRAWING_TOOLS_H
#include <tool/tool_interactive.h> #include <tools/ee_tool_base.h>
#include <tool/tool_menu.h>
#include <core/optional.h>
#include <sch_base_frame.h>
class LIB_EDIT_FRAME; class LIB_EDIT_FRAME;
class EE_SELECTION_TOOL;
/** /**
@ -40,7 +36,7 @@ class EE_SELECTION_TOOL;
* Tool responsible for drawing/placing items (body outlines, pins, etc.) * Tool responsible for drawing/placing items (body outlines, pins, etc.)
*/ */
class LIB_DRAWING_TOOLS : public TOOL_INTERACTIVE class LIB_DRAWING_TOOLS : public EE_TOOL_BASE<LIB_EDIT_FRAME>
{ {
public: public:
LIB_DRAWING_TOOLS(); LIB_DRAWING_TOOLS();
@ -49,12 +45,6 @@ public:
/// @copydoc TOOL_INTERACTIVE::Init() /// @copydoc TOOL_INTERACTIVE::Init()
bool Init() override; bool Init() override;
/// @copydoc TOOL_INTERACTIVE::Reset()
void Reset( RESET_REASON aReason ) override;
///> Get the SCH_DRAWING_TOOL top-level context menu
inline TOOL_MENU& GetToolMenu() { return m_menu; }
int PlacePin( const TOOL_EVENT& aEvent ); int PlacePin( const TOOL_EVENT& aEvent );
int PlaceText( const TOOL_EVENT& aEvent ); int PlaceText( const TOOL_EVENT& aEvent );
int DrawShape( const TOOL_EVENT& aEvent ); int DrawShape( const TOOL_EVENT& aEvent );
@ -68,14 +58,6 @@ private:
///> Sets up handlers for various events. ///> Sets up handlers for various events.
void setTransitions() override; void setTransitions() override;
private:
EE_SELECTION_TOOL* m_selectionTool;
KIGFX::SCH_VIEW* m_view;
KIGFX::VIEW_CONTROLS* m_controls;
LIB_EDIT_FRAME* m_frame;
TOOL_MENU m_menu;
}; };
#endif /* LIB_DRAWING_TOOLS_H */ #endif /* LIB_DRAWING_TOOLS_H */

View File

@ -43,11 +43,9 @@
#include <sch_legacy_plugin.h> #include <sch_legacy_plugin.h>
#include "lib_edit_tool.h" #include "lib_edit_tool.h"
LIB_EDIT_TOOL::LIB_EDIT_TOOL() : LIB_EDIT_TOOL::LIB_EDIT_TOOL() :
TOOL_INTERACTIVE( "libedit.InteractiveEdit" ), EE_TOOL_BASE( "libedit.InteractiveEdit" )
m_selectionTool( nullptr ),
m_frame( nullptr ),
m_menu( *this )
{ {
} }
@ -59,12 +57,11 @@ LIB_EDIT_TOOL::~LIB_EDIT_TOOL()
bool LIB_EDIT_TOOL::Init() bool LIB_EDIT_TOOL::Init()
{ {
m_frame = getEditFrame<LIB_EDIT_FRAME>(); EE_TOOL_BASE::Init();
m_selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
LIB_DRAWING_TOOLS* drawingTools = m_toolMgr->GetTool<LIB_DRAWING_TOOLS>(); LIB_DRAWING_TOOLS* drawingTools = m_toolMgr->GetTool<LIB_DRAWING_TOOLS>();
LIB_MOVE_TOOL* moveTool = m_toolMgr->GetTool<LIB_MOVE_TOOL>(); LIB_MOVE_TOOL* moveTool = m_toolMgr->GetTool<LIB_MOVE_TOOL>();
wxASSERT_MSG( m_selectionTool, "eeshema.InteractiveSelection tool is not available" );
wxASSERT_MSG( drawingTools, "libedit.InteractiveDrawing tool is not available" ); wxASSERT_MSG( drawingTools, "libedit.InteractiveDrawing tool is not available" );
// //
@ -75,18 +72,18 @@ bool LIB_EDIT_TOOL::Init()
CONDITIONAL_MENU& moveMenu = moveTool->GetToolMenu().GetMenu(); CONDITIONAL_MENU& moveMenu = moveTool->GetToolMenu().GetMenu();
moveMenu.AddSeparator( SELECTION_CONDITIONS::NotEmpty ); moveMenu.AddSeparator( SELECTION_CONDITIONS::NotEmpty );
moveMenu.AddItem( EE_ACTIONS::rotateCCW, EE_CONDITIONS::NotEmpty ); moveMenu.AddItem( EE_ACTIONS::rotateCCW, EE_CONDITIONS::NotEmpty, 200 );
moveMenu.AddItem( EE_ACTIONS::rotateCW, EE_CONDITIONS::NotEmpty ); moveMenu.AddItem( EE_ACTIONS::rotateCW, EE_CONDITIONS::NotEmpty, 200 );
moveMenu.AddItem( EE_ACTIONS::mirrorX, EE_CONDITIONS::NotEmpty ); moveMenu.AddItem( EE_ACTIONS::mirrorX, EE_CONDITIONS::NotEmpty, 200 );
moveMenu.AddItem( EE_ACTIONS::mirrorY, EE_CONDITIONS::NotEmpty ); moveMenu.AddItem( EE_ACTIONS::mirrorY, EE_CONDITIONS::NotEmpty, 200 );
moveMenu.AddItem( EE_ACTIONS::duplicate, EE_CONDITIONS::NotEmpty ); moveMenu.AddItem( EE_ACTIONS::duplicate, EE_CONDITIONS::NotEmpty, 200 );
moveMenu.AddItem( EE_ACTIONS::doDelete, EE_CONDITIONS::NotEmpty ); moveMenu.AddItem( EE_ACTIONS::doDelete, EE_CONDITIONS::NotEmpty, 200 );
moveMenu.AddItem( EE_ACTIONS::properties, EE_CONDITIONS::Count( 1 ) ); moveMenu.AddItem( EE_ACTIONS::properties, EE_CONDITIONS::Count( 1 ), 200 );
moveMenu.AddSeparator( EE_CONDITIONS::IdleSelection ); moveMenu.AddSeparator( EE_CONDITIONS::IdleSelection, 300 );
moveMenu.AddItem( EE_ACTIONS::cut, EE_CONDITIONS::IdleSelection ); moveMenu.AddItem( EE_ACTIONS::cut, EE_CONDITIONS::IdleSelection, 300 );
moveMenu.AddItem( EE_ACTIONS::copy, EE_CONDITIONS::IdleSelection ); moveMenu.AddItem( EE_ACTIONS::copy, EE_CONDITIONS::IdleSelection, 300 );
} }
// //
@ -116,25 +113,15 @@ bool LIB_EDIT_TOOL::Init()
selToolMenu.AddItem( EE_ACTIONS::properties, EE_CONDITIONS::Count( 1 ), 200 ); selToolMenu.AddItem( EE_ACTIONS::properties, EE_CONDITIONS::Count( 1 ), 200 );
selToolMenu.AddSeparator( EE_CONDITIONS::Idle, 200 ); selToolMenu.AddSeparator( EE_CONDITIONS::Idle, 300 );
selToolMenu.AddItem( EE_ACTIONS::cut, EE_CONDITIONS::IdleSelection, 200 ); selToolMenu.AddItem( EE_ACTIONS::cut, EE_CONDITIONS::IdleSelection, 300 );
selToolMenu.AddItem( EE_ACTIONS::copy, EE_CONDITIONS::IdleSelection, 200 ); selToolMenu.AddItem( EE_ACTIONS::copy, EE_CONDITIONS::IdleSelection, 300 );
selToolMenu.AddItem( EE_ACTIONS::paste, EE_CONDITIONS::Idle, 200 ); selToolMenu.AddItem( EE_ACTIONS::paste, EE_CONDITIONS::Idle, 300 );
return true; return true;
} }
void LIB_EDIT_TOOL::Reset( RESET_REASON aReason )
{
if( aReason == MODEL_RELOAD )
{
// Init variables used by every drawing tool
m_frame = getEditFrame<LIB_EDIT_FRAME>();
}
}
int LIB_EDIT_TOOL::Rotate( const TOOL_EVENT& aEvent ) int LIB_EDIT_TOOL::Rotate( const TOOL_EVENT& aEvent )
{ {
SELECTION& selection = m_selectionTool->RequestSelection(); SELECTION& selection = m_selectionTool->RequestSelection();
@ -147,7 +134,7 @@ int LIB_EDIT_TOOL::Rotate( const TOOL_EVENT& aEvent )
LIB_ITEM* item = static_cast<LIB_ITEM*>( selection.Front() ); LIB_ITEM* item = static_cast<LIB_ITEM*>( selection.Front() );
if( !item->IsMoving() ) if( !item->IsMoving() )
m_frame->SaveCopyInUndoList( m_frame->GetCurPart() ); saveCopyInUndoList( m_frame->GetCurPart(), UR_LIBEDIT );
if( selection.GetSize() == 1 ) if( selection.GetSize() == 1 )
rotPoint = item->GetPosition(); rotPoint = item->GetPosition();
@ -187,7 +174,7 @@ int LIB_EDIT_TOOL::Mirror( const TOOL_EVENT& aEvent )
LIB_ITEM* item = static_cast<LIB_ITEM*>( selection.Front() ); LIB_ITEM* item = static_cast<LIB_ITEM*>( selection.Front() );
if( !item->IsMoving() ) if( !item->IsMoving() )
m_frame->SaveCopyInUndoList( m_frame->GetCurPart() ); saveCopyInUndoList( m_frame->GetCurPart(), UR_LIBEDIT );
if( selection.GetSize() == 1 ) if( selection.GetSize() == 1 )
mirrorPoint = item->GetPosition(); mirrorPoint = item->GetPosition();
@ -249,7 +236,7 @@ int LIB_EDIT_TOOL::Duplicate( const TOOL_EVENT& aEvent )
return 0; return 0;
if( !selection.Front()->IsMoving() ) if( !selection.Front()->IsMoving() )
m_frame->SaveCopyInUndoList( m_frame->GetCurPart() ); saveCopyInUndoList( m_frame->GetCurPart(), UR_LIBEDIT );
EDA_ITEMS newItems; EDA_ITEMS newItems;
@ -283,7 +270,7 @@ int LIB_EDIT_TOOL::DoDelete( const TOOL_EVENT& aEvent )
// Don't leave a freed pointer in the selection // Don't leave a freed pointer in the selection
m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true ); m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
m_frame->SaveCopyInUndoList( part ); saveCopyInUndoList( part, UR_LIBEDIT );
for( EDA_ITEM* item : items ) for( EDA_ITEM* item : items )
{ {
@ -375,7 +362,7 @@ int LIB_EDIT_TOOL::Properties( const TOOL_EVENT& aEvent )
// Save copy for undo if not in edit (edit command already handle the save copy) // Save copy for undo if not in edit (edit command already handle the save copy)
if( !item->InEditMode() ) if( !item->InEditMode() )
m_frame->SaveCopyInUndoList( item->GetParent() ); saveCopyInUndoList( item->GetParent(), UR_LIBEDIT );
switch( item->Type() ) switch( item->Type() )
{ {
@ -430,7 +417,7 @@ void LIB_EDIT_TOOL::editGraphicProperties( LIB_ITEM* aItem )
aItem->SetWidth( dialog.GetWidth() ); aItem->SetWidth( dialog.GetWidth() );
m_frame->GetCanvas()->GetView()->Update( aItem ); updateView( aItem );
m_frame->GetCanvas()->Refresh(); m_frame->GetCanvas()->Refresh();
m_frame->OnModify( ); m_frame->OnModify( );
@ -454,7 +441,7 @@ void LIB_EDIT_TOOL::editTextProperties( LIB_ITEM* aItem )
if( dlg.ShowModal() != wxID_OK ) if( dlg.ShowModal() != wxID_OK )
return; return;
m_frame->GetCanvas()->GetView()->Update( aItem ); updateView( aItem );
m_frame->GetCanvas()->Refresh(); m_frame->GetCanvas()->Refresh();
m_frame->OnModify( ); m_frame->OnModify( );
} }
@ -488,9 +475,9 @@ void LIB_EDIT_TOOL::editFieldProperties( LIB_FIELD* aField )
bool renamed = aField->GetId() == VALUE && newFieldValue != oldFieldValue; bool renamed = aField->GetId() == VALUE && newFieldValue != oldFieldValue;
if( renamed ) if( renamed )
m_frame->SaveCopyInUndoList( parent, UR_LIB_RENAME ); saveCopyInUndoList( parent, UR_LIB_RENAME );
else else
m_frame->SaveCopyInUndoList( parent ); saveCopyInUndoList( parent, UR_LIBEDIT );
dlg.UpdateField( aField ); dlg.UpdateField( aField );
@ -501,7 +488,7 @@ void LIB_EDIT_TOOL::editFieldProperties( LIB_FIELD* aField )
} }
else else
{ {
m_frame->GetCanvas()->GetView()->Update( aField ); updateView( aField );
m_frame->GetCanvas()->Refresh(); m_frame->GetCanvas()->Refresh();
m_frame->OnModify( ); m_frame->OnModify( );
} }
@ -549,7 +536,7 @@ int LIB_EDIT_TOOL::PinTable( const TOOL_EVENT& aEvent )
m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true ); m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
m_frame->SaveCopyInUndoList( part ); saveCopyInUndoList( part, UR_LIBEDIT );
DIALOG_LIB_EDIT_PIN_TABLE dlg( m_frame, part ); DIALOG_LIB_EDIT_PIN_TABLE dlg( m_frame, part );

View File

@ -24,16 +24,13 @@
#ifndef KICAD_LIB_EDIT_TOOL_H #ifndef KICAD_LIB_EDIT_TOOL_H
#define KICAD_LIB_EDIT_TOOL_H #define KICAD_LIB_EDIT_TOOL_H
#include <tool/tool_interactive.h> #include <tools/ee_tool_base.h>
#include <tool/tool_menu.h>
#include <sch_base_frame.h>
class LIB_EDIT_FRAME; class LIB_EDIT_FRAME;
class EE_SELECTION_TOOL;
class LIB_EDIT_TOOL : public TOOL_INTERACTIVE class LIB_EDIT_TOOL : public EE_TOOL_BASE<LIB_EDIT_FRAME>
{ {
public: public:
LIB_EDIT_TOOL(); LIB_EDIT_TOOL();
@ -42,12 +39,6 @@ public:
/// @copydoc TOOL_INTERACTIVE::Init() /// @copydoc TOOL_INTERACTIVE::Init()
bool Init() override; bool Init() override;
/// @copydoc TOOL_INTERACTIVE::Reset()
void Reset( RESET_REASON aReason ) override;
///> Get the SCH_DRAWING_TOOL top-level context menu
inline TOOL_MENU& GetToolMenu() { return m_menu; }
int Rotate( const TOOL_EVENT& aEvent ); int Rotate( const TOOL_EVENT& aEvent );
int Mirror( const TOOL_EVENT& aEvent ); int Mirror( const TOOL_EVENT& aEvent );
@ -78,13 +69,6 @@ private:
///> Sets up handlers for various events. ///> Sets up handlers for various events.
void setTransitions() override; void setTransitions() override;
private:
EE_SELECTION_TOOL* m_selectionTool;
LIB_EDIT_FRAME* m_frame;
/// Menu model displayed by the tool.
TOOL_MENU m_menu;
}; };
#endif //KICAD_LIB_EDIT_TOOL_H #endif //KICAD_LIB_EDIT_TOOL_H

View File

@ -35,11 +35,7 @@
LIB_MOVE_TOOL::LIB_MOVE_TOOL() : LIB_MOVE_TOOL::LIB_MOVE_TOOL() :
TOOL_INTERACTIVE( "libedit.InteractiveMove" ), EE_TOOL_BASE( "libedit.InteractiveMove" ),
m_selectionTool( nullptr ),
m_controls( nullptr ),
m_frame( nullptr ),
m_menu( *this ),
m_moveInProgress( false ), m_moveInProgress( false ),
m_moveOffset( 0, 0 ) m_moveOffset( 0, 0 )
{ {
@ -53,21 +49,6 @@ LIB_MOVE_TOOL::~LIB_MOVE_TOOL()
bool LIB_MOVE_TOOL::Init() bool LIB_MOVE_TOOL::Init()
{ {
m_frame = getEditFrame<LIB_EDIT_FRAME>();
m_selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
wxASSERT_MSG( m_selectionTool, "eeshema.InteractiveSelection tool is not available" );
//
// Build the tool menu
//
CONDITIONAL_MENU& ctxMenu = m_menu.GetMenu();
ctxMenu.AddItem( ACTIONS::cancelInteractive, EE_CONDITIONS::ShowAlways, 1 );
ctxMenu.AddSeparator( EE_CONDITIONS::ShowAlways, 1000 );
m_menu.AddStandardSubMenus( m_frame );
// //
// Add move actions to the selection tool menu // Add move actions to the selection tool menu
// //
@ -81,14 +62,12 @@ bool LIB_MOVE_TOOL::Init()
void LIB_MOVE_TOOL::Reset( RESET_REASON aReason ) void LIB_MOVE_TOOL::Reset( RESET_REASON aReason )
{ {
EE_TOOL_BASE::Reset( aReason );
if( aReason == MODEL_RELOAD ) if( aReason == MODEL_RELOAD )
{ {
m_moveInProgress = false; m_moveInProgress = false;
m_moveOffset = { 0, 0 }; m_moveOffset = { 0, 0 };
// Init variables used by every drawing tool
m_controls = getViewControls();
m_frame = getEditFrame<LIB_EDIT_FRAME>();
} }
} }
@ -120,7 +99,7 @@ int LIB_MOVE_TOOL::Main( const TOOL_EVENT& aEvent )
VECTOR2I prevPos; VECTOR2I prevPos;
if( !selection.Front()->IsNew() ) if( !selection.Front()->IsNew() )
m_frame->SaveCopyInUndoList( m_frame->GetCurPart() ); saveCopyInUndoList( m_frame->GetCurPart(), UR_LIBEDIT );
// Main loop: keep receiving events // Main loop: keep receiving events
do do
@ -172,7 +151,7 @@ int LIB_MOVE_TOOL::Main( const TOOL_EVENT& aEvent )
continue; continue;
moveItem( item, delta ); moveItem( item, delta );
getView()->Update( item ); updateView( item );
} }
selection.SetReferencePoint( m_cursor ); selection.SetReferencePoint( m_cursor );
@ -209,7 +188,7 @@ int LIB_MOVE_TOOL::Main( const TOOL_EVENT& aEvent )
for( EDA_ITEM* item : selection ) for( EDA_ITEM* item : selection )
{ {
moveItem( item, delta ); moveItem( item, delta );
getView()->Update( item ); updateView( item );
} }
m_toolMgr->PostEvent( EVENTS::SelectedItemsModified ); m_toolMgr->PostEvent( EVENTS::SelectedItemsModified );

View File

@ -24,16 +24,14 @@
#ifndef KICAD_LIB_MOVE_TOOL_H #ifndef KICAD_LIB_MOVE_TOOL_H
#define KICAD_LIB_MOVE_TOOL_H #define KICAD_LIB_MOVE_TOOL_H
#include <tool/tool_interactive.h> #include <tools/ee_tool_base.h>
#include <tool/tool_menu.h> #include <lib_edit_frame.h>
#include <sch_base_frame.h>
class LIB_EDIT_FRAME; class LIB_EDIT_FRAME;
class EE_SELECTION_TOOL; class EE_SELECTION_TOOL;
class LIB_MOVE_TOOL : public TOOL_INTERACTIVE class LIB_MOVE_TOOL : public EE_TOOL_BASE<LIB_EDIT_FRAME>
{ {
public: public:
LIB_MOVE_TOOL(); LIB_MOVE_TOOL();
@ -45,9 +43,6 @@ public:
/// @copydoc TOOL_INTERACTIVE::Reset() /// @copydoc TOOL_INTERACTIVE::Reset()
void Reset( RESET_REASON aReason ) override; void Reset( RESET_REASON aReason ) override;
///> Get the SCH_DRAWING_TOOL top-level context menu
inline TOOL_MENU& GetToolMenu() { return m_menu; }
/** /**
* Function Main() * Function Main()
* *
@ -66,13 +61,6 @@ private:
void setTransitions() override; void setTransitions() override;
private: private:
EE_SELECTION_TOOL* m_selectionTool;
KIGFX::VIEW_CONTROLS* m_controls;
LIB_EDIT_FRAME* m_frame;
/// Menu model displayed by the tool.
TOOL_MENU m_menu;
///> Flag determining if anything is being dragged right now ///> Flag determining if anything is being dragged right now
bool m_moveInProgress; bool m_moveInProgress;

View File

@ -87,9 +87,7 @@ extern void IncrementLabelMember( wxString& name, int aIncrement );
LIB_PIN_TOOL::LIB_PIN_TOOL() : LIB_PIN_TOOL::LIB_PIN_TOOL() :
TOOL_INTERACTIVE( "eeschema.PinEditing" ), EE_TOOL_BASE<LIB_EDIT_FRAME>( "eeschema.PinEditing" )
m_selectionTool( nullptr ),
m_frame( nullptr )
{ {
} }
@ -101,10 +99,7 @@ LIB_PIN_TOOL::~LIB_PIN_TOOL()
bool LIB_PIN_TOOL::Init() bool LIB_PIN_TOOL::Init()
{ {
m_frame = getEditFrame<LIB_EDIT_FRAME>(); EE_TOOL_BASE::Init();
m_selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
wxASSERT_MSG( m_selectionTool, "eeshema.InteractiveSelection tool is not available" );
auto singlePinCondition = EE_CONDITIONS::Count( 1 ) && EE_CONDITIONS::OnlyType( LIB_PIN_T ); auto singlePinCondition = EE_CONDITIONS::Count( 1 ) && EE_CONDITIONS::OnlyType( LIB_PIN_T );
@ -119,16 +114,6 @@ bool LIB_PIN_TOOL::Init()
} }
void LIB_PIN_TOOL::Reset( RESET_REASON aReason )
{
if( aReason == MODEL_RELOAD )
{
// Init variables used by every drawing tool
m_frame = getEditFrame<LIB_EDIT_FRAME>();
}
}
bool LIB_PIN_TOOL::EditPinProperties( LIB_PIN* aPin ) bool LIB_PIN_TOOL::EditPinProperties( LIB_PIN* aPin )
{ {
aPin->EnableEditMode( true, !m_frame->SynchronizePins() ); aPin->EnableEditMode( true, !m_frame->SynchronizePins() );
@ -320,7 +305,7 @@ int LIB_PIN_TOOL::PushPinProperties( const TOOL_EVENT& aEvent )
if( !sourcePin ) if( !sourcePin )
return 0; return 0;
m_frame->SaveCopyInUndoList( part ); saveCopyInUndoList( part, UR_LIBEDIT );
for( LIB_PIN* pin = part->GetNextPin(); pin; pin = part->GetNextPin( pin ) ) for( LIB_PIN* pin = part->GetNextPin(); pin; pin = part->GetNextPin( pin ) )
{ {

View File

@ -24,16 +24,14 @@
#ifndef KICAD_LIB_PIN_TOOL_H #ifndef KICAD_LIB_PIN_TOOL_H
#define KICAD_LIB_PIN_TOOL_H #define KICAD_LIB_PIN_TOOL_H
#include <tool/tool_interactive.h> #include <tools/ee_tool_base.h>
#include <tool/tool_menu.h>
#include <sch_base_frame.h> #include <sch_base_frame.h>
class LIB_EDIT_FRAME; class LIB_EDIT_FRAME;
class EE_SELECTION_TOOL;
class LIB_PIN_TOOL : public TOOL_INTERACTIVE class LIB_PIN_TOOL : public EE_TOOL_BASE<LIB_EDIT_FRAME>
{ {
public: public:
LIB_PIN_TOOL(); LIB_PIN_TOOL();
@ -42,9 +40,6 @@ public:
/// @copydoc TOOL_INTERACTIVE::Init() /// @copydoc TOOL_INTERACTIVE::Init()
bool Init() override; bool Init() override;
/// @copydoc TOOL_INTERACTIVE::Reset()
void Reset( RESET_REASON aReason ) override;
LIB_PIN* CreatePin( const VECTOR2I& aPosition, LIB_PART* aPart ); LIB_PIN* CreatePin( const VECTOR2I& aPosition, LIB_PART* aPart );
LIB_PIN* RepeatPin( const LIB_PIN* aSourcePin ); LIB_PIN* RepeatPin( const LIB_PIN* aSourcePin );
@ -57,10 +52,6 @@ public:
private: private:
///> Sets up handlers for various events. ///> Sets up handlers for various events.
void setTransitions() override; void setTransitions() override;
private:
EE_SELECTION_TOOL* m_selectionTool;
LIB_EDIT_FRAME* m_frame;
}; };
#endif //KICAD_LIB_PIN_TOOL_H #endif //KICAD_LIB_PIN_TOOL_H

View File

@ -137,12 +137,7 @@ TOOL_ACTION EE_ACTIONS::addHierLabel( "eeschema.InteractiveEditing.addHierLabel"
SCH_DRAWING_TOOLS::SCH_DRAWING_TOOLS() : SCH_DRAWING_TOOLS::SCH_DRAWING_TOOLS() :
TOOL_INTERACTIVE( "eeschema.InteractiveDrawing" ), EE_TOOL_BASE<SCH_EDIT_FRAME>( "eeschema.InteractiveDrawing" )
m_selectionTool( nullptr ),
m_view( nullptr ),
m_controls( nullptr ),
m_frame( nullptr ),
m_menu( *this )
{ {
} }
@ -154,37 +149,19 @@ SCH_DRAWING_TOOLS::~SCH_DRAWING_TOOLS()
bool SCH_DRAWING_TOOLS::Init() bool SCH_DRAWING_TOOLS::Init()
{ {
m_frame = getEditFrame<SCH_EDIT_FRAME>(); EE_TOOL_BASE::Init();
m_selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
auto belowRootSheetCondition = [] ( const SELECTION& aSel ) { auto belowRootSheetCondition = [] ( const SELECTION& aSel ) {
return g_CurrentSheet->Last() != g_RootSheet; return g_CurrentSheet->Last() != g_RootSheet;
}; };
auto& ctxMenu = m_menu.GetMenu(); auto& ctxMenu = m_menu.GetMenu();
//
// Build the drawing tool menu
//
ctxMenu.AddItem( ACTIONS::cancelInteractive, EE_CONDITIONS::ShowAlways, 1 );
ctxMenu.AddItem( EE_ACTIONS::leaveSheet, belowRootSheetCondition, 2 ); ctxMenu.AddItem( EE_ACTIONS::leaveSheet, belowRootSheetCondition, 2 );
ctxMenu.AddSeparator( EE_CONDITIONS::ShowAlways, 1000 );
m_menu.AddStandardSubMenus( m_frame );
return true; return true;
} }
void SCH_DRAWING_TOOLS::Reset( RESET_REASON aReason )
{
// Init variables used by every drawing tool
m_view = static_cast<KIGFX::SCH_VIEW*>( getView() );
m_controls = getViewControls();
m_frame = getEditFrame<SCH_EDIT_FRAME>();
}
int SCH_DRAWING_TOOLS::AddJunction( const TOOL_EVENT& aEvent ) int SCH_DRAWING_TOOLS::AddJunction( const TOOL_EVENT& aEvent )
{ {
m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true ); m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
@ -246,8 +223,8 @@ int SCH_DRAWING_TOOLS::PlacePower( const TOOL_EVENT& aEvent )
int SCH_DRAWING_TOOLS::doPlaceComponent( SCH_COMPONENT* aComponent, SCHLIB_FILTER* aFilter, int SCH_DRAWING_TOOLS::doPlaceComponent( SCH_COMPONENT* aComponent, SCHLIB_FILTER* aFilter,
SCH_BASE_FRAME::HISTORY_LIST aHistoryList ) SCH_BASE_FRAME::HISTORY_LIST aHistoryList )
{ {
VECTOR2I cursorPos = m_controls->GetCursorPosition(); VECTOR2I cursorPos = getViewControls()->GetCursorPosition();
m_controls->ShowCursor( true ); getViewControls()->ShowCursor( true );
Activate(); Activate();
@ -266,7 +243,7 @@ int SCH_DRAWING_TOOLS::doPlaceComponent( SCH_COMPONENT* aComponent, SCHLIB_FILTE
// Main loop: keep receiving events // Main loop: keep receiving events
while( OPT_TOOL_EVENT evt = Wait() ) while( OPT_TOOL_EVENT evt = Wait() )
{ {
cursorPos = m_controls->GetCursorPosition( !evt->Modifier( MD_ALT ) ); cursorPos = getViewControls()->GetCursorPosition( !evt->Modifier( MD_ALT ) );
if( TOOL_EVT_UTILS::IsCancelInteractive( evt.get() ) ) if( TOOL_EVT_UTILS::IsCancelInteractive( evt.get() ) )
{ {
@ -359,8 +336,8 @@ int SCH_DRAWING_TOOLS::doPlaceComponent( SCH_COMPONENT* aComponent, SCHLIB_FILTE
} }
// Enable autopanning and cursor capture only when there is a module to be placed // Enable autopanning and cursor capture only when there is a module to be placed
m_controls->SetAutoPan( !!aComponent ); getViewControls()->SetAutoPan( !!aComponent );
m_controls->CaptureCursor( !!aComponent ); getViewControls()->CaptureCursor( !!aComponent );
} }
m_frame->SetNoToolSelected(); m_frame->SetNoToolSelected();
@ -375,10 +352,10 @@ int SCH_DRAWING_TOOLS::PlaceImage( const TOOL_EVENT& aEvent )
m_frame->SetToolID( ID_ADD_IMAGE_BUTT, wxCURSOR_PENCIL, _( "Add image" ) ); m_frame->SetToolID( ID_ADD_IMAGE_BUTT, wxCURSOR_PENCIL, _( "Add image" ) );
VECTOR2I cursorPos = m_controls->GetCursorPosition(); VECTOR2I cursorPos = getViewControls()->GetCursorPosition();
m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true ); m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
m_controls->ShowCursor( true ); getViewControls()->ShowCursor( true );
Activate(); Activate();
@ -393,7 +370,7 @@ int SCH_DRAWING_TOOLS::PlaceImage( const TOOL_EVENT& aEvent )
// Main loop: keep receiving events // Main loop: keep receiving events
while( OPT_TOOL_EVENT evt = Wait() ) while( OPT_TOOL_EVENT evt = Wait() )
{ {
cursorPos = m_controls->GetCursorPosition( !evt->Modifier( MD_ALT ) ); cursorPos = getViewControls()->GetCursorPosition( !evt->Modifier( MD_ALT ) );
if( TOOL_EVT_UTILS::IsCancelInteractive( evt.get() ) ) if( TOOL_EVT_UTILS::IsCancelInteractive( evt.get() ) )
{ {
@ -452,7 +429,7 @@ int SCH_DRAWING_TOOLS::PlaceImage( const TOOL_EVENT& aEvent )
m_selectionTool->AddItemToSel( image ); m_selectionTool->AddItemToSel( image );
m_controls->SetCursorPosition( cursorPos, false ); getViewControls()->SetCursorPosition( cursorPos, false );
} }
else else
{ {
@ -480,8 +457,8 @@ int SCH_DRAWING_TOOLS::PlaceImage( const TOOL_EVENT& aEvent )
} }
// Enable autopanning and cursor capture only when there is a module to be placed // Enable autopanning and cursor capture only when there is a module to be placed
m_controls->SetAutoPan( !!image ); getViewControls()->SetAutoPan( !!image );
m_controls->CaptureCursor( !!image ); getViewControls()->CaptureCursor( !!image );
} }
m_frame->SetNoToolSelected(); m_frame->SetNoToolSelected();
@ -520,16 +497,18 @@ int SCH_DRAWING_TOOLS::PlaceBusBusEntry( const TOOL_EVENT& aEvent )
int SCH_DRAWING_TOOLS::doSingleClickPlace( KICAD_T aType ) int SCH_DRAWING_TOOLS::doSingleClickPlace( KICAD_T aType )
{ {
wxPoint cursorPos;
m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true ); m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
m_controls->ShowCursor( true ); getViewControls()->ShowCursor( true );
m_controls->SetSnapping( true ); getViewControls()->SetSnapping( true );
Activate(); Activate();
// Main loop: keep receiving events // Main loop: keep receiving events
while( OPT_TOOL_EVENT evt = Wait() ) while( OPT_TOOL_EVENT evt = Wait() )
{ {
wxPoint cursorPos = (wxPoint)m_controls->GetCursorPosition( !evt->Modifier( MD_ALT ) ); cursorPos = (wxPoint) getViewControls()->GetCursorPosition( !evt->Modifier( MD_ALT ) );
if( TOOL_EVT_UTILS::IsCancelInteractive( evt.get() ) ) if( TOOL_EVT_UTILS::IsCancelInteractive( evt.get() ) )
{ {
@ -630,18 +609,18 @@ int SCH_DRAWING_TOOLS::PlaceSchematicText( const TOOL_EVENT& aEvent )
int SCH_DRAWING_TOOLS::doTwoClickPlace( KICAD_T aType ) int SCH_DRAWING_TOOLS::doTwoClickPlace( KICAD_T aType )
{ {
VECTOR2I cursorPos = m_controls->GetCursorPosition(); VECTOR2I cursorPos;
EDA_ITEM* item = nullptr; EDA_ITEM* item = nullptr;
m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true ); m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
m_controls->ShowCursor( true ); getViewControls()->ShowCursor( true );
Activate(); Activate();
// Main loop: keep receiving events // Main loop: keep receiving events
while( OPT_TOOL_EVENT evt = Wait() ) while( OPT_TOOL_EVENT evt = Wait() )
{ {
cursorPos = m_controls->GetCursorPosition( !evt->Modifier( MD_ALT ) ); cursorPos = getViewControls()->GetCursorPosition( !evt->Modifier( MD_ALT ) );
if( TOOL_EVT_UTILS::IsCancelInteractive( evt.get() ) ) if( TOOL_EVT_UTILS::IsCancelInteractive( evt.get() ) )
{ {
@ -708,7 +687,7 @@ int SCH_DRAWING_TOOLS::doTwoClickPlace( KICAD_T aType )
m_selectionTool->AddItemToSel( item ); m_selectionTool->AddItemToSel( item );
} }
m_controls->SetCursorPosition( cursorPos, false ); getViewControls()->SetCursorPosition( cursorPos, false );
} }
// ... and second click places: // ... and second click places:
@ -751,8 +730,8 @@ int SCH_DRAWING_TOOLS::doTwoClickPlace( KICAD_T aType )
} }
// Enable autopanning and cursor capture only when there is a module to be placed // Enable autopanning and cursor capture only when there is a module to be placed
m_controls->SetAutoPan( !!item ); getViewControls()->SetAutoPan( !!item );
m_controls->CaptureCursor( !!item ); getViewControls()->CaptureCursor( !!item );
} }
m_frame->SetNoToolSelected(); m_frame->SetNoToolSelected();
@ -765,7 +744,7 @@ int SCH_DRAWING_TOOLS::DrawSheet( const TOOL_EVENT& aEvent )
{ {
m_frame->SetToolID( ID_SHEET_SYMBOL_BUTT, wxCURSOR_PENCIL, _( "Add sheet" ) ); m_frame->SetToolID( ID_SHEET_SYMBOL_BUTT, wxCURSOR_PENCIL, _( "Add sheet" ) );
m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true ); m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
m_controls->ShowCursor( true ); getViewControls()->ShowCursor( true );
SCH_SHEET* sheet = nullptr; SCH_SHEET* sheet = nullptr;
@ -774,7 +753,7 @@ int SCH_DRAWING_TOOLS::DrawSheet( const TOOL_EVENT& aEvent )
// Main loop: keep receiving events // Main loop: keep receiving events
while( auto evt = Wait() ) while( auto evt = Wait() )
{ {
VECTOR2I cursorPos = m_controls->GetCursorPosition( !evt->Modifier( MD_ALT ) ); VECTOR2I cursorPos = getViewControls()->GetCursorPosition( !evt->Modifier( MD_ALT ) );
if( TOOL_EVT_UTILS::IsCancelInteractive( evt.get() ) ) if( TOOL_EVT_UTILS::IsCancelInteractive( evt.get() ) )
{ {
@ -840,8 +819,8 @@ int SCH_DRAWING_TOOLS::DrawSheet( const TOOL_EVENT& aEvent )
} }
// Enable autopanning and cursor capture only when there is a sheet to be placed // Enable autopanning and cursor capture only when there is a sheet to be placed
m_controls->SetAutoPan( !!sheet ); getViewControls()->SetAutoPan( !!sheet );
m_controls->CaptureCursor( !!sheet ); getViewControls()->CaptureCursor( !!sheet );
} }
m_frame->SetNoToolSelected(); m_frame->SetNoToolSelected();

View File

@ -24,9 +24,7 @@
#ifndef SCH_DRAWING_TOOLS_H #ifndef SCH_DRAWING_TOOLS_H
#define SCH_DRAWING_TOOLS_H #define SCH_DRAWING_TOOLS_H
#include <tool/tool_interactive.h> #include <tools/ee_tool_base.h>
#include <tool/tool_menu.h>
#include <core/optional.h>
#include <sch_base_frame.h> #include <sch_base_frame.h>
@ -44,7 +42,7 @@ class EE_SELECTION_TOOL;
* Tool responsible for drawing/placing items (symbols, wires, busses, labels, etc.) * Tool responsible for drawing/placing items (symbols, wires, busses, labels, etc.)
*/ */
class SCH_DRAWING_TOOLS : public TOOL_INTERACTIVE class SCH_DRAWING_TOOLS : public EE_TOOL_BASE<SCH_EDIT_FRAME>
{ {
public: public:
SCH_DRAWING_TOOLS(); SCH_DRAWING_TOOLS();
@ -53,12 +51,6 @@ public:
/// @copydoc TOOL_INTERACTIVE::Init() /// @copydoc TOOL_INTERACTIVE::Init()
bool Init() override; bool Init() override;
/// @copydoc TOOL_INTERACTIVE::Reset()
void Reset( RESET_REASON aReason ) override;
///> Get the SCH_DRAWING_TOOL top-level context menu
inline TOOL_MENU& GetToolMenu() { return m_menu; }
int AddJunction( const TOOL_EVENT& aEvent ); int AddJunction( const TOOL_EVENT& aEvent );
int AddLabel( const TOOL_EVENT& aEvent ); int AddLabel( const TOOL_EVENT& aEvent );
@ -90,14 +82,6 @@ private:
///> Sets up handlers for various events. ///> Sets up handlers for various events.
void setTransitions() override; void setTransitions() override;
private:
EE_SELECTION_TOOL* m_selectionTool;
KIGFX::SCH_VIEW* m_view;
KIGFX::VIEW_CONTROLS* m_controls;
SCH_EDIT_FRAME* m_frame;
TOOL_MENU m_menu;
}; };
#endif /* SCH_DRAWING_TOOLS_H */ #endif /* SCH_DRAWING_TOOLS_H */

View File

@ -235,10 +235,7 @@ private:
SCH_EDIT_TOOL::SCH_EDIT_TOOL() : SCH_EDIT_TOOL::SCH_EDIT_TOOL() :
TOOL_INTERACTIVE( "eeschema.InteractiveEdit" ), EE_TOOL_BASE<SCH_EDIT_FRAME>( "eeschema.InteractiveEdit" )
m_selectionTool( nullptr ),
m_frame( nullptr ),
m_menu( *this )
{ {
} }
@ -250,12 +247,11 @@ SCH_EDIT_TOOL::~SCH_EDIT_TOOL()
bool SCH_EDIT_TOOL::Init() bool SCH_EDIT_TOOL::Init()
{ {
m_frame = getEditFrame<SCH_EDIT_FRAME>(); EE_TOOL_BASE::Init();
m_selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
SCH_DRAWING_TOOLS* drawingTools = m_toolMgr->GetTool<SCH_DRAWING_TOOLS>(); SCH_DRAWING_TOOLS* drawingTools = m_toolMgr->GetTool<SCH_DRAWING_TOOLS>();
SCH_MOVE_TOOL* moveTool = m_toolMgr->GetTool<SCH_MOVE_TOOL>(); SCH_MOVE_TOOL* moveTool = m_toolMgr->GetTool<SCH_MOVE_TOOL>();
wxASSERT_MSG( m_selectionTool, "eeshema.InteractiveSelection tool is not available" );
wxASSERT_MSG( drawingTools, "eeshema.InteractiveDrawing tool is not available" ); wxASSERT_MSG( drawingTools, "eeshema.InteractiveDrawing tool is not available" );
auto sheetTool = [ this ] ( const SELECTION& aSel ) { auto sheetTool = [ this ] ( const SELECTION& aSel ) {
@ -464,16 +460,6 @@ bool SCH_EDIT_TOOL::Init()
} }
void SCH_EDIT_TOOL::Reset( RESET_REASON aReason )
{
if( aReason == MODEL_RELOAD )
{
// Init variables used by every drawing tool
m_frame = getEditFrame<SCH_EDIT_FRAME>();
}
}
int SCH_EDIT_TOOL::Rotate( const TOOL_EVENT& aEvent ) int SCH_EDIT_TOOL::Rotate( const TOOL_EVENT& aEvent )
{ {
SELECTION& selection = m_selectionTool->RequestSelection( EE_COLLECTOR::RotatableItems ); SELECTION& selection = m_selectionTool->RequestSelection( EE_COLLECTOR::RotatableItems );
@ -1300,28 +1286,6 @@ int SCH_EDIT_TOOL::CleanupSheetPins( const TOOL_EVENT& aEvent )
} }
void SCH_EDIT_TOOL::updateView( EDA_ITEM* aItem )
{
KICAD_T itemType = aItem->Type();
if( itemType == SCH_PIN_T || itemType == SCH_FIELD_T || itemType == SCH_SHEET_PIN_T )
getView()->Update( aItem->GetParent() );
getView()->Update( aItem );
}
void SCH_EDIT_TOOL::saveCopyInUndoList( EDA_ITEM* aItem, UNDO_REDO_T aType, bool aAppend )
{
KICAD_T itemType = aItem->Type();
if( itemType == SCH_PIN_T || itemType == SCH_FIELD_T || itemType == SCH_SHEET_PIN_T )
m_frame->SaveCopyInUndoList( (SCH_ITEM*) aItem->GetParent(), UR_CHANGED, aAppend );
else
m_frame->SaveCopyInUndoList( (SCH_ITEM*) aItem, aType, aAppend );
}
void SCH_EDIT_TOOL::setTransitions() void SCH_EDIT_TOOL::setTransitions()
{ {
Go( &SCH_EDIT_TOOL::Duplicate, EE_ACTIONS::duplicate.MakeEvent() ); Go( &SCH_EDIT_TOOL::Duplicate, EE_ACTIONS::duplicate.MakeEvent() );

View File

@ -24,8 +24,7 @@
#ifndef KICAD_SCH_EDIT_TOOL_H #ifndef KICAD_SCH_EDIT_TOOL_H
#define KICAD_SCH_EDIT_TOOL_H #define KICAD_SCH_EDIT_TOOL_H
#include <tool/tool_interactive.h> #include <tools/ee_tool_base.h>
#include <tool/tool_menu.h>
#include <sch_base_frame.h> #include <sch_base_frame.h>
@ -33,7 +32,7 @@ class SCH_EDIT_FRAME;
class EE_SELECTION_TOOL; class EE_SELECTION_TOOL;
class SCH_EDIT_TOOL : public TOOL_INTERACTIVE class SCH_EDIT_TOOL : public EE_TOOL_BASE<SCH_EDIT_FRAME>
{ {
public: public:
SCH_EDIT_TOOL(); SCH_EDIT_TOOL();
@ -42,12 +41,6 @@ public:
/// @copydoc TOOL_INTERACTIVE::Init() /// @copydoc TOOL_INTERACTIVE::Init()
bool Init() override; bool Init() override;
/// @copydoc TOOL_INTERACTIVE::Reset()
void Reset( RESET_REASON aReason ) override;
///> Get the SCH_DRAWING_TOOL top-level context menu
inline TOOL_MENU& GetToolMenu() { return m_menu; }
int Rotate( const TOOL_EVENT& aEvent ); int Rotate( const TOOL_EVENT& aEvent );
int Mirror( const TOOL_EVENT& aEvent ); int Mirror( const TOOL_EVENT& aEvent );
@ -77,22 +70,8 @@ public:
int DeleteItemCursor( const TOOL_EVENT& aEvent ); int DeleteItemCursor( const TOOL_EVENT& aEvent );
private: private:
///> Similar to getView()->Update(), but handles items that are redrawn by their parents.
void updateView( EDA_ITEM* );
///> Similar to m_frame->SaveCopyInUndoList(), but handles items that are owned by their
///> parents.
void saveCopyInUndoList( EDA_ITEM*, UNDO_REDO_T aType, bool aAppend = false );
///> Sets up handlers for various events. ///> Sets up handlers for various events.
void setTransitions() override; void setTransitions() override;
private:
EE_SELECTION_TOOL* m_selectionTool;
SCH_EDIT_FRAME* m_frame;
/// Menu model displayed by the tool.
TOOL_MENU m_menu;
}; };
#endif //KICAD_SCH_EDIT_TOOL_H #endif //KICAD_SCH_EDIT_TOOL_H

View File

@ -108,9 +108,7 @@ TOOL_ACTION EE_ACTIONS::explicitCrossProbe( "eeschema.EditorControl.explicitCros
SCH_EDITOR_CONTROL::SCH_EDITOR_CONTROL() : SCH_EDITOR_CONTROL::SCH_EDITOR_CONTROL() :
TOOL_INTERACTIVE( "eeschema.EditorControl" ), EE_TOOL_BASE<SCH_EDIT_FRAME>( "eeschema.EditorControl" )
m_frame( nullptr ),
m_menu( *this )
{ {
} }
@ -120,32 +118,6 @@ SCH_EDITOR_CONTROL::~SCH_EDITOR_CONTROL()
} }
void SCH_EDITOR_CONTROL::Reset( RESET_REASON aReason )
{
m_frame = getEditFrame<SCH_EDIT_FRAME>();
}
bool SCH_EDITOR_CONTROL::Init()
{
m_frame = getEditFrame<SCH_EDIT_FRAME>();
auto activeToolCondition = [ this ] ( const SELECTION& aSel ) {
return ( m_frame->GetToolId() != ID_NO_TOOL_SELECTED );
};
auto& ctxMenu = m_menu.GetMenu();
// "Cancel" goes at the top of the context menu when a tool is active
ctxMenu.AddItem( ACTIONS::cancelInteractive, activeToolCondition, 1 );
ctxMenu.AddSeparator( activeToolCondition, 1000 );
m_menu.AddStandardSubMenus( m_frame );
return true;
}
int SCH_EDITOR_CONTROL::CrossProbeToPcb( const TOOL_EVENT& aEvent ) int SCH_EDITOR_CONTROL::CrossProbeToPcb( const TOOL_EVENT& aEvent )
{ {
doCrossProbeSchToPcb( aEvent, false ); doCrossProbeSchToPcb( aEvent, false );

View File

@ -26,9 +26,7 @@
#define SCH_EDITOR_CONTROL_H #define SCH_EDITOR_CONTROL_H
#include <sch_base_frame.h> #include <sch_base_frame.h>
#include <tool/tool_interactive.h> #include <tools/ee_tool_base.h>
#include <tool/tool_event.h>
#include <tool/tool_menu.h>
class SCH_EDIT_FRAME; class SCH_EDIT_FRAME;
@ -37,18 +35,12 @@ class SCH_EDIT_FRAME;
* *
* Handles actions specific to the schematic editor in eeschema. * Handles actions specific to the schematic editor in eeschema.
*/ */
class SCH_EDITOR_CONTROL : public wxEvtHandler, public TOOL_INTERACTIVE class SCH_EDITOR_CONTROL : public wxEvtHandler, public EE_TOOL_BASE<SCH_EDIT_FRAME>
{ {
public: public:
SCH_EDITOR_CONTROL(); SCH_EDITOR_CONTROL();
~SCH_EDITOR_CONTROL(); ~SCH_EDITOR_CONTROL();
/// @copydoc TOOL_INTERACTIVE::Reset()
void Reset( RESET_REASON aReason ) override;
/// @copydoc TOOL_INTERACTIVE::Init()
bool Init() override;
int ToggleLockSelected( const TOOL_EVENT& aEvent ); int ToggleLockSelected( const TOOL_EVENT& aEvent );
int LockSelected( const TOOL_EVENT& aEvent ); int LockSelected( const TOOL_EVENT& aEvent );
int UnlockSelected( const TOOL_EVENT& aEvent ); int UnlockSelected( const TOOL_EVENT& aEvent );
@ -96,12 +88,8 @@ private:
///> Sets up handlers for various events. ///> Sets up handlers for various events.
void setTransitions() override; void setTransitions() override;
SCH_EDIT_FRAME* m_frame; ///> Pointer to the currently used edit frame private:
bool m_probingSchToPcb; ///> Recursion guard when cross-probing to PCBNew bool m_probingSchToPcb; ///> Recursion guard when cross-probing to PCBNew
/// Menu model displayed by the tool.
TOOL_MENU m_menu;
}; };

View File

@ -52,11 +52,7 @@ TOOL_ACTION EE_ACTIONS::drag( "eeschema.InteractiveEdit.drag",
SCH_MOVE_TOOL::SCH_MOVE_TOOL() : SCH_MOVE_TOOL::SCH_MOVE_TOOL() :
TOOL_INTERACTIVE( "eeschema.InteractiveMove" ), EE_TOOL_BASE<SCH_EDIT_FRAME>( "eeschema.InteractiveMove" ),
m_selectionTool( nullptr ),
m_controls( nullptr ),
m_frame( nullptr ),
m_menu( *this ),
m_moveInProgress( false ), m_moveInProgress( false ),
m_moveOffset( 0, 0 ) m_moveOffset( 0, 0 )
{ {
@ -70,10 +66,7 @@ SCH_MOVE_TOOL::~SCH_MOVE_TOOL()
bool SCH_MOVE_TOOL::Init() bool SCH_MOVE_TOOL::Init()
{ {
m_frame = getEditFrame<SCH_EDIT_FRAME>(); EE_TOOL_BASE::Init();
m_selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
wxASSERT_MSG( m_selectionTool, "eeshema.InteractiveSelection tool is not available" );
auto moveCondition = [] ( const SELECTION& aSel ) { auto moveCondition = [] ( const SELECTION& aSel ) {
if( aSel.Empty() ) if( aSel.Empty() )
@ -85,16 +78,6 @@ bool SCH_MOVE_TOOL::Init()
return true; return true;
}; };
//
// Build the tool menu
//
CONDITIONAL_MENU& ctxMenu = m_menu.GetMenu();
ctxMenu.AddItem( ACTIONS::cancelInteractive, EE_CONDITIONS::ShowAlways, 1 );
ctxMenu.AddSeparator( EE_CONDITIONS::ShowAlways, 1000 );
m_menu.AddStandardSubMenus( m_frame );
// //
// Add move actions to the selection tool menu // Add move actions to the selection tool menu
// //
@ -107,20 +90,6 @@ bool SCH_MOVE_TOOL::Init()
} }
void SCH_MOVE_TOOL::Reset( RESET_REASON aReason )
{
if( aReason == MODEL_RELOAD )
{
m_moveInProgress = false;
m_moveOffset = { 0, 0 };
// Init variables used by every drawing tool
m_controls = getViewControls();
m_frame = getEditFrame<SCH_EDIT_FRAME>();
}
}
int SCH_MOVE_TOOL::Main( const TOOL_EVENT& aEvent ) int SCH_MOVE_TOOL::Main( const TOOL_EVENT& aEvent )
{ {
const KICAD_T movableItems[] = const KICAD_T movableItems[] =
@ -663,28 +632,6 @@ bool SCH_MOVE_TOOL::updateModificationPoint( SELECTION& aSelection )
} }
void SCH_MOVE_TOOL::updateView( EDA_ITEM* aItem )
{
KICAD_T itemType = aItem->Type();
if( itemType == SCH_PIN_T || itemType == SCH_FIELD_T || itemType == SCH_SHEET_PIN_T )
getView()->Update( aItem->GetParent() );
getView()->Update( aItem );
}
void SCH_MOVE_TOOL::saveCopyInUndoList( SCH_ITEM* aItem, UNDO_REDO_T aType, bool aAppend )
{
KICAD_T itemType = aItem->Type();
if( itemType == SCH_PIN_T || itemType == SCH_FIELD_T || itemType == SCH_SHEET_PIN_T )
m_frame->SaveCopyInUndoList( (SCH_ITEM*)aItem->GetParent(), UR_CHANGED, aAppend );
else
m_frame->SaveCopyInUndoList( aItem, aType, aAppend );
}
void SCH_MOVE_TOOL::setTransitions() void SCH_MOVE_TOOL::setTransitions()
{ {
Go( &SCH_MOVE_TOOL::Main, EE_ACTIONS::move.MakeEvent() ); Go( &SCH_MOVE_TOOL::Main, EE_ACTIONS::move.MakeEvent() );

View File

@ -24,8 +24,7 @@
#ifndef KICAD_SCH_MOVE_TOOL_H #ifndef KICAD_SCH_MOVE_TOOL_H
#define KICAD_SCH_MOVE_TOOL_H #define KICAD_SCH_MOVE_TOOL_H
#include <tool/tool_interactive.h> #include <tools/ee_tool_base.h>
#include <tool/tool_menu.h>
#include <sch_base_frame.h> #include <sch_base_frame.h>
@ -33,7 +32,7 @@ class SCH_EDIT_FRAME;
class EE_SELECTION_TOOL; class EE_SELECTION_TOOL;
class SCH_MOVE_TOOL : public TOOL_INTERACTIVE class SCH_MOVE_TOOL : public EE_TOOL_BASE<SCH_EDIT_FRAME>
{ {
public: public:
SCH_MOVE_TOOL(); SCH_MOVE_TOOL();
@ -42,12 +41,6 @@ public:
/// @copydoc TOOL_INTERACTIVE::Init() /// @copydoc TOOL_INTERACTIVE::Init()
bool Init() override; bool Init() override;
/// @copydoc TOOL_INTERACTIVE::Reset()
void Reset( RESET_REASON aReason ) override;
///> Get the SCH_DRAWING_TOOL top-level context menu
inline TOOL_MENU& GetToolMenu() { return m_menu; }
/** /**
* Function Main() * Function Main()
* *
@ -71,24 +64,10 @@ private:
///> selected items. ///> selected items.
bool updateModificationPoint( SELECTION& aSelection ); bool updateModificationPoint( SELECTION& aSelection );
///> Similar to getView()->Update(), but handles items that are redrawn by their parents.
void updateView( EDA_ITEM* );
///> Similar to m_frame->SaveCopyInUndoList(), but handles items that are owned by their
///> parents.
void saveCopyInUndoList( SCH_ITEM*, UNDO_REDO_T aType, bool aAppend = false );
///> Sets up handlers for various events. ///> Sets up handlers for various events.
void setTransitions() override; void setTransitions() override;
private: private:
EE_SELECTION_TOOL* m_selectionTool;
KIGFX::VIEW_CONTROLS* m_controls;
SCH_EDIT_FRAME* m_frame;
/// Menu model displayed by the tool.
TOOL_MENU m_menu;
///> Flag determining if anything is being dragged right now ///> Flag determining if anything is being dragged right now
bool m_moveInProgress; bool m_moveInProgress;

View File

@ -187,12 +187,7 @@ private:
SCH_WIRE_BUS_TOOL::SCH_WIRE_BUS_TOOL() : SCH_WIRE_BUS_TOOL::SCH_WIRE_BUS_TOOL() :
TOOL_INTERACTIVE( "eeschema.WireBusDrawing" ), EE_TOOL_BASE<SCH_EDIT_FRAME>( "eeschema.WireBusDrawing" )
m_selectionTool( nullptr ),
m_view( nullptr ),
m_controls( nullptr ),
m_frame( nullptr ),
m_menu( *this )
{ {
m_busUnfold = {}; m_busUnfold = {};
} }
@ -205,8 +200,7 @@ SCH_WIRE_BUS_TOOL::~SCH_WIRE_BUS_TOOL()
bool SCH_WIRE_BUS_TOOL::Init() bool SCH_WIRE_BUS_TOOL::Init()
{ {
m_frame = getEditFrame<SCH_EDIT_FRAME>(); EE_TOOL_BASE::Init();
m_selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
auto activeTool = [ this ] ( const SELECTION& aSel ) { auto activeTool = [ this ] ( const SELECTION& aSel ) {
return ( m_frame->GetToolId() != ID_NO_TOOL_SELECTED ); return ( m_frame->GetToolId() != ID_NO_TOOL_SELECTED );
@ -232,7 +226,6 @@ bool SCH_WIRE_BUS_TOOL::Init()
// //
// Build the tool menu // Build the tool menu
// //
ctxMenu.AddItem( ACTIONS::cancelInteractive, EE_CONDITIONS::ShowAlways, 1 );
ctxMenu.AddItem( EE_ACTIONS::leaveSheet, belowRootSheetCondition, 2 ); ctxMenu.AddItem( EE_ACTIONS::leaveSheet, belowRootSheetCondition, 2 );
ctxMenu.AddSeparator( EE_CONDITIONS::ShowAlways, 10 ); ctxMenu.AddSeparator( EE_CONDITIONS::ShowAlways, 10 );
@ -260,9 +253,6 @@ bool SCH_WIRE_BUS_TOOL::Init()
ctxMenu.AddItem( EE_ACTIONS::selectNode, wireOrBusTool && EE_CONDITIONS::Idle, 200 ); ctxMenu.AddItem( EE_ACTIONS::selectNode, wireOrBusTool && EE_CONDITIONS::Idle, 200 );
ctxMenu.AddItem( EE_ACTIONS::selectConnection, wireOrBusTool && EE_CONDITIONS::Idle, 200 ); ctxMenu.AddItem( EE_ACTIONS::selectConnection, wireOrBusTool && EE_CONDITIONS::Idle, 200 );
ctxMenu.AddSeparator( activeTool, 1000 );
m_menu.AddStandardSubMenus( m_frame );
// //
// Add bus unfolding to the selection tool // Add bus unfolding to the selection tool
// //
@ -277,15 +267,6 @@ bool SCH_WIRE_BUS_TOOL::Init()
} }
void SCH_WIRE_BUS_TOOL::Reset( RESET_REASON aReason )
{
// Init variables used by every drawing tool
m_view = static_cast<KIGFX::SCH_VIEW*>( getView() );
m_controls = getViewControls();
m_frame = getEditFrame<SCH_EDIT_FRAME>();
}
static bool isNewSegment( SCH_ITEM* aItem ) static bool isNewSegment( SCH_ITEM* aItem )
{ {
return aItem && aItem->IsNew() && aItem->Type() == SCH_LINE_T; return aItem && aItem->IsNew() && aItem->Type() == SCH_LINE_T;
@ -591,10 +572,11 @@ static void computeBreakPoint( SCH_SCREEN* aScreen, SCH_LINE* aSegment, wxPoint&
int SCH_WIRE_BUS_TOOL::doDrawSegments( int aType, SCH_LINE* aSegment ) int SCH_WIRE_BUS_TOOL::doDrawSegments( int aType, SCH_LINE* aSegment )
{ {
bool forceHV = m_frame->GetForceHVLines(); bool forceHV = m_frame->GetForceHVLines();
SCH_SCREEN* screen = m_frame->GetScreen(); SCH_SCREEN* screen = m_frame->GetScreen();
wxPoint cursorPos;
m_controls->ShowCursor( true ); getViewControls()->ShowCursor( true );
if( aSegment == nullptr ) if( aSegment == nullptr )
Activate(); Activate();
@ -602,7 +584,7 @@ int SCH_WIRE_BUS_TOOL::doDrawSegments( int aType, SCH_LINE* aSegment )
// Main loop: keep receiving events // Main loop: keep receiving events
while( OPT_TOOL_EVENT evt = Wait() ) while( OPT_TOOL_EVENT evt = Wait() )
{ {
wxPoint cursorPos = (wxPoint)m_controls->GetCursorPosition( !evt->Modifier( MD_ALT ) ); cursorPos = (wxPoint)getViewControls()->GetCursorPosition( !evt->Modifier( MD_ALT ) );
//------------------------------------------------------------------------ //------------------------------------------------------------------------
// Handle cancel: // Handle cancel:
@ -802,8 +784,8 @@ int SCH_WIRE_BUS_TOOL::doDrawSegments( int aType, SCH_LINE* aSegment )
} }
// Enable autopanning and cursor capture only when there is a segment to be placed // Enable autopanning and cursor capture only when there is a segment to be placed
m_controls->SetAutoPan( !!aSegment ); getViewControls()->SetAutoPan( !!aSegment );
m_controls->CaptureCursor( !!aSegment ); getViewControls()->CaptureCursor( !!aSegment );
} }
return 0; return 0;
@ -959,8 +941,8 @@ void SCH_WIRE_BUS_TOOL::finishSegments()
m_view->ClearPreview(); m_view->ClearPreview();
m_view->ShowPreview( false ); m_view->ShowPreview( false );
m_controls->CaptureCursor( false ); getViewControls()->CaptureCursor( false );
m_controls->SetAutoPan( false ); getViewControls()->SetAutoPan( false );
m_frame->SaveCopyInUndoList( itemList, UR_NEW ); m_frame->SaveCopyInUndoList( itemList, UR_NEW );

View File

@ -24,8 +24,7 @@
#ifndef SCH_LINE_DRAWING_TOOL_H #ifndef SCH_LINE_DRAWING_TOOL_H
#define SCH_LINE_DRAWING_TOOL_H #define SCH_LINE_DRAWING_TOOL_H
#include <tool/tool_interactive.h> #include <tools/ee_tool_base.h>
#include <tool/tool_menu.h>
#include <core/optional.h> #include <core/optional.h>
#include <sch_base_frame.h> #include <sch_base_frame.h>
@ -57,7 +56,7 @@ struct BUS_UNFOLDING_T
* Tool responsible for drawing/placing items (symbols, wires, busses, labels, etc.) * Tool responsible for drawing/placing items (symbols, wires, busses, labels, etc.)
*/ */
class SCH_WIRE_BUS_TOOL : public TOOL_INTERACTIVE class SCH_WIRE_BUS_TOOL : public EE_TOOL_BASE<SCH_EDIT_FRAME>
{ {
public: public:
SCH_WIRE_BUS_TOOL(); SCH_WIRE_BUS_TOOL();
@ -66,12 +65,6 @@ public:
/// @copydoc TOOL_INTERACTIVE::Init() /// @copydoc TOOL_INTERACTIVE::Init()
bool Init() override; bool Init() override;
/// @copydoc TOOL_INTERACTIVE::Reset()
void Reset( RESET_REASON aReason ) override;
///> Get the SCH_LINE_DRAWING_TOOL top-level context menu
inline TOOL_MENU& GetToolMenu() { return m_menu; }
/* /*
* These are the immediate actions. They start drawing at the mouse location. They * These are the immediate actions. They start drawing at the mouse location. They
* do not select the tool. * do not select the tool.
@ -97,7 +90,6 @@ public:
static bool IsDrawingLineWireOrBus( const SELECTION& aSelection ); static bool IsDrawingLineWireOrBus( const SELECTION& aSelection );
private: private:
int doDrawSegments( int aType, SCH_LINE* aSegment ); int doDrawSegments( int aType, SCH_LINE* aSegment );
SCH_LINE* startSegments( int aType, const wxPoint& aPos ); SCH_LINE* startSegments( int aType, const wxPoint& aPos );
SCH_LINE* doUnfoldBus( const wxString& aNet ); SCH_LINE* doUnfoldBus( const wxString& aNet );
@ -107,15 +99,8 @@ private:
void setTransitions() override; void setTransitions() override;
private: private:
EE_SELECTION_TOOL* m_selectionTool;
KIGFX::SCH_VIEW* m_view;
KIGFX::VIEW_CONTROLS* m_controls;
SCH_EDIT_FRAME* m_frame;
/// Data related to bus unfolding tool. /// Data related to bus unfolding tool.
BUS_UNFOLDING_T m_busUnfold; BUS_UNFOLDING_T m_busUnfold;
TOOL_MENU m_menu;
}; };
#endif /* SCH_LINE_DRAWING_TOOL_H */ #endif /* SCH_LINE_DRAWING_TOOL_H */

View File

@ -332,7 +332,7 @@ set( PCBNEW_CLASS_SRCS
tools/pcb_bright_box.cpp tools/pcb_bright_box.cpp
tools/pcb_editor_control.cpp tools/pcb_editor_control.cpp
tools/pcb_selection_conditions.cpp tools/pcb_selection_conditions.cpp
tools/pcb_tool.cpp tools/pcb_tool_base.cpp
tools/pcbnew_control.cpp tools/pcbnew_control.cpp
tools/picker_tool.cpp tools/picker_tool.cpp
tools/placement_tool.cpp tools/placement_tool.cpp

View File

@ -58,7 +58,7 @@ TOOL_ACTION PCB_ACTIONS::autoplaceOffboardComponents( "pcbnew.Autoplacer.autopla
AS_GLOBAL, 0, _( "Auto-place off-board components" ), AS_GLOBAL, 0, _( "Auto-place off-board components" ),
_( "Performs automatic placement of components outside board area" ) ); _( "Performs automatic placement of components outside board area" ) );
AUTOPLACE_TOOL::AUTOPLACE_TOOL() : PCB_TOOL( "pcbnew.Autoplacer" ) AUTOPLACE_TOOL::AUTOPLACE_TOOL() : PCB_TOOL_BASE( "pcbnew.Autoplacer" )
{ {
} }

View File

@ -24,7 +24,7 @@
#ifndef TOOLS_AUTOPLACE_TOOL_H #ifndef TOOLS_AUTOPLACE_TOOL_H
#define TOOLS_AUTOPLACE_TOOL_H #define TOOLS_AUTOPLACE_TOOL_H
#include <tools/pcb_tool.h> #include <tools/pcb_tool_base.h>
/** /**
@ -32,7 +32,7 @@
* *
* Tool responsible for automagic placement of components. * Tool responsible for automagic placement of components.
*/ */
class AUTOPLACE_TOOL : public PCB_TOOL class AUTOPLACE_TOOL : public PCB_TOOL_BASE
{ {
public: public:
AUTOPLACE_TOOL(); AUTOPLACE_TOOL();

View File

@ -29,7 +29,7 @@
#include <tools/selection_tool.h> #include <tools/selection_tool.h>
#include <view/view.h> #include <view/view.h>
#include <board_commit.h> #include <board_commit.h>
#include <tools/pcb_tool.h> #include <tools/pcb_tool_base.h>
#include <tools/pcb_actions.h> #include <tools/pcb_actions.h>
#include <connectivity/connectivity_data.h> #include <connectivity/connectivity_data.h>
@ -38,7 +38,7 @@ using namespace std::placeholders;
#include "pcb_draw_panel_gal.h" #include "pcb_draw_panel_gal.h"
BOARD_COMMIT::BOARD_COMMIT( PCB_TOOL* aTool ) BOARD_COMMIT::BOARD_COMMIT( PCB_TOOL_BASE* aTool )
{ {
m_toolMgr = aTool->GetManager(); m_toolMgr = aTool->GetManager();
m_editModules = aTool->EditingModules(); m_editModules = aTool->EditingModules();

View File

@ -29,7 +29,7 @@
class BOARD_ITEM; class BOARD_ITEM;
class PICKED_ITEMS_LIST; class PICKED_ITEMS_LIST;
class PCB_TOOL; class PCB_TOOL_BASE;
class TOOL_MANAGER; class TOOL_MANAGER;
class EDA_DRAW_FRAME; class EDA_DRAW_FRAME;
class TOOL_BASE; class TOOL_BASE;
@ -38,7 +38,7 @@ class BOARD_COMMIT : public COMMIT
{ {
public: public:
BOARD_COMMIT( EDA_DRAW_FRAME* aFrame ); BOARD_COMMIT( EDA_DRAW_FRAME* aFrame );
BOARD_COMMIT( PCB_TOOL *aTool ); BOARD_COMMIT( PCB_TOOL_BASE *aTool );
virtual ~BOARD_COMMIT(); virtual ~BOARD_COMMIT();

View File

@ -1026,7 +1026,7 @@ void FOOTPRINT_EDIT_FRAME::setupTools()
m_toolManager->RegisterTool( new PCBNEW_CONTROL ); m_toolManager->RegisterTool( new PCBNEW_CONTROL );
m_toolManager->RegisterTool( new MODULE_EDITOR_TOOLS ); m_toolManager->RegisterTool( new MODULE_EDITOR_TOOLS );
m_toolManager->RegisterTool( new ALIGN_DISTRIBUTE_TOOL ); m_toolManager->RegisterTool( new ALIGN_DISTRIBUTE_TOOL );
m_toolManager->RegisterTool( new EE_PICKER_TOOL ); m_toolManager->RegisterTool( new PICKER_TOOL );
m_toolManager->RegisterTool( new POSITION_RELATIVE_TOOL ); m_toolManager->RegisterTool( new POSITION_RELATIVE_TOOL );
m_toolManager->GetTool<PAD_TOOL>()->SetEditModules( true ); m_toolManager->GetTool<PAD_TOOL>()->SetEditModules( true );

View File

@ -572,7 +572,7 @@ void PCB_EDIT_FRAME::setupTools()
m_toolManager->RegisterTool( new COMMON_TOOLS ); m_toolManager->RegisterTool( new COMMON_TOOLS );
m_toolManager->RegisterTool( new SELECTION_TOOL ); m_toolManager->RegisterTool( new SELECTION_TOOL );
m_toolManager->RegisterTool( new ZOOM_TOOL ); m_toolManager->RegisterTool( new ZOOM_TOOL );
m_toolManager->RegisterTool( new EE_PICKER_TOOL ); m_toolManager->RegisterTool( new PICKER_TOOL );
m_toolManager->RegisterTool( new ROUTER_TOOL ); m_toolManager->RegisterTool( new ROUTER_TOOL );
m_toolManager->RegisterTool( new LENGTH_TUNER_TOOL ); m_toolManager->RegisterTool( new LENGTH_TUNER_TOOL );
m_toolManager->RegisterTool( new EDIT_TOOL ); m_toolManager->RegisterTool( new EDIT_TOOL );

View File

@ -48,7 +48,7 @@
#include <geometry/shape_arc.h> #include <geometry/shape_arc.h>
#include <geometry/convex_hull.h> #include <geometry/convex_hull.h>
#include "tools/pcb_tool.h" #include "tools/pcb_tool_base.h"
#include "pns_kicad_iface.h" #include "pns_kicad_iface.h"
@ -1260,7 +1260,7 @@ void PNS_KICAD_IFACE::SetRouter( PNS::ROUTER* aRouter )
} }
void PNS_KICAD_IFACE::SetHostTool( PCB_TOOL* aTool ) void PNS_KICAD_IFACE::SetHostTool( PCB_TOOL_BASE* aTool )
{ {
m_tool = aTool; m_tool = aTool;
m_commit.reset( new BOARD_COMMIT( m_tool ) ); m_commit.reset( new BOARD_COMMIT( m_tool ) );

View File

@ -32,7 +32,7 @@ class PNS_PCBNEW_DEBUG_DECORATOR;
class BOARD; class BOARD;
class BOARD_COMMIT; class BOARD_COMMIT;
class PCB_DISPLAY_OPTIONS; class PCB_DISPLAY_OPTIONS;
class PCB_TOOL; class PCB_TOOL_BASE;
namespace KIGFX namespace KIGFX
{ {
@ -45,7 +45,7 @@ public:
~PNS_KICAD_IFACE(); ~PNS_KICAD_IFACE();
void SetRouter( PNS::ROUTER* aRouter ) override; void SetRouter( PNS::ROUTER* aRouter ) override;
void SetHostTool( PCB_TOOL* aTool ); void SetHostTool( PCB_TOOL_BASE* aTool );
void SetDisplayOptions( PCB_DISPLAY_OPTIONS* aDispOptions ); void SetDisplayOptions( PCB_DISPLAY_OPTIONS* aDispOptions );
void SetBoard( BOARD* aBoard ); void SetBoard( BOARD* aBoard );
@ -80,7 +80,7 @@ private:
PNS::ROUTER* m_router; PNS::ROUTER* m_router;
BOARD* m_board; BOARD* m_board;
PCB_TOOL* m_tool; PCB_TOOL_BASE* m_tool;
std::unique_ptr<BOARD_COMMIT> m_commit; std::unique_ptr<BOARD_COMMIT> m_commit;
PCB_DISPLAY_OPTIONS* m_dispOptions; PCB_DISPLAY_OPTIONS* m_dispOptions;
}; };

View File

@ -63,7 +63,7 @@ namespace PNS {
TOOL_BASE::TOOL_BASE( const std::string& aToolName ) : TOOL_BASE::TOOL_BASE( const std::string& aToolName ) :
PCB_TOOL( aToolName ) PCB_TOOL_BASE( aToolName )
{ {
m_gridHelper = nullptr; m_gridHelper = nullptr;
m_iface = nullptr; m_iface = nullptr;

View File

@ -27,7 +27,7 @@
#include <import_export.h> #include <import_export.h>
#include <math/vector2d.h> #include <math/vector2d.h>
#include <tools/pcb_tool.h> #include <tools/pcb_tool_base.h>
#include <board_commit.h> #include <board_commit.h>
#include <msgpanel.h> #include <msgpanel.h>
@ -41,7 +41,7 @@ class PNS_TUNE_STATUS_POPUP;
namespace PNS { namespace PNS {
class APIEXPORT TOOL_BASE : public PCB_TOOL class APIEXPORT TOOL_BASE : public PCB_TOOL_BASE
{ {
public: public:
TOOL_BASE( const std::string& aToolName ); TOOL_BASE( const std::string& aToolName );

View File

@ -148,7 +148,7 @@ static TOOL_ACTION closeZoneOutline( "pcbnew.InteractiveDrawing.closeZoneOutline
DRAWING_TOOL::DRAWING_TOOL() : DRAWING_TOOL::DRAWING_TOOL() :
PCB_TOOL( "pcbnew.InteractiveDrawing" ), PCB_TOOL_BASE( "pcbnew.InteractiveDrawing" ),
m_view( nullptr ), m_controls( nullptr ), m_view( nullptr ), m_controls( nullptr ),
m_board( nullptr ), m_frame( nullptr ), m_mode( MODE::NONE ), m_board( nullptr ), m_frame( nullptr ), m_mode( MODE::NONE ),
m_lineWidth( 1 ) m_lineWidth( 1 )

View File

@ -25,7 +25,7 @@
#ifndef __DRAWING_TOOL_H #ifndef __DRAWING_TOOL_H
#define __DRAWING_TOOL_H #define __DRAWING_TOOL_H
#include <tools/pcb_tool.h> #include <tools/pcb_tool_base.h>
#include <core/optional.h> #include <core/optional.h>
#include <tool/tool_menu.h> #include <tool/tool_menu.h>
@ -46,7 +46,7 @@ class POLYGON_GEOM_MANAGER;
* Tool responsible for drawing graphical elements like lines, arcs, circles, etc. * Tool responsible for drawing graphical elements like lines, arcs, circles, etc.
*/ */
class DRAWING_TOOL : public PCB_TOOL class DRAWING_TOOL : public PCB_TOOL_BASE
{ {
public: public:
DRAWING_TOOL(); DRAWING_TOOL();

View File

@ -208,8 +208,10 @@ void EditToolSelectionFilter( GENERAL_COLLECTOR& aCollector, int aFlags )
EDIT_TOOL::EDIT_TOOL() : EDIT_TOOL::EDIT_TOOL() :
PCB_TOOL( "pcbnew.InteractiveEdit" ), m_selectionTool( NULL ), PCB_TOOL_BASE( "pcbnew.InteractiveEdit" ),
m_dragging( false ), m_lockedSelected( false ) m_selectionTool( NULL ),
m_dragging( false ),
m_lockedSelected( false )
{ {
} }
@ -1462,7 +1464,7 @@ int EDIT_TOOL::editFootprintInFpEditor( const TOOL_EVENT& aEvent )
bool EDIT_TOOL::pickCopyReferencePoint( VECTOR2I& aP ) bool EDIT_TOOL::pickCopyReferencePoint( VECTOR2I& aP )
{ {
STATUS_TEXT_POPUP statusPopup( frame() ); STATUS_TEXT_POPUP statusPopup( frame() );
EE_PICKER_TOOL* picker = m_toolMgr->GetTool<EE_PICKER_TOOL>(); PICKER_TOOL* picker = m_toolMgr->GetTool<PICKER_TOOL>();
bool picking = true; bool picking = true;
bool retVal = true; bool retVal = true;

View File

@ -27,7 +27,7 @@
#define __EDIT_TOOL_H #define __EDIT_TOOL_H
#include <math/vector2d.h> #include <math/vector2d.h>
#include <tools/pcb_tool.h> #include <tools/pcb_tool_base.h>
#include <tools/selection_tool.h> #include <tools/selection_tool.h>
#include <status_popup.h> #include <status_popup.h>
@ -56,7 +56,7 @@ void EditToolSelectionFilter( GENERAL_COLLECTOR& aCollector, int aFlags );
* using the pcbnew.InteractiveSelection tool. * using the pcbnew.InteractiveSelection tool.
*/ */
class EDIT_TOOL : public PCB_TOOL class EDIT_TOOL : public PCB_TOOL_BASE
{ {
public: public:
EDIT_TOOL(); EDIT_TOOL();

View File

@ -81,7 +81,7 @@ TOOL_ACTION PCB_ACTIONS::enumeratePads( "pcbnew.ModuleEditor.enumeratePads",
MODULE_EDITOR_TOOLS::MODULE_EDITOR_TOOLS() : MODULE_EDITOR_TOOLS::MODULE_EDITOR_TOOLS() :
PCB_TOOL( "pcbnew.ModuleEditor" ) PCB_TOOL_BASE( "pcbnew.ModuleEditor" )
{ {
} }

View File

@ -25,7 +25,7 @@
#ifndef MODULE_EDITOR_TOOLS_H #ifndef MODULE_EDITOR_TOOLS_H
#define MODULE_EDITOR_TOOLS_H #define MODULE_EDITOR_TOOLS_H
#include <tools/pcb_tool.h> #include <tools/pcb_tool_base.h>
namespace KIGFX namespace KIGFX
{ {
@ -40,7 +40,7 @@ class PCB_EDIT_FRAME;
* *
* Module editor specific tools. * Module editor specific tools.
*/ */
class MODULE_EDITOR_TOOLS : public PCB_TOOL class MODULE_EDITOR_TOOLS : public PCB_TOOL_BASE
{ {
public: public:
MODULE_EDITOR_TOOLS(); MODULE_EDITOR_TOOLS();

View File

@ -91,7 +91,7 @@ TOOL_ACTION PCB_ACTIONS::microwaveCreateLine(
MICROWAVE_TOOL::MICROWAVE_TOOL() : MICROWAVE_TOOL::MICROWAVE_TOOL() :
PCB_TOOL( "pcbnew.MicrowaveTool" ) PCB_TOOL_BASE( "pcbnew.MicrowaveTool" )
{ {
} }

View File

@ -24,7 +24,7 @@
#ifndef TOOLS_MICROWAVE_TOOL_H #ifndef TOOLS_MICROWAVE_TOOL_H
#define TOOLS_MICROWAVE_TOOL_H #define TOOLS_MICROWAVE_TOOL_H
#include <tools/pcb_tool.h> #include <tools/pcb_tool_base.h>
#include <tool/tool_menu.h> #include <tool/tool_menu.h>
@ -34,7 +34,7 @@
* *
* Tool responsible for adding microwave features to PCBs * Tool responsible for adding microwave features to PCBs
*/ */
class MICROWAVE_TOOL : public PCB_TOOL class MICROWAVE_TOOL : public PCB_TOOL_BASE
{ {
public: public:
MICROWAVE_TOOL(); MICROWAVE_TOOL();

View File

@ -142,7 +142,7 @@ private:
PAD_TOOL::PAD_TOOL() : PAD_TOOL::PAD_TOOL() :
PCB_TOOL( "pcbnew.PadTool" ), PCB_TOOL_BASE( "pcbnew.PadTool" ),
m_padCopied( false ) m_padCopied( false )
{} {}

View File

@ -25,7 +25,7 @@
#define __PAD_TOOL_H #define __PAD_TOOL_H
#include <tools/pcb_tool.h> #include <tools/pcb_tool_base.h>
class CONTEXT_MENU; class CONTEXT_MENU;
@ -34,7 +34,7 @@ class CONTEXT_MENU;
* *
* Tools relating to pads and pad settings * Tools relating to pads and pad settings
*/ */
class PAD_TOOL : public PCB_TOOL class PAD_TOOL : public PCB_TOOL_BASE
{ {
public: public:
PAD_TOOL(); PAD_TOOL();

View File

@ -234,7 +234,7 @@ public:
PCB_EDITOR_CONTROL::PCB_EDITOR_CONTROL() : PCB_EDITOR_CONTROL::PCB_EDITOR_CONTROL() :
PCB_TOOL( "pcbnew.EditorControl" ), PCB_TOOL_BASE( "pcbnew.EditorControl" ),
m_frame( nullptr ), m_frame( nullptr ),
m_menu( *this ) m_menu( *this )
{ {
@ -906,7 +906,7 @@ int PCB_EDITOR_CONTROL::DrillOrigin( const TOOL_EVENT& aEvent )
{ {
Activate(); Activate();
EE_PICKER_TOOL* picker = m_toolMgr->GetTool<EE_PICKER_TOOL>(); PICKER_TOOL* picker = m_toolMgr->GetTool<PICKER_TOOL>();
assert( picker ); assert( picker );
m_frame->SetToolID( ID_PCB_PLACE_OFFSET_COORD_BUTT, wxCURSOR_HAND, _( "Adjust zero" ) ); m_frame->SetToolID( ID_PCB_PLACE_OFFSET_COORD_BUTT, wxCURSOR_HAND, _( "Adjust zero" ) );
@ -1087,7 +1087,7 @@ int PCB_EDITOR_CONTROL::HighlightNetCursor( const TOOL_EVENT& aEvent )
Activate(); Activate();
EE_PICKER_TOOL* picker = m_toolMgr->GetTool<EE_PICKER_TOOL>(); PICKER_TOOL* picker = m_toolMgr->GetTool<PICKER_TOOL>();
assert( picker ); assert( picker );
m_frame->SetToolID( ID_PCB_HIGHLIGHT_BUTT, wxCURSOR_HAND, _( "Highlight net" ) ); m_frame->SetToolID( ID_PCB_HIGHLIGHT_BUTT, wxCURSOR_HAND, _( "Highlight net" ) );
@ -1153,7 +1153,7 @@ int PCB_EDITOR_CONTROL::ShowLocalRatsnest( const TOOL_EVENT& aEvent )
{ {
Activate(); Activate();
auto picker = m_toolMgr->GetTool<EE_PICKER_TOOL>(); auto picker = m_toolMgr->GetTool<PICKER_TOOL>();
auto board = getModel<BOARD>(); auto board = getModel<BOARD>();
wxASSERT( picker ); wxASSERT( picker );
wxASSERT( board ); wxASSERT( board );
@ -1164,7 +1164,7 @@ int PCB_EDITOR_CONTROL::ShowLocalRatsnest( const TOOL_EVENT& aEvent )
picker->SetFinalizeHandler( [ board ]( int aCondition ){ picker->SetFinalizeHandler( [ board ]( int aCondition ){
auto vis = board->IsElementVisible( LAYER_RATSNEST ); auto vis = board->IsElementVisible( LAYER_RATSNEST );
if( aCondition != EE_PICKER_TOOL::END_ACTIVATE ) if( aCondition != PICKER_TOOL::END_ACTIVATE )
{ {
for( auto mod : board->Modules() ) for( auto mod : board->Modules() )
for( auto pad : mod->Pads() ) for( auto pad : mod->Pads() )

View File

@ -25,7 +25,7 @@
#ifndef PCB_EDITOR_CONTROL_H #ifndef PCB_EDITOR_CONTROL_H
#define PCB_EDITOR_CONTROL_H #define PCB_EDITOR_CONTROL_H
#include <tools/pcb_tool.h> #include <tools/pcb_tool_base.h>
#include <tool/tool_menu.h> #include <tool/tool_menu.h>
namespace KIGFX { namespace KIGFX {
@ -39,7 +39,7 @@ class PCB_EDIT_FRAME;
* *
* Handles actions specific to the board editor in pcbnew. * Handles actions specific to the board editor in pcbnew.
*/ */
class PCB_EDITOR_CONTROL : public wxEvtHandler, public PCB_TOOL class PCB_EDITOR_CONTROL : public wxEvtHandler, public PCB_TOOL_BASE
{ {
public: public:
PCB_EDITOR_CONTROL(); PCB_EDITOR_CONTROL();

View File

@ -22,7 +22,7 @@
*/ */
#include "pcb_tool.h" #include "pcb_tool_base.h"
#include <view/view_controls.h> #include <view/view_controls.h>
#include <view/view.h> #include <view/view.h>
@ -36,9 +36,9 @@
#include "pcb_actions.h" #include "pcb_actions.h"
#include "tool_event_utils.h" #include "tool_event_utils.h"
void PCB_TOOL::doInteractiveItemPlacement( INTERACTIVE_PLACER_BASE* aPlacer, void PCB_TOOL_BASE::doInteractiveItemPlacement( INTERACTIVE_PLACER_BASE* aPlacer,
const wxString& aCommitMessage, const wxString& aCommitMessage,
int aOptions ) int aOptions )
{ {
using namespace std::placeholders; using namespace std::placeholders;
std::unique_ptr<BOARD_ITEM> newItem; std::unique_ptr<BOARD_ITEM> newItem;
@ -211,7 +211,7 @@ void PCB_TOOL::doInteractiveItemPlacement( INTERACTIVE_PLACER_BASE* aPlacer,
view()->Remove( &preview ); view()->Remove( &preview );
} }
bool PCB_TOOL::Init() bool PCB_TOOL_BASE::Init()
{ {
// A basic context manu. Many (but not all) tools will choose to override this. // A basic context manu. Many (but not all) tools will choose to override this.
@ -228,34 +228,34 @@ bool PCB_TOOL::Init()
} }
void PCB_TOOL::Reset( RESET_REASON aReason ) void PCB_TOOL_BASE::Reset( RESET_REASON aReason )
{ {
} }
void PCB_TOOL::setTransitions() void PCB_TOOL_BASE::setTransitions()
{ {
} }
PCB_DISPLAY_OPTIONS* PCB_TOOL::displayOptions() const PCB_DISPLAY_OPTIONS* PCB_TOOL_BASE::displayOptions() const
{ {
return static_cast<PCB_DISPLAY_OPTIONS*>( frame()->GetDisplayOptions() ); return static_cast<PCB_DISPLAY_OPTIONS*>( frame()->GetDisplayOptions() );
} }
PCB_DRAW_PANEL_GAL* PCB_TOOL::canvas() const PCB_DRAW_PANEL_GAL* PCB_TOOL_BASE::canvas() const
{ {
return static_cast<PCB_DRAW_PANEL_GAL*>( frame()->GetGalCanvas() ); return static_cast<PCB_DRAW_PANEL_GAL*>( frame()->GetGalCanvas() );
} }
const SELECTION& PCB_TOOL::selection() const const SELECTION& PCB_TOOL_BASE::selection() const
{ {
auto selTool = m_toolMgr->GetTool<SELECTION_TOOL>(); auto selTool = m_toolMgr->GetTool<SELECTION_TOOL>();
const auto& selection = selTool->GetSelection(); const auto& selection = selTool->GetSelection();
return selection; return selection;
} }
SELECTION& PCB_TOOL::selection() SELECTION& PCB_TOOL_BASE::selection()
{ {
auto selTool = m_toolMgr->GetTool<SELECTION_TOOL>(); auto selTool = m_toolMgr->GetTool<SELECTION_TOOL>();
auto& selection = selTool->GetSelection(); auto& selection = selTool->GetSelection();

View File

@ -22,8 +22,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
#ifndef __PCB_TOOL_H #ifndef PCB_TOOL_BASE_H
#define __PCB_TOOL_H #define PCB_TOOL_BASE_H
#include <string> #include <string>
@ -39,12 +39,12 @@
#include <tool/tool_menu.h> #include <tool/tool_menu.h>
/** /**
* Class PCB_TOOL * Class PCB_TOOL_BASE
* *
* A tool operating on a BOARD object * A tool operating on a BOARD object
**/ **/
class PCB_TOOL; class PCB_TOOL_BASE;
class PCB_EDIT_FRAME; class PCB_EDIT_FRAME;
class PCB_DISPLAY_OPTIONS; class PCB_DISPLAY_OPTIONS;
class SELECTION; class SELECTION;
@ -61,14 +61,14 @@ struct INTERACTIVE_PLACER_BASE
}; };
class PCB_TOOL : public TOOL_INTERACTIVE class PCB_TOOL_BASE : public TOOL_INTERACTIVE
{ {
public: public:
/** /**
* Constructor * Constructor
* *
* Creates a tool with given id & name. The name must be unique. */ * Creates a tool with given id & name. The name must be unique. */
PCB_TOOL( TOOL_ID aId, const std::string& aName ) : PCB_TOOL_BASE( TOOL_ID aId, const std::string& aName ) :
TOOL_INTERACTIVE ( aId, aName ), TOOL_INTERACTIVE ( aId, aName ),
m_menu( *this ), m_menu( *this ),
m_editModules( false ) {}; m_editModules( false ) {};
@ -77,12 +77,12 @@ public:
* Constructor * Constructor
* *
* Creates a tool with given name. The name must be unique. */ * Creates a tool with given name. The name must be unique. */
PCB_TOOL( const std::string& aName ) : PCB_TOOL_BASE( const std::string& aName ) :
TOOL_INTERACTIVE ( aName ), TOOL_INTERACTIVE ( aName ),
m_menu( *this ), m_menu( *this ),
m_editModules( false ) {}; m_editModules( false ) {};
virtual ~PCB_TOOL() {}; virtual ~PCB_TOOL_BASE() {};
virtual bool Init() override; virtual bool Init() override;
virtual void Reset( RESET_REASON aReason ) override; virtual void Reset( RESET_REASON aReason ) override;

View File

@ -214,7 +214,7 @@ TOOL_ACTION PCB_ACTIONS::pasteFromClipboard( "pcbnew.InteractiveEdit.pasteFromCl
PCBNEW_CONTROL::PCBNEW_CONTROL() : PCBNEW_CONTROL::PCBNEW_CONTROL() :
PCB_TOOL( "pcbnew.Control" ), m_frame( NULL ) PCB_TOOL_BASE( "pcbnew.Control" ), m_frame( NULL )
{ {
m_gridOrigin.reset( new KIGFX::ORIGIN_VIEWITEM() ); m_gridOrigin.reset( new KIGFX::ORIGIN_VIEWITEM() );
} }
@ -604,7 +604,7 @@ int PCBNEW_CONTROL::GridSetOrigin( const TOOL_EVENT& aEvent )
{ {
Activate(); Activate();
EE_PICKER_TOOL* picker = m_toolMgr->GetTool<EE_PICKER_TOOL>(); PICKER_TOOL* picker = m_toolMgr->GetTool<PICKER_TOOL>();
wxCHECK( picker, 0 ); wxCHECK( picker, 0 );
// TODO it will not check the toolbar button in module editor, as it uses a different ID.. // TODO it will not check the toolbar button in module editor, as it uses a different ID..
@ -693,7 +693,7 @@ int PCBNEW_CONTROL::DeleteItemCursor( const TOOL_EVENT& aEvent )
{ {
Activate(); Activate();
EE_PICKER_TOOL* picker = m_toolMgr->GetTool<EE_PICKER_TOOL>(); PICKER_TOOL* picker = m_toolMgr->GetTool<PICKER_TOOL>();
wxCHECK( picker, 0 ); wxCHECK( picker, 0 );
m_frame->SetToolID( m_editModules ? ID_MODEDIT_DELETE_TOOL : ID_PCB_DELETE_ITEM_BUTT, m_frame->SetToolID( m_editModules ? ID_MODEDIT_DELETE_TOOL : ID_PCB_DELETE_ITEM_BUTT,

View File

@ -27,7 +27,7 @@
#include <io_mgr.h> #include <io_mgr.h>
#include <memory> #include <memory>
#include <tools/pcb_tool.h> #include <tools/pcb_tool_base.h>
namespace KIGFX { namespace KIGFX {
class ORIGIN_VIEWITEM; class ORIGIN_VIEWITEM;
@ -41,7 +41,7 @@ class BOARD_ITEM;
* Handles actions that are shared between different frames in pcbnew. * Handles actions that are shared between different frames in pcbnew.
*/ */
class PCBNEW_CONTROL : public PCB_TOOL class PCBNEW_CONTROL : public PCB_TOOL_BASE
{ {
public: public:
PCBNEW_CONTROL(); PCBNEW_CONTROL();

View File

@ -33,14 +33,14 @@
TOOL_ACTION PCB_ACTIONS::pickerTool( "pcbnew.Picker", AS_GLOBAL, 0, "", "", NULL, AF_ACTIVATE ); TOOL_ACTION PCB_ACTIONS::pickerTool( "pcbnew.Picker", AS_GLOBAL, 0, "", "", NULL, AF_ACTIVATE );
EE_PICKER_TOOL::EE_PICKER_TOOL() PICKER_TOOL::PICKER_TOOL()
: PCB_TOOL( "pcbnew.Picker" ) : PCB_TOOL_BASE( "pcbnew.Picker" )
{ {
reset(); reset();
} }
int EE_PICKER_TOOL::Main( const TOOL_EVENT& aEvent ) int PICKER_TOOL::Main( const TOOL_EVENT& aEvent )
{ {
KIGFX::VIEW_CONTROLS* controls = getViewControls(); KIGFX::VIEW_CONTROLS* controls = getViewControls();
GRID_HELPER grid( frame() ); GRID_HELPER grid( frame() );
@ -70,7 +70,7 @@ int EE_PICKER_TOOL::Main( const TOOL_EVENT& aEvent )
} }
catch( std::exception& e ) catch( std::exception& e )
{ {
std::cerr << "EE_PICKER_TOOL click handler error: " << e.what() << std::endl; std::cerr << "PICKER_TOOL click handler error: " << e.what() << std::endl;
finalize_state = EXCEPTION_CANCEL; finalize_state = EXCEPTION_CANCEL;
break; break;
} }
@ -95,7 +95,7 @@ int EE_PICKER_TOOL::Main( const TOOL_EVENT& aEvent )
} }
catch( std::exception& e ) catch( std::exception& e )
{ {
std::cerr << "EE_PICKER_TOOL cancel handler error: " << e.what() << std::endl; std::cerr << "PICKER_TOOL cancel handler error: " << e.what() << std::endl;
} }
} }
@ -123,7 +123,7 @@ int EE_PICKER_TOOL::Main( const TOOL_EVENT& aEvent )
} }
catch( std::exception& e ) catch( std::exception& e )
{ {
std::cerr << "EE_PICKER_TOOL finalize handler error: " << e.what() << std::endl; std::cerr << "PICKER_TOOL finalize handler error: " << e.what() << std::endl;
} }
} }
@ -135,13 +135,13 @@ int EE_PICKER_TOOL::Main( const TOOL_EVENT& aEvent )
} }
void EE_PICKER_TOOL::setTransitions() void PICKER_TOOL::setTransitions()
{ {
Go( &EE_PICKER_TOOL::Main, PCB_ACTIONS::pickerTool.MakeEvent() ); Go( &PICKER_TOOL::Main, PCB_ACTIONS::pickerTool.MakeEvent() );
} }
void EE_PICKER_TOOL::reset() void PICKER_TOOL::reset()
{ {
m_cursorCapture = false; m_cursorCapture = false;
m_autoPanning = false; m_autoPanning = false;
@ -154,7 +154,7 @@ void EE_PICKER_TOOL::reset()
} }
void EE_PICKER_TOOL::setControls() void PICKER_TOOL::setControls()
{ {
KIGFX::VIEW_CONTROLS* controls = getViewControls(); KIGFX::VIEW_CONTROLS* controls = getViewControls();

View File

@ -26,16 +26,16 @@
#define PICKER_TOOL_H #define PICKER_TOOL_H
#include <boost/optional/optional.hpp> #include <boost/optional/optional.hpp>
#include <tools/pcb_tool_base.h>
#include "pcb_tool.h"
/** /**
* @brief Generic tool for picking a point. * @brief Generic tool for picking a point.
*/ */
class EE_PICKER_TOOL : public PCB_TOOL class PICKER_TOOL : public PCB_TOOL_BASE
{ {
public: public:
EE_PICKER_TOOL(); PICKER_TOOL();
~EE_PICKER_TOOL() {} ~PICKER_TOOL() {}
///> Event handler types. ///> Event handler types.
typedef std::function<bool(const VECTOR2D&)> CLICK_HANDLER; typedef std::function<bool(const VECTOR2D&)> CLICK_HANDLER;

View File

@ -239,7 +239,7 @@ private:
EE_POINT_EDITOR::EE_POINT_EDITOR() : EE_POINT_EDITOR::EE_POINT_EDITOR() :
PCB_TOOL( "pcbnew.PointEditor" ), PCB_TOOL_BASE( "pcbnew.PointEditor" ),
m_selectionTool( NULL ), m_selectionTool( NULL ),
m_editedPoint( NULL ), m_editedPoint( NULL ),
m_original( VECTOR2I( 0, 0 ) ), m_original( VECTOR2I( 0, 0 ) ),

View File

@ -40,7 +40,7 @@ class SHAPE_POLY_SET;
* *
* Tool that displays edit points allowing to modify items by dragging the points. * Tool that displays edit points allowing to modify items by dragging the points.
*/ */
class EE_POINT_EDITOR : public PCB_TOOL class EE_POINT_EDITOR : public PCB_TOOL_BASE
{ {
public: public:
EE_POINT_EDITOR(); EE_POINT_EDITOR();

View File

@ -53,7 +53,7 @@ TOOL_ACTION PCB_ACTIONS::selectpositionRelativeItem(
POSITION_RELATIVE_TOOL::POSITION_RELATIVE_TOOL() : POSITION_RELATIVE_TOOL::POSITION_RELATIVE_TOOL() :
PCB_TOOL( "pcbnew.PositionRelative" ), PCB_TOOL_BASE( "pcbnew.PositionRelative" ),
m_dialog( NULL ), m_dialog( NULL ),
m_selectionTool( NULL ), m_selectionTool( NULL ),
m_anchor_item( NULL ) m_anchor_item( NULL )
@ -140,7 +140,7 @@ int POSITION_RELATIVE_TOOL::SelectPositionRelativeItem( const TOOL_EVENT& aEvent
{ {
Activate(); Activate();
EE_PICKER_TOOL* picker = m_toolMgr->GetTool<EE_PICKER_TOOL>(); PICKER_TOOL* picker = m_toolMgr->GetTool<PICKER_TOOL>();
STATUS_TEXT_POPUP statusPopup( frame() ); STATUS_TEXT_POPUP statusPopup( frame() );
bool picking = true; bool picking = true;

View File

@ -25,7 +25,7 @@
#define __POSITION_RELATIVE_TOOL_H #define __POSITION_RELATIVE_TOOL_H
#include <math/vector2d.h> #include <math/vector2d.h>
#include <tools/pcb_tool.h> #include <tools/pcb_tool_base.h>
#include "selection_tool.h" #include "selection_tool.h"
#include "dialogs/dialog_position_relative.h" #include "dialogs/dialog_position_relative.h"
#include "dialogs/dialog_position_relative_base.h" #include "dialogs/dialog_position_relative_base.h"
@ -42,7 +42,7 @@ class DIALOG_POSITION_RELATIVE;
* using the pcbnew.InteractiveSelection tool. * using the pcbnew.InteractiveSelection tool.
*/ */
class POSITION_RELATIVE_TOOL : public PCB_TOOL class POSITION_RELATIVE_TOOL : public PCB_TOOL_BASE
{ {
public: public:
POSITION_RELATIVE_TOOL(); POSITION_RELATIVE_TOOL();

View File

@ -193,7 +193,7 @@ public:
SELECTION_TOOL::SELECTION_TOOL() : SELECTION_TOOL::SELECTION_TOOL() :
PCB_TOOL( "pcbnew.InteractiveSelection" ), PCB_TOOL_BASE( "pcbnew.InteractiveSelection" ),
m_frame( NULL ), m_frame( NULL ),
m_additive( false ), m_additive( false ),
m_subtractive( false ), m_subtractive( false ),

View File

@ -30,7 +30,7 @@
#include <memory> #include <memory>
#include <math/vector2d.h> #include <math/vector2d.h>
#include <tools/pcb_tool.h> #include <tools/pcb_tool_base.h>
#include <tool/context_menu.h> #include <tool/context_menu.h>
#include <tool/selection.h> #include <tool/selection.h>
@ -61,7 +61,7 @@ typedef void (*CLIENT_SELECTION_FILTER)( const VECTOR2I&, GENERAL_COLLECTOR& );
* - takes into account high-contrast & layer visibility settings * - takes into account high-contrast & layer visibility settings
* - invokes InteractiveEdit tool when user starts to drag selected items * - invokes InteractiveEdit tool when user starts to drag selected items
*/ */
class SELECTION_TOOL : public PCB_TOOL class SELECTION_TOOL : public PCB_TOOL_BASE
{ {
public: public:
SELECTION_TOOL(); SELECTION_TOOL();

View File

@ -59,7 +59,7 @@ TOOL_ACTION PCB_ACTIONS::zoneUnfillAll( "pcbnew.ZoneFiller.zoneUnfillAll",
_( "Unfill All" ), _( "Unfill all zones" ) ); _( "Unfill All" ), _( "Unfill all zones" ) );
ZONE_FILLER_TOOL::ZONE_FILLER_TOOL() : ZONE_FILLER_TOOL::ZONE_FILLER_TOOL() :
PCB_TOOL( "pcbnew.ZoneFiller" ) PCB_TOOL_BASE( "pcbnew.ZoneFiller" )
{ {
} }

View File

@ -25,7 +25,7 @@
#ifndef ZONE_FILLER_TOOL_H #ifndef ZONE_FILLER_TOOL_H
#define ZONE_FILLER_TOOL_H #define ZONE_FILLER_TOOL_H
#include <tools/pcb_tool.h> #include <tools/pcb_tool_base.h>
class PCB_EDIT_FRAME; class PCB_EDIT_FRAME;
@ -35,7 +35,7 @@ class PCB_EDIT_FRAME;
* *
* Handles actions specific to filling copper zones. * Handles actions specific to filling copper zones.
*/ */
class ZONE_FILLER_TOOL : public PCB_TOOL class ZONE_FILLER_TOOL : public PCB_TOOL_BASE
{ {
public: public:
ZONE_FILLER_TOOL(); ZONE_FILLER_TOOL();

View File

@ -38,7 +38,7 @@ add_executable(test_gal_pixel_alignment WIN32
../../qa_utils/pcb_test_frame.cpp ../../qa_utils/pcb_test_frame.cpp
../../qa_utils/mocks.cpp ../../qa_utils/mocks.cpp
../../../common/base_units.cpp ../../../common/base_units.cpp
../../../pcbnew/tools/pcb_tool.cpp ../../../pcbnew/tools/pcb_tool_base.cpp
../../../pcbnew/tools/selection.cpp ../../../pcbnew/tools/selection.cpp
../../../pcbnew/tools/selection_tool.cpp ../../../pcbnew/tools/selection_tool.cpp
../../../pcbnew/tools/tool_event_utils.cpp ../../../pcbnew/tools/tool_event_utils.cpp

View File

@ -38,7 +38,7 @@ add_executable(test_window WIN32
../qa_utils/pcb_test_frame.cpp ../qa_utils/pcb_test_frame.cpp
../qa_utils/mocks.cpp ../qa_utils/mocks.cpp
../../common/base_units.cpp ../../common/base_units.cpp
../../pcbnew/tools/pcb_tool.cpp ../../pcbnew/tools/pcb_tool_base.cpp
../../pcbnew/tools/selection.cpp ../../pcbnew/tools/selection.cpp
../../pcbnew/tools/selection_tool.cpp ../../pcbnew/tools/selection_tool.cpp
../../pcbnew/tools/tool_event_utils.cpp ../../pcbnew/tools/tool_event_utils.cpp

View File

@ -65,7 +65,7 @@
#include <tools/pcb_actions.h> #include <tools/pcb_actions.h>
#include <router/router_tool.h> #include <router/router_tool.h>
#include "pcb_tool.h" #include "pcb_tool_base.h"
#include <dialog_find.h> #include <dialog_find.h>
#include <dialog_block_options.h> #include <dialog_block_options.h>

View File

@ -54,7 +54,7 @@
#include <tool/actions.h> #include <tool/actions.h>
#include <tool/tool_manager.h> #include <tool/tool_manager.h>
#include <tool/tool_dispatcher.h> #include <tool/tool_dispatcher.h>
#include <tools/pcb_tool.h> #include <tools/pcb_tool_base.h>
#include <tools/pcb_actions.h> #include <tools/pcb_actions.h>
#include <tools/selection_tool.h> #include <tools/selection_tool.h>
#include <kicad_plugin.h> #include <kicad_plugin.h>