Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
5d1ec2b2
Commit
5d1ec2b2
authored
Jul 09, 2014
by
Maciej Suminski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Restored invocation of SELECTION_TOOL commands with TOOL_ACTIONs.
parent
5703b7e8
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
171 additions
and
121 deletions
+171
-121
router_tool.cpp
pcbnew/router/router_tool.cpp
+1
-2
common_actions.cpp
pcbnew/tools/common_actions.cpp
+7
-2
common_actions.h
pcbnew/tools/common_actions.h
+6
-0
drawing_tool.cpp
pcbnew/tools/drawing_tool.cpp
+8
-9
edit_tool.cpp
pcbnew/tools/edit_tool.cpp
+7
-7
selection_tool.cpp
pcbnew/tools/selection_tool.cpp
+114
-82
selection_tool.h
pcbnew/tools/selection_tool.h
+28
-19
No files found.
pcbnew/router/router_tool.cpp
View file @
5d1ec2b2
...
@@ -40,7 +40,6 @@
...
@@ -40,7 +40,6 @@
#include <tool/context_menu.h>
#include <tool/context_menu.h>
#include <tools/common_actions.h>
#include <tools/common_actions.h>
#include <tools/selection_tool.h>
#include <ratsnest_data.h>
#include <ratsnest_data.h>
...
@@ -637,7 +636,7 @@ int ROUTER_TOOL::Main( TOOL_EVENT& aEvent )
...
@@ -637,7 +636,7 @@ int ROUTER_TOOL::Main( TOOL_EVENT& aEvent )
BOARD_DESIGN_SETTINGS
&
bds
=
board
->
GetDesignSettings
();
BOARD_DESIGN_SETTINGS
&
bds
=
board
->
GetDesignSettings
();
// Deselect all items
// Deselect all items
m_toolMgr
->
GetTool
<
SELECTION_TOOL
>
()
->
ClearSelection
(
);
m_toolMgr
->
RunAction
(
COMMON_ACTIONS
::
selectionClear
);
getEditFrame
<
PCB_EDIT_FRAME
>
()
->
SetToolID
(
ID_TRACK_BUTT
,
wxCURSOR_PENCIL
,
getEditFrame
<
PCB_EDIT_FRAME
>
()
->
SetToolID
(
ID_TRACK_BUTT
,
wxCURSOR_PENCIL
,
_
(
"Interactive Router"
)
);
_
(
"Interactive Router"
)
);
...
...
pcbnew/tools/common_actions.cpp
View file @
5d1ec2b2
...
@@ -31,17 +31,22 @@
...
@@ -31,17 +31,22 @@
TOOL_ACTION
COMMON_ACTIONS
::
selectionActivate
(
"pcbnew.InteractiveSelection"
,
TOOL_ACTION
COMMON_ACTIONS
::
selectionActivate
(
"pcbnew.InteractiveSelection"
,
AS_GLOBAL
,
0
,
""
,
""
);
// No description, it is not supposed to be shown anywhere
AS_GLOBAL
,
0
,
""
,
""
);
// No description, it is not supposed to be shown anywhere
TOOL_ACTION
COMMON_ACTIONS
::
selectionSingle
(
"pcbnew.InteractiveSelection.Single"
,
AS_GLOBAL
,
0
,
""
,
""
);
// No description, it is not supposed to be shown anywhere
TOOL_ACTION
COMMON_ACTIONS
::
selectionClear
(
"pcbnew.InteractiveSelection.Clear"
,
AS_GLOBAL
,
0
,
""
,
""
);
// No description, it is not supposed to be shown anywhere
// Edit tool actions
// Edit tool actions
TOOL_ACTION
COMMON_ACTIONS
::
editActivate
(
"pcbnew.InteractiveEdit"
,
TOOL_ACTION
COMMON_ACTIONS
::
editActivate
(
"pcbnew.InteractiveEdit"
,
AS_GLOBAL
,
'M'
,
AS_GLOBAL
,
'M'
,
"Move"
,
"Moves the selected item(s)"
);
"Move"
,
"Moves the selected item(s)"
);
TOOL_ACTION
COMMON_ACTIONS
::
rotate
(
"pcbnew.rotate"
,
TOOL_ACTION
COMMON_ACTIONS
::
rotate
(
"pcbnew.
InteractiveEdit.
rotate"
,
AS_GLOBAL
,
'R'
,
AS_GLOBAL
,
'R'
,
"Rotate"
,
"Rotates selected item(s)"
);
"Rotate"
,
"Rotates selected item(s)"
);
TOOL_ACTION
COMMON_ACTIONS
::
flip
(
"pcbnew.flip"
,
TOOL_ACTION
COMMON_ACTIONS
::
flip
(
"pcbnew.
InteractiveEdit.
flip"
,
AS_GLOBAL
,
'F'
,
AS_GLOBAL
,
'F'
,
"Flip"
,
"Flips selected item(s)"
);
"Flip"
,
"Flips selected item(s)"
);
...
...
pcbnew/tools/common_actions.h
View file @
5d1ec2b2
...
@@ -37,6 +37,12 @@ public:
...
@@ -37,6 +37,12 @@ public:
/// Activation of the selection tool
/// Activation of the selection tool
static
TOOL_ACTION
selectionActivate
;
static
TOOL_ACTION
selectionActivate
;
/// Select a single item under the cursor position
static
TOOL_ACTION
selectionSingle
;
/// Clears the current selection
static
TOOL_ACTION
selectionClear
;
// Edit Tool
// Edit Tool
/// Activation of the edit tool
/// Activation of the edit tool
static
TOOL_ACTION
editActivate
;
static
TOOL_ACTION
editActivate
;
...
...
pcbnew/tools/drawing_tool.cpp
View file @
5d1ec2b2
...
@@ -38,7 +38,6 @@
...
@@ -38,7 +38,6 @@
#include <gal/graphics_abstraction_layer.h>
#include <gal/graphics_abstraction_layer.h>
#include <tool/tool_manager.h>
#include <tool/tool_manager.h>
#include <router/direction.h>
#include <router/direction.h>
#include "selection_tool.h"
#include <class_board.h>
#include <class_board.h>
#include <class_drawsegment.h>
#include <class_drawsegment.h>
...
@@ -103,7 +102,7 @@ int DRAWING_TOOL::DrawArc( TOOL_EVENT& aEvent )
...
@@ -103,7 +102,7 @@ int DRAWING_TOOL::DrawArc( TOOL_EVENT& aEvent )
KIGFX
::
VIEW_GROUP
preview
(
m_view
);
KIGFX
::
VIEW_GROUP
preview
(
m_view
);
m_view
->
Add
(
&
preview
);
m_view
->
Add
(
&
preview
);
m_toolMgr
->
GetTool
<
SELECTION_TOOL
>
()
->
ClearSelection
(
);
m_toolMgr
->
RunAction
(
COMMON_ACTIONS
::
selectionClear
);
m_controls
->
ShowCursor
(
true
);
m_controls
->
ShowCursor
(
true
);
m_controls
->
SetSnapping
(
true
);
m_controls
->
SetSnapping
(
true
);
...
@@ -289,7 +288,7 @@ int DRAWING_TOOL::PlaceTextModule( TOOL_EVENT& aEvent )
...
@@ -289,7 +288,7 @@ int DRAWING_TOOL::PlaceTextModule( TOOL_EVENT& aEvent )
KIGFX
::
VIEW_GROUP
preview
(
m_view
);
KIGFX
::
VIEW_GROUP
preview
(
m_view
);
m_view
->
Add
(
&
preview
);
m_view
->
Add
(
&
preview
);
m_toolMgr
->
GetTool
<
SELECTION_TOOL
>
()
->
ClearSelection
(
);
m_toolMgr
->
RunAction
(
COMMON_ACTIONS
::
selectionClear
);
m_controls
->
ShowCursor
(
true
);
m_controls
->
ShowCursor
(
true
);
m_controls
->
SetSnapping
(
true
);
m_controls
->
SetSnapping
(
true
);
m_controls
->
SetAutoPan
(
true
);
m_controls
->
SetAutoPan
(
true
);
...
@@ -394,7 +393,7 @@ int DRAWING_TOOL::PlaceTextPcb( TOOL_EVENT& aEvent )
...
@@ -394,7 +393,7 @@ int DRAWING_TOOL::PlaceTextPcb( TOOL_EVENT& aEvent )
KIGFX
::
VIEW_GROUP
preview
(
m_view
);
KIGFX
::
VIEW_GROUP
preview
(
m_view
);
m_view
->
Add
(
&
preview
);
m_view
->
Add
(
&
preview
);
m_toolMgr
->
GetTool
<
SELECTION_TOOL
>
()
->
ClearSelection
(
);
m_toolMgr
->
RunAction
(
COMMON_ACTIONS
::
selectionClear
);
m_controls
->
ShowCursor
(
true
);
m_controls
->
ShowCursor
(
true
);
m_controls
->
SetSnapping
(
true
);
m_controls
->
SetSnapping
(
true
);
m_controls
->
SetAutoPan
(
true
);
m_controls
->
SetAutoPan
(
true
);
...
@@ -500,7 +499,7 @@ int DRAWING_TOOL::DrawDimension( TOOL_EVENT& aEvent )
...
@@ -500,7 +499,7 @@ int DRAWING_TOOL::DrawDimension( TOOL_EVENT& aEvent )
KIGFX
::
VIEW_GROUP
preview
(
m_view
);
KIGFX
::
VIEW_GROUP
preview
(
m_view
);
m_view
->
Add
(
&
preview
);
m_view
->
Add
(
&
preview
);
m_toolMgr
->
GetTool
<
SELECTION_TOOL
>
()
->
ClearSelection
(
);
m_toolMgr
->
RunAction
(
COMMON_ACTIONS
::
selectionClear
);
m_controls
->
ShowCursor
(
true
);
m_controls
->
ShowCursor
(
true
);
m_controls
->
SetSnapping
(
true
);
m_controls
->
SetSnapping
(
true
);
...
@@ -696,7 +695,7 @@ int DRAWING_TOOL::PlaceTarget( TOOL_EVENT& aEvent )
...
@@ -696,7 +695,7 @@ int DRAWING_TOOL::PlaceTarget( TOOL_EVENT& aEvent )
m_view
->
Add
(
&
preview
);
m_view
->
Add
(
&
preview
);
preview
.
ViewUpdate
(
KIGFX
::
VIEW_ITEM
::
GEOMETRY
);
preview
.
ViewUpdate
(
KIGFX
::
VIEW_ITEM
::
GEOMETRY
);
m_toolMgr
->
GetTool
<
SELECTION_TOOL
>
()
->
ClearSelection
(
);
m_toolMgr
->
RunAction
(
COMMON_ACTIONS
::
selectionClear
);
m_controls
->
SetSnapping
(
true
);
m_controls
->
SetSnapping
(
true
);
m_controls
->
SetAutoPan
(
true
);
m_controls
->
SetAutoPan
(
true
);
...
@@ -771,7 +770,7 @@ int DRAWING_TOOL::PlaceModule( TOOL_EVENT& aEvent )
...
@@ -771,7 +770,7 @@ int DRAWING_TOOL::PlaceModule( TOOL_EVENT& aEvent )
KIGFX
::
VIEW_GROUP
preview
(
m_view
);
KIGFX
::
VIEW_GROUP
preview
(
m_view
);
m_view
->
Add
(
&
preview
);
m_view
->
Add
(
&
preview
);
m_toolMgr
->
GetTool
<
SELECTION_TOOL
>
()
->
ClearSelection
(
);
m_toolMgr
->
RunAction
(
COMMON_ACTIONS
::
selectionClear
);
m_controls
->
ShowCursor
(
true
);
m_controls
->
ShowCursor
(
true
);
m_controls
->
SetSnapping
(
true
);
m_controls
->
SetSnapping
(
true
);
m_controls
->
SetAutoPan
(
true
);
m_controls
->
SetAutoPan
(
true
);
...
@@ -882,7 +881,7 @@ int DRAWING_TOOL::drawSegment( int aShape, bool aContinous )
...
@@ -882,7 +881,7 @@ int DRAWING_TOOL::drawSegment( int aShape, bool aContinous )
KIGFX
::
VIEW_GROUP
preview
(
m_view
);
KIGFX
::
VIEW_GROUP
preview
(
m_view
);
m_view
->
Add
(
&
preview
);
m_view
->
Add
(
&
preview
);
m_toolMgr
->
GetTool
<
SELECTION_TOOL
>
()
->
ClearSelection
(
);
m_toolMgr
->
RunAction
(
COMMON_ACTIONS
::
selectionClear
);
m_controls
->
ShowCursor
(
true
);
m_controls
->
ShowCursor
(
true
);
m_controls
->
SetSnapping
(
true
);
m_controls
->
SetSnapping
(
true
);
...
@@ -1058,7 +1057,7 @@ int DRAWING_TOOL::drawZone( bool aKeepout )
...
@@ -1058,7 +1057,7 @@ int DRAWING_TOOL::drawZone( bool aKeepout )
KIGFX
::
VIEW_GROUP
preview
(
m_view
);
KIGFX
::
VIEW_GROUP
preview
(
m_view
);
m_view
->
Add
(
&
preview
);
m_view
->
Add
(
&
preview
);
m_toolMgr
->
GetTool
<
SELECTION_TOOL
>
()
->
ClearSelection
(
);
m_toolMgr
->
RunAction
(
COMMON_ACTIONS
::
selectionClear
);
m_controls
->
ShowCursor
(
true
);
m_controls
->
ShowCursor
(
true
);
m_controls
->
SetSnapping
(
true
);
m_controls
->
SetSnapping
(
true
);
...
...
pcbnew/tools/edit_tool.cpp
View file @
5d1ec2b2
...
@@ -48,7 +48,7 @@ EDIT_TOOL::EDIT_TOOL() :
...
@@ -48,7 +48,7 @@ EDIT_TOOL::EDIT_TOOL() :
bool
EDIT_TOOL
::
Init
()
bool
EDIT_TOOL
::
Init
()
{
{
// Find the selection tool, so they can cooperate
// Find the selection tool, so they can cooperate
m_selectionTool
=
m_toolMgr
->
GetTool
<
SELECTION_TOOL
>
(
);
m_selectionTool
=
static_cast
<
SELECTION_TOOL
*>
(
m_toolMgr
->
FindTool
(
"pcbnew.InteractiveSelection"
)
);
if
(
!
m_selectionTool
)
if
(
!
m_selectionTool
)
{
{
...
@@ -198,7 +198,7 @@ int EDIT_TOOL::Main( TOOL_EVENT& aEvent )
...
@@ -198,7 +198,7 @@ int EDIT_TOOL::Main( TOOL_EVENT& aEvent )
}
}
if
(
unselect
)
if
(
unselect
)
m_
selectionTool
->
ClearSelection
(
);
m_
toolMgr
->
RunAction
(
COMMON_ACTIONS
::
selectionClear
);
RN_DATA
*
ratsnest
=
getModel
<
BOARD
>
()
->
GetRatsnest
();
RN_DATA
*
ratsnest
=
getModel
<
BOARD
>
()
->
GetRatsnest
();
ratsnest
->
ClearSimple
();
ratsnest
->
ClearSimple
();
...
@@ -251,7 +251,7 @@ int EDIT_TOOL::Properties( TOOL_EVENT& aEvent )
...
@@ -251,7 +251,7 @@ int EDIT_TOOL::Properties( TOOL_EVENT& aEvent )
std
::
vector
<
PICKED_ITEMS_LIST
*>&
undoList
=
editFrame
->
GetScreen
()
->
m_UndoList
.
m_CommandsList
;
std
::
vector
<
PICKED_ITEMS_LIST
*>&
undoList
=
editFrame
->
GetScreen
()
->
m_UndoList
.
m_CommandsList
;
// Some of properties dialogs alter pointers, so we should deselect them
// Some of properties dialogs alter pointers, so we should deselect them
m_
selectionTool
->
ClearSelection
(
);
m_
toolMgr
->
RunAction
(
COMMON_ACTIONS
::
selectionClear
);
STATUS_FLAGS
flags
=
item
->
GetFlags
();
STATUS_FLAGS
flags
=
item
->
GetFlags
();
item
->
ClearFlags
();
item
->
ClearFlags
();
...
@@ -328,7 +328,7 @@ int EDIT_TOOL::Rotate( TOOL_EVENT& aEvent )
...
@@ -328,7 +328,7 @@ int EDIT_TOOL::Rotate( TOOL_EVENT& aEvent )
getModel
<
BOARD
>
()
->
GetRatsnest
()
->
Recalculate
();
getModel
<
BOARD
>
()
->
GetRatsnest
()
->
Recalculate
();
if
(
unselect
)
if
(
unselect
)
m_
selectionTool
->
ClearSelection
(
);
m_
toolMgr
->
RunAction
(
COMMON_ACTIONS
::
selectionClear
);
m_toolMgr
->
RunAction
(
COMMON_ACTIONS
::
pointEditorUpdate
);
m_toolMgr
->
RunAction
(
COMMON_ACTIONS
::
pointEditorUpdate
);
setTransitions
();
setTransitions
();
...
@@ -382,7 +382,7 @@ int EDIT_TOOL::Flip( TOOL_EVENT& aEvent )
...
@@ -382,7 +382,7 @@ int EDIT_TOOL::Flip( TOOL_EVENT& aEvent )
getModel
<
BOARD
>
()
->
GetRatsnest
()
->
Recalculate
();
getModel
<
BOARD
>
()
->
GetRatsnest
()
->
Recalculate
();
if
(
unselect
)
if
(
unselect
)
m_
selectionTool
->
ClearSelection
(
);
m_
toolMgr
->
RunAction
(
COMMON_ACTIONS
::
selectionClear
);
m_toolMgr
->
RunAction
(
COMMON_ACTIONS
::
pointEditorUpdate
);
m_toolMgr
->
RunAction
(
COMMON_ACTIONS
::
pointEditorUpdate
);
setTransitions
();
setTransitions
();
...
@@ -407,7 +407,7 @@ int EDIT_TOOL::Remove( TOOL_EVENT& aEvent )
...
@@ -407,7 +407,7 @@ int EDIT_TOOL::Remove( TOOL_EVENT& aEvent )
PCB_BASE_FRAME
*
editFrame
=
getEditFrame
<
PCB_BASE_FRAME
>
();
PCB_BASE_FRAME
*
editFrame
=
getEditFrame
<
PCB_BASE_FRAME
>
();
// As we are about to remove items, they have to be removed from the selection first
// As we are about to remove items, they have to be removed from the selection first
m_
selectionTool
->
ClearSelection
(
);
m_
toolMgr
->
RunAction
(
COMMON_ACTIONS
::
selectionClear
);
// Save them
// Save them
for
(
unsigned
int
i
=
0
;
i
<
selectedItems
.
GetCount
();
++
i
)
for
(
unsigned
int
i
=
0
;
i
<
selectedItems
.
GetCount
();
++
i
)
...
@@ -525,7 +525,7 @@ wxPoint EDIT_TOOL::getModificationPoint( const SELECTION_TOOL::SELECTION& aSelec
...
@@ -525,7 +525,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_TOOL
::
SELECTION
&
aSelection
)
{
{
if
(
aSelection
.
Empty
()
)
// Try to find an item that could be modified
if
(
aSelection
.
Empty
()
)
// Try to find an item that could be modified
m_
selectionTool
->
SelectSingle
(
getView
()
->
ToWorld
(
getViewControls
()
->
GetMousePosition
()
)
);
m_
toolMgr
->
RunAction
(
COMMON_ACTIONS
::
selectionSingle
);
return
!
aSelection
.
Empty
();
return
!
aSelection
.
Empty
();
}
}
...
...
pcbnew/tools/selection_tool.cpp
View file @
5d1ec2b2
...
@@ -76,7 +76,7 @@ void SELECTION_TOOL::Reset( RESET_REASON aReason )
...
@@ -76,7 +76,7 @@ void SELECTION_TOOL::Reset( RESET_REASON aReason )
m_selection
.
clear
();
m_selection
.
clear
();
else
else
// Restore previous properties of selected items and remove them from containers
// Restore previous properties of selected items and remove them from containers
C
learSelection
();
c
learSelection
();
m_frame
=
getEditFrame
<
PCB_BASE_FRAME
>
();
m_frame
=
getEditFrame
<
PCB_BASE_FRAME
>
();
...
@@ -84,8 +84,7 @@ void SELECTION_TOOL::Reset( RESET_REASON aReason )
...
@@ -84,8 +84,7 @@ void SELECTION_TOOL::Reset( RESET_REASON aReason )
getView
()
->
Remove
(
m_selection
.
group
);
getView
()
->
Remove
(
m_selection
.
group
);
getView
()
->
Add
(
m_selection
.
group
);
getView
()
->
Add
(
m_selection
.
group
);
// The tool launches upon reception of action event ("pcbnew.InteractiveSelection")
setTransitions
();
Go
(
&
SELECTION_TOOL
::
Main
,
COMMON_ACTIONS
::
selectionActivate
.
MakeEvent
()
);
}
}
...
@@ -98,13 +97,8 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
...
@@ -98,13 +97,8 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
// become the new selection (discarding previously selected items)
// become the new selection (discarding previously selected items)
m_additive
=
evt
->
Modifier
(
MD_SHIFT
);
m_additive
=
evt
->
Modifier
(
MD_SHIFT
);
if
(
evt
->
IsCancel
()
||
evt
->
Action
()
==
TA_UNDO_REDO
)
{
ClearSelection
();
}
// single click? Select single object
// single click? Select single object
else
if
(
evt
->
IsClick
(
BUT_LEFT
)
)
if
(
evt
->
IsClick
(
BUT_LEFT
)
)
{
{
if
(
evt
->
Modifier
(
MD_CTRL
)
)
if
(
evt
->
Modifier
(
MD_CTRL
)
)
{
{
...
@@ -113,9 +107,9 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
...
@@ -113,9 +107,9 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
else
else
{
{
if
(
!
m_additive
)
if
(
!
m_additive
)
C
learSelection
();
c
learSelection
();
S
electSingle
(
evt
->
Position
()
);
s
electSingle
(
evt
->
Position
()
);
}
}
}
}
...
@@ -123,7 +117,7 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
...
@@ -123,7 +117,7 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
else
if
(
evt
->
IsClick
(
BUT_RIGHT
)
)
else
if
(
evt
->
IsClick
(
BUT_RIGHT
)
)
{
{
if
(
m_selection
.
Empty
()
)
if
(
m_selection
.
Empty
()
)
S
electSingle
(
evt
->
Position
()
);
s
electSingle
(
evt
->
Position
()
);
if
(
!
m_selection
.
Empty
()
)
if
(
!
m_selection
.
Empty
()
)
SetContextMenu
(
&
m_menu
,
CMENU_NOW
);
SetContextMenu
(
&
m_menu
,
CMENU_NOW
);
...
@@ -133,7 +127,7 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
...
@@ -133,7 +127,7 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
else
if
(
evt
->
IsDblClick
(
BUT_LEFT
)
)
else
if
(
evt
->
IsDblClick
(
BUT_LEFT
)
)
{
{
if
(
m_selection
.
Empty
()
)
if
(
m_selection
.
Empty
()
)
S
electSingle
(
evt
->
Position
()
);
s
electSingle
(
evt
->
Position
()
);
m_toolMgr
->
RunAction
(
COMMON_ACTIONS
::
properties
);
m_toolMgr
->
RunAction
(
COMMON_ACTIONS
::
properties
);
}
}
...
@@ -148,7 +142,7 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
...
@@ -148,7 +142,7 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
else
if
(
m_selection
.
Empty
()
)
else
if
(
m_selection
.
Empty
()
)
{
{
// There is nothing selected, so try to select something
// There is nothing selected, so try to select something
if
(
!
S
electSingle
(
getView
()
->
ToWorld
(
getViewControls
()
->
GetMousePosition
()
),
false
)
)
if
(
!
s
electSingle
(
getView
()
->
ToWorld
(
getViewControls
()
->
GetMousePosition
()
),
false
)
)
{
{
// If nothings has been selected or user wants to select more
// If nothings has been selected or user wants to select more
// draw the selection box
// draw the selection box
...
@@ -171,10 +165,22 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
...
@@ -171,10 +165,22 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
else
else
{
{
// No -> clear the selection list
// No -> clear the selection list
C
learSelection
();
c
learSelection
();
}
}
}
}
}
}
else
if
(
evt
->
IsAction
(
&
COMMON_ACTIONS
::
selectionSingle
)
)
{
// GetMousePosition() is used, as it is independent of snapping settings
selectSingle
(
getView
()
->
ToWorld
(
getViewControls
()
->
GetMousePosition
()
)
);
}
else
if
(
evt
->
IsCancel
()
||
evt
->
Action
()
==
TA_UNDO_REDO
||
evt
->
IsAction
(
&
COMMON_ACTIONS
::
selectionClear
)
)
{
clearSelection
();
}
}
}
// This tool is supposed to be active forever
// This tool is supposed to be active forever
...
@@ -184,7 +190,43 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
...
@@ -184,7 +190,43 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
}
}
bool
SELECTION_TOOL
::
SelectSingle
(
const
VECTOR2I
&
aWhere
,
bool
aAllowDisambiguation
)
void
SELECTION_TOOL
::
AddMenuItem
(
const
TOOL_ACTION
&
aAction
)
{
assert
(
aAction
.
GetId
()
>
0
);
// Check if the action was registered before in ACTION_MANAGER
m_menu
.
Add
(
aAction
);
}
void
SELECTION_TOOL
::
toggleSelection
(
BOARD_ITEM
*
aItem
)
{
if
(
aItem
->
IsSelected
()
)
{
deselect
(
aItem
);
// Inform other potentially interested tools
TOOL_EVENT
deselectEvent
(
DeselectedEvent
);
m_toolMgr
->
ProcessEvent
(
deselectEvent
);
}
else
{
if
(
!
m_additive
)
clearSelection
();
// Prevent selection of invisible or inactive items
if
(
selectable
(
aItem
)
)
{
select
(
aItem
);
// Inform other potentially interested tools
TOOL_EVENT
selectEvent
(
SelectedEvent
);
m_toolMgr
->
ProcessEvent
(
selectEvent
);
}
}
}
bool
SELECTION_TOOL
::
selectSingle
(
const
VECTOR2I
&
aWhere
,
bool
aAllowDisambiguation
)
{
{
BOARD_ITEM
*
item
;
BOARD_ITEM
*
item
;
GENERAL_COLLECTORS_GUIDE
guide
=
m_frame
->
GetCollectorsGuide
();
GENERAL_COLLECTORS_GUIDE
guide
=
m_frame
->
GetCollectorsGuide
();
...
@@ -202,7 +244,7 @@ bool SELECTION_TOOL::SelectSingle( const VECTOR2I& aWhere, bool aAllowDisambigua
...
@@ -202,7 +244,7 @@ bool SELECTION_TOOL::SelectSingle( const VECTOR2I& aWhere, bool aAllowDisambigua
{
{
case
0
:
case
0
:
if
(
!
m_additive
)
if
(
!
m_additive
)
C
learSelection
();
c
learSelection
();
return
false
;
return
false
;
...
@@ -254,70 +296,6 @@ bool SELECTION_TOOL::SelectSingle( const VECTOR2I& aWhere, bool aAllowDisambigua
...
@@ -254,70 +296,6 @@ bool SELECTION_TOOL::SelectSingle( const VECTOR2I& aWhere, bool aAllowDisambigua
}
}
void
SELECTION_TOOL
::
ClearSelection
()
{
if
(
m_selection
.
Empty
()
)
return
;
KIGFX
::
VIEW_GROUP
::
const_iter
it
,
it_end
;
// Restore the initial properties
for
(
it
=
m_selection
.
group
->
Begin
(),
it_end
=
m_selection
.
group
->
End
();
it
!=
it_end
;
++
it
)
{
BOARD_ITEM
*
item
=
static_cast
<
BOARD_ITEM
*>
(
*
it
);
item
->
ViewSetVisible
(
true
);
item
->
ClearSelected
();
}
m_selection
.
clear
();
m_frame
->
SetCurItem
(
NULL
);
// Do not show the context menu when there is nothing selected
SetContextMenu
(
&
m_menu
,
CMENU_OFF
);
// Inform other potentially interested tools
TOOL_EVENT
clearEvent
(
ClearedEvent
);
m_toolMgr
->
ProcessEvent
(
clearEvent
);
}
void
SELECTION_TOOL
::
AddMenuItem
(
const
TOOL_ACTION
&
aAction
)
{
assert
(
aAction
.
GetId
()
>
0
);
// Check if the action was registered before in ACTION_MANAGER
m_menu
.
Add
(
aAction
);
}
void
SELECTION_TOOL
::
toggleSelection
(
BOARD_ITEM
*
aItem
)
{
if
(
aItem
->
IsSelected
()
)
{
deselect
(
aItem
);
// Inform other potentially interested tools
TOOL_EVENT
deselectEvent
(
DeselectedEvent
);
m_toolMgr
->
ProcessEvent
(
deselectEvent
);
}
else
{
if
(
!
m_additive
)
ClearSelection
();
// Prevent selection of invisible or inactive items
if
(
selectable
(
aItem
)
)
{
select
(
aItem
);
// Inform other potentially interested tools
TOOL_EVENT
selectEvent
(
SelectedEvent
);
m_toolMgr
->
ProcessEvent
(
selectEvent
);
}
}
}
bool
SELECTION_TOOL
::
selectMultiple
()
bool
SELECTION_TOOL
::
selectMultiple
()
{
{
bool
cancelled
=
false
;
// Was the tool cancelled while it was running?
bool
cancelled
=
false
;
// Was the tool cancelled while it was running?
...
@@ -338,7 +316,7 @@ bool SELECTION_TOOL::selectMultiple()
...
@@ -338,7 +316,7 @@ bool SELECTION_TOOL::selectMultiple()
if
(
evt
->
IsDrag
(
BUT_LEFT
)
)
if
(
evt
->
IsDrag
(
BUT_LEFT
)
)
{
{
if
(
!
m_additive
)
if
(
!
m_additive
)
C
learSelection
();
c
learSelection
();
// Start drawing a selection box
// Start drawing a selection box
m_selArea
->
SetOrigin
(
evt
->
DragOrigin
()
);
m_selArea
->
SetOrigin
(
evt
->
DragOrigin
()
);
...
@@ -393,6 +371,60 @@ bool SELECTION_TOOL::selectMultiple()
...
@@ -393,6 +371,60 @@ bool SELECTION_TOOL::selectMultiple()
}
}
void
SELECTION_TOOL
::
setTransitions
()
{
Go
(
&
SELECTION_TOOL
::
Main
,
COMMON_ACTIONS
::
selectionActivate
.
MakeEvent
()
);
Go
(
&
SELECTION_TOOL
::
SingleSelection
,
COMMON_ACTIONS
::
selectionSingle
.
MakeEvent
()
);
Go
(
&
SELECTION_TOOL
::
ClearSelection
,
COMMON_ACTIONS
::
selectionClear
.
MakeEvent
()
);
}
int
SELECTION_TOOL
::
SingleSelection
(
TOOL_EVENT
&
aEvent
)
{
selectSingle
(
getView
()
->
ToWorld
(
getViewControls
()
->
GetMousePosition
()
)
);
setTransitions
();
return
0
;
}
int
SELECTION_TOOL
::
ClearSelection
(
TOOL_EVENT
&
aEvent
)
{
clearSelection
();
setTransitions
();
return
0
;
}
void
SELECTION_TOOL
::
clearSelection
()
{
if
(
m_selection
.
Empty
()
)
return
;
KIGFX
::
VIEW_GROUP
::
const_iter
it
,
it_end
;
// Restore the initial properties
for
(
it
=
m_selection
.
group
->
Begin
(),
it_end
=
m_selection
.
group
->
End
();
it
!=
it_end
;
++
it
)
{
BOARD_ITEM
*
item
=
static_cast
<
BOARD_ITEM
*>
(
*
it
);
item
->
ViewSetVisible
(
true
);
item
->
ClearSelected
();
}
m_selection
.
clear
();
getEditFrame
<
PCB_EDIT_FRAME
>
()
->
SetCurItem
(
NULL
);
// Do not show the context menu when there is nothing selected
SetContextMenu
(
&
m_menu
,
CMENU_OFF
);
// Inform other potentially interested tools
TOOL_EVENT
clearEvent
(
ClearedEvent
);
m_toolMgr
->
ProcessEvent
(
clearEvent
);
return
;
}
BOARD_ITEM
*
SELECTION_TOOL
::
disambiguationMenu
(
GENERAL_COLLECTOR
*
aCollector
)
BOARD_ITEM
*
SELECTION_TOOL
::
disambiguationMenu
(
GENERAL_COLLECTOR
*
aCollector
)
{
{
BOARD_ITEM
*
current
=
NULL
;
BOARD_ITEM
*
current
=
NULL
;
...
...
pcbnew/tools/selection_tool.h
View file @
5d1ec2b2
...
@@ -48,7 +48,7 @@ class VIEW_GROUP;
...
@@ -48,7 +48,7 @@ class VIEW_GROUP;
* - pick single objects (click LMB)
* - pick single objects (click LMB)
* - add objects to existing selection (Shift+LMB)
* - add objects to existing selection (Shift+LMB)
* - draw selection box (drag LMB)
* - draw selection box (drag LMB)
* - handles MODULEs properly (ie. selects either MODULE or its PADs, TEXTs, etc.)
* - handles MODULEs properly (i
.
e. selects either MODULE or its PADs, TEXTs, etc.)
* - 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
*/
*/
...
@@ -114,24 +114,6 @@ public:
...
@@ -114,24 +114,6 @@ public:
return
m_selection
;
return
m_selection
;
}
}
/**
* Function SelectSingle()
* Selects an item pointed by the parameter aWhere. If there is more than one item at that
* place, there is a menu displayed that allows to choose the item.
*
* @param aWhere is the place where the item should be selected.
* @param aAllowDisambiguation decides what to do in case of disambiguation. If true, then
* a menu is shown, otherise function finishes without selecting anything.
* @return True if an item was selected, false otherwise.
*/
bool
SelectSingle
(
const
VECTOR2I
&
aWhere
,
bool
aAllowDisambiguation
=
true
);
/**
* Function ClearSelection()
* Clears the current selection.
*/
void
ClearSelection
();
/**
/**
* Function AddMenuItem()
* Function AddMenuItem()
*
*
...
@@ -160,7 +142,25 @@ public:
...
@@ -160,7 +142,25 @@ public:
///> Event sent after selection is cleared.
///> Event sent after selection is cleared.
const
TOOL_EVENT
ClearedEvent
;
const
TOOL_EVENT
ClearedEvent
;
///> Select single item event handler.
int
SingleSelection
(
TOOL_EVENT
&
aEvent
);
///> Clear current selection event handler.
int
ClearSelection
(
TOOL_EVENT
&
aEvent
);
private
:
private
:
/**
* Function selectSingle()
* Selects an item pointed by the parameter aWhere. If there is more than one item at that
* place, there is a menu displayed that allows to choose the item.
*
* @param aWhere is the place where the item should be selected.
* @param aAllowDisambiguation decides what to do in case of disambiguation. If true, then
* a menu is shown, otherise function finishes without selecting anything.
* @return True if an item was selected, false otherwise.
*/
bool
selectSingle
(
const
VECTOR2I
&
aWhere
,
bool
aAllowDisambiguation
=
true
);
/**
/**
* Function selectMultiple()
* Function selectMultiple()
* Handles drawing a selection box that allows to select many items at the same time.
* Handles drawing a selection box that allows to select many items at the same time.
...
@@ -169,6 +169,15 @@ private:
...
@@ -169,6 +169,15 @@ private:
*/
*/
bool
selectMultiple
();
bool
selectMultiple
();
///> Sets up handlers for various events.
void
setTransitions
();
/**
* Function ClearSelection()
* Clears the current selection.
*/
void
clearSelection
();
/**
/**
* Function disambiguationMenu()
* Function disambiguationMenu()
* Handles the menu that allows to select one of many items in case there is more than one
* Handles the menu that allows to select one of many items in case there is more than one
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment