Moved SELECTION out of SELECTION_TOOL class.

This commit is contained in:
Maciej Suminski 2014-07-09 15:10:32 +02:00
parent d21271b432
commit bfa15d8db0
7 changed files with 55 additions and 56 deletions

View File

@ -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<PCB_BASE_EDIT_FRAME>();
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<PCB_BASE_EDIT_FRAME>();
// 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<PCB_BASE_FRAME>();
// 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<BOARD>()->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 );

View File

@ -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 );

View File

@ -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<SELECTION_TOOL>()->GetSelection();
const SELECTION& selection = m_toolMgr->GetTool<SELECTION_TOOL>()->GetSelection();
Activate();

View File

@ -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 )
{

View File

@ -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 )
{

View File

@ -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();

View File

@ -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 <typename T>
T* Item( unsigned int aIndex ) const
{
return static_cast<T*>( 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 <typename T>
T* Item( unsigned int aIndex ) const
{
return static_cast<T*>( 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 );