Skip to content

Commit 58f036d

Browse files
committed
Allow to retain current selection with pressing Shift key [1852]
1 parent 6ce625c commit 58f036d

File tree

3 files changed

+22
-15
lines changed

3 files changed

+22
-15
lines changed

src/plots/cartesian/dragbox.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) {
218218

219219
if(isMainDrag) {
220220
var clickHandler = obtainClickHandler();
221-
clickHandler(gd, numClicks);
221+
clickHandler(gd, numClicks, evt);
222222
}
223223
// Allow manual editing of range bounds through an input field
224224
// TODO consider extracting that to a method for clarity

src/plots/cartesian/select.js

+5-4
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ function prepSelect(e, startX, startY, dragOptions, mode) {
323323
}
324324
else {
325325
// TODO What to do with the code below because we now have behavior for a single click
326-
selectOnClick(gd, numClicks);
326+
selectOnClick(gd, numClicks, evt);
327327

328328
// TODO: remove in v2 - this was probably never intended to work as it does,
329329
// but in case anyone depends on it we don't want to break it now.
@@ -358,7 +358,7 @@ function prepSelect(e, startX, startY, dragOptions, mode) {
358358
// ----------------
359359
// TODO handle clearing selection when no point is clicked (based on hoverData)
360360
// TODO do we have to consider multiple traces?
361-
function selectOnClick(gd, numClicks) {
361+
function selectOnClick(gd, numClicks, evt) {
362362
var calcData = gd.calcdata[0];
363363

364364
var hoverData = gd._hoverdata;
@@ -371,10 +371,11 @@ function selectOnClick(gd, numClicks) {
371371
var trace = calcData[0].trace;
372372
var hoverDatum = hoverData[0];
373373

374+
var retainCurrentSelection = evt.shiftKey;
374375
var pointAlreadySelected = isPointAlreadySelected(trace, hoverDatum.pointNumber);
375376
var traceSelection = pointAlreadySelected ?
376-
trace._module.deselectPoint(calcData, hoverDatum) :
377-
trace._module.selectPoint(calcData, hoverDatum);
377+
trace._module.deselectPoint(calcData, hoverDatum, retainCurrentSelection) :
378+
trace._module.selectPoint(calcData, hoverDatum, retainCurrentSelection);
378379
var searchInfo =
379380
_createSearchInfo(trace._module, calcData, hoverDatum.xaxis, hoverDatum.yaxis);
380381
var selection = fillSelectionItem(traceSelection, searchInfo);

src/traces/scatter/select.js

+16-10
Original file line numberDiff line numberDiff line change
@@ -46,31 +46,37 @@ function selectPoints(searchInfo, polygon) {
4646
return selection;
4747
}
4848

49-
function selectPoint(calcData, hoverDataItem) {
50-
return _togglePointSelectedState(calcData, hoverDataItem, true);
49+
function selectPoint(calcData, hoverDataItem, retain) {
50+
return _togglePointSelectedState(calcData, hoverDataItem, true, retain);
5151
}
5252

53-
function deselectPoint(calcData, hoverDataItem) {
54-
return _togglePointSelectedState(calcData, hoverDataItem, false);
53+
function deselectPoint(calcData, hoverDataItem, retain) {
54+
return _togglePointSelectedState(calcData, hoverDataItem, false, retain);
5555
}
5656

57-
function _togglePointSelectedState(calcData, hoverDataItem, selected) {
57+
function _togglePointSelectedState(calcData, hoverDataItem, selected, retain) {
5858
var selection = [];
5959
var selectedPointNumber = hoverDataItem.pointNumber;
6060
var cdItem = calcData[selectedPointNumber];
6161

62-
_clearSelection(calcData);
62+
if(!retain) _clearSelection(calcData);
6363

6464
if(selected) {
6565
cdItem.selected = 1;
66-
selection.push(_newSelectionItem(
67-
selectedPointNumber,
68-
hoverDataItem.xaxis.c2d(cdItem.x),
69-
hoverDataItem.yaxis.c2d(cdItem.y)));
7066
} else {
7167
cdItem.selected = 0;
7268
}
7369

70+
for(var i = 0; i < calcData.length; i++) {
71+
cdItem = calcData[i];
72+
if(cdItem.selected === 1) {
73+
selection.push(_newSelectionItem(
74+
i,
75+
hoverDataItem.xaxis.c2d(cdItem.x),
76+
hoverDataItem.yaxis.c2d(cdItem.y)));
77+
}
78+
}
79+
7480
return selection;
7581
}
7682

0 commit comments

Comments
 (0)