diff --git a/pcbnew/tools/edit_tool.cpp b/pcbnew/tools/edit_tool.cpp index 5bea4c9829..72cb824dd0 100644 --- a/pcbnew/tools/edit_tool.cpp +++ b/pcbnew/tools/edit_tool.cpp @@ -73,7 +73,7 @@ bool EDIT_TOOL::Init() int EDIT_TOOL::Main( TOOL_EVENT& aEvent ) { - const SELECTION_TOOL::SELECTION& selection = m_selectionTool->GetSelection(); + const SELECTION& selection = m_selectionTool->GetSelection(); // Shall the selection be cleared at the end? bool unselect = selection.Empty(); @@ -218,7 +218,7 @@ int EDIT_TOOL::Main( TOOL_EVENT& aEvent ) int EDIT_TOOL::Properties( TOOL_EVENT& aEvent ) { - const SELECTION_TOOL::SELECTION& selection = m_selectionTool->GetSelection(); + const SELECTION& selection = m_selectionTool->GetSelection(); PCB_BASE_EDIT_FRAME* editFrame = getEditFrame(); if( !makeSelection( selection ) ) @@ -287,7 +287,7 @@ int EDIT_TOOL::Properties( TOOL_EVENT& aEvent ) int EDIT_TOOL::Rotate( TOOL_EVENT& aEvent ) { - const SELECTION_TOOL::SELECTION& selection = m_selectionTool->GetSelection(); + const SELECTION& selection = m_selectionTool->GetSelection(); PCB_BASE_EDIT_FRAME* editFrame = getEditFrame(); // Shall the selection be cleared at the end? @@ -341,7 +341,7 @@ int EDIT_TOOL::Rotate( TOOL_EVENT& aEvent ) int EDIT_TOOL::Flip( TOOL_EVENT& aEvent ) { - const SELECTION_TOOL::SELECTION& selection = m_selectionTool->GetSelection(); + const SELECTION& selection = m_selectionTool->GetSelection(); PCB_BASE_FRAME* editFrame = getEditFrame(); // Shall the selection be cleared at the end? @@ -395,7 +395,7 @@ int EDIT_TOOL::Flip( TOOL_EVENT& aEvent ) int EDIT_TOOL::Remove( TOOL_EVENT& aEvent ) { - const SELECTION_TOOL::SELECTION& selection = m_selectionTool->GetSelection(); + const SELECTION& selection = m_selectionTool->GetSelection(); if( !makeSelection( selection ) ) { @@ -522,7 +522,7 @@ void EDIT_TOOL::setTransitions() void EDIT_TOOL::updateRatsnest( bool aRedraw ) { - const SELECTION_TOOL::SELECTION& selection = m_selectionTool->GetSelection(); + const SELECTION& selection = m_selectionTool->GetSelection(); RN_DATA* ratsnest = getModel()->GetRatsnest(); ratsnest->ClearSimple(); @@ -538,7 +538,7 @@ void EDIT_TOOL::updateRatsnest( bool aRedraw ) } -wxPoint EDIT_TOOL::getModificationPoint( const SELECTION_TOOL::SELECTION& aSelection ) +wxPoint EDIT_TOOL::getModificationPoint( const SELECTION& aSelection ) { if( aSelection.Size() == 1 ) { @@ -556,7 +556,7 @@ wxPoint EDIT_TOOL::getModificationPoint( const SELECTION_TOOL::SELECTION& aSelec } -bool EDIT_TOOL::makeSelection( const SELECTION_TOOL::SELECTION& aSelection ) +bool EDIT_TOOL::makeSelection( const SELECTION& aSelection ) { if( aSelection.Empty() ) // Try to find an item that could be modified m_toolMgr->RunAction( COMMON_ACTIONS::selectionSingle ); diff --git a/pcbnew/tools/edit_tool.h b/pcbnew/tools/edit_tool.h index 5e9d93a7c2..76b161ae01 100644 --- a/pcbnew/tools/edit_tool.h +++ b/pcbnew/tools/edit_tool.h @@ -143,11 +143,11 @@ private: ///> Returns the right modification point (e.g. for rotation), depending on the number of ///> selected items. - wxPoint getModificationPoint( const SELECTION_TOOL::SELECTION& aSelection ); + wxPoint getModificationPoint( const SELECTION& aSelection ); ///> If there are no items currently selected, it tries to choose the item that is under ///> the cursor or displays a disambiguation menu if there are multpile items. - bool makeSelection( const SELECTION_TOOL::SELECTION& aSelection ); + bool makeSelection( const SELECTION& aSelection ); ///> Updates view with the changes in the list. void processChanges( const PICKED_ITEMS_LIST* aList ); diff --git a/pcbnew/tools/module_tools.cpp b/pcbnew/tools/module_tools.cpp index d3e5b85cf3..a23dec3be3 100644 --- a/pcbnew/tools/module_tools.cpp +++ b/pcbnew/tools/module_tools.cpp @@ -329,7 +329,7 @@ int MODULE_TOOLS::EnumeratePads( TOOL_EVENT& aEvent ) int MODULE_TOOLS::CopyItems( TOOL_EVENT& aEvent ) { - const SELECTION_TOOL::SELECTION& selection = m_toolMgr->GetTool()->GetSelection(); + const SELECTION& selection = m_toolMgr->GetTool()->GetSelection(); Activate(); diff --git a/pcbnew/tools/placement_tool.cpp b/pcbnew/tools/placement_tool.cpp index 4956c51c45..d436862394 100644 --- a/pcbnew/tools/placement_tool.cpp +++ b/pcbnew/tools/placement_tool.cpp @@ -73,7 +73,7 @@ bool PLACEMENT_TOOL::Init() int PLACEMENT_TOOL::AlignTop( TOOL_EVENT& aEvent ) { - const SELECTION_TOOL::SELECTION& selection = m_selectionTool->GetSelection(); + const SELECTION& selection = m_selectionTool->GetSelection(); if( selection.Size() > 1 ) { @@ -116,7 +116,7 @@ int PLACEMENT_TOOL::AlignTop( TOOL_EVENT& aEvent ) int PLACEMENT_TOOL::AlignBottom( TOOL_EVENT& aEvent ) { - const SELECTION_TOOL::SELECTION& selection = m_selectionTool->GetSelection(); + const SELECTION& selection = m_selectionTool->GetSelection(); if( selection.Size() > 1 ) { @@ -159,7 +159,7 @@ int PLACEMENT_TOOL::AlignBottom( TOOL_EVENT& aEvent ) int PLACEMENT_TOOL::AlignLeft( TOOL_EVENT& aEvent ) { - const SELECTION_TOOL::SELECTION& selection = m_selectionTool->GetSelection(); + const SELECTION& selection = m_selectionTool->GetSelection(); if( selection.Size() > 1 ) { @@ -202,7 +202,7 @@ int PLACEMENT_TOOL::AlignLeft( TOOL_EVENT& aEvent ) int PLACEMENT_TOOL::AlignRight( TOOL_EVENT& aEvent ) { - const SELECTION_TOOL::SELECTION& selection = m_selectionTool->GetSelection(); + const SELECTION& selection = m_selectionTool->GetSelection(); if( selection.Size() > 1 ) { @@ -257,7 +257,7 @@ static bool compareY( const BOARD_ITEM* aA, const BOARD_ITEM* aB ) int PLACEMENT_TOOL::DistributeHorizontally( TOOL_EVENT& aEvent ) { - const SELECTION_TOOL::SELECTION& selection = m_selectionTool->GetSelection(); + const SELECTION& selection = m_selectionTool->GetSelection(); if( selection.Size() > 1 ) { @@ -306,7 +306,7 @@ int PLACEMENT_TOOL::DistributeHorizontally( TOOL_EVENT& aEvent ) int PLACEMENT_TOOL::DistributeVertically( TOOL_EVENT& aEvent ) { - const SELECTION_TOOL::SELECTION& selection = m_selectionTool->GetSelection(); + const SELECTION& selection = m_selectionTool->GetSelection(); if( selection.Size() > 1 ) { diff --git a/pcbnew/tools/point_editor.cpp b/pcbnew/tools/point_editor.cpp index 14e66424e3..3df09c4ce0 100644 --- a/pcbnew/tools/point_editor.cpp +++ b/pcbnew/tools/point_editor.cpp @@ -203,7 +203,7 @@ bool POINT_EDITOR::Init() int POINT_EDITOR::OnSelectionChange( TOOL_EVENT& aEvent ) { - const SELECTION_TOOL::SELECTION& selection = m_selectionTool->GetSelection(); + const SELECTION& selection = m_selectionTool->GetSelection(); if( selection.Size() == 1 ) { @@ -666,7 +666,7 @@ EDIT_POINT POINT_EDITOR::get45DegConstrainer() const void POINT_EDITOR::breakOutline( const VECTOR2I& aBreakPoint ) { EDA_ITEM* item = m_editPoints->GetParent(); - const SELECTION_TOOL::SELECTION& selection = m_selectionTool->GetSelection(); + const SELECTION& selection = m_selectionTool->GetSelection(); if( item->Type() == PCB_ZONE_AREA_T ) { diff --git a/pcbnew/tools/selection_tool.cpp b/pcbnew/tools/selection_tool.cpp index 511564c216..2fa5508685 100644 --- a/pcbnew/tools/selection_tool.cpp +++ b/pcbnew/tools/selection_tool.cpp @@ -764,7 +764,7 @@ BOARD_ITEM* SELECTION_TOOL::prefer( GENERAL_COLLECTOR& aCollector, const KICAD_T } -void SELECTION_TOOL::SELECTION::clear() +void SELECTION::clear() { items.ClearItemsList(); group->Clear(); diff --git a/pcbnew/tools/selection_tool.h b/pcbnew/tools/selection_tool.h index 4891610d16..55108221a3 100644 --- a/pcbnew/tools/selection_tool.h +++ b/pcbnew/tools/selection_tool.h @@ -41,6 +41,41 @@ namespace KIGFX class VIEW_GROUP; } +struct SELECTION +{ + /// Set of selected items + PICKED_ITEMS_LIST items; + + /// VIEW_GROUP that holds currently selected items + KIGFX::VIEW_GROUP* group; + + /// Checks if there is anything selected + bool Empty() const + { + return ( items.GetCount() == 0 ); + } + + /// Returns the number of selected parts + int Size() const + { + return items.GetCount(); + } + + /// Alias to make code shorter and clearer + template + T* Item( unsigned int aIndex ) const + { + return static_cast( items.GetPickedItem( aIndex ) ); + } + +private: + /// Clears both the VIEW_GROUP and set of selected items. Please note that it does not + /// change properties of selected items (e.g. selection flag). + void clear(); + + friend class SELECTION_TOOL; +}; + /** * Class SELECTION_TOOL * @@ -52,48 +87,12 @@ class VIEW_GROUP; * - takes into account high-contrast & layer visibility settings * - invokes InteractiveEdit tool when user starts to drag selected items */ - class SELECTION_TOOL : public TOOL_INTERACTIVE { public: SELECTION_TOOL(); ~SELECTION_TOOL(); - struct SELECTION - { - /// Set of selected items - PICKED_ITEMS_LIST items; - - /// VIEW_GROUP that holds currently selected items - KIGFX::VIEW_GROUP* group; - - /// Checks if there is anything selected - bool Empty() const - { - return ( items.GetCount() == 0 ); - } - - /// Returns the number of selected parts - int Size() const - { - return items.GetCount(); - } - - /// Alias to make code shorter and clearer - template - T* Item( unsigned int aIndex ) const - { - return static_cast( items.GetPickedItem( aIndex ) ); - } - - private: - /// Clears both the VIEW_GROUP and set of selected items. Please note that it does not - /// change properties of selected items (e.g. selection flag). - void clear(); - - friend class SELECTION_TOOL; - }; - /// @copydoc TOOL_INTERACTIVE::Reset() void Reset( RESET_REASON aReason );