mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
statistics: support ctrl-selection for all series
Multiple selection using ctrl was only supported for scatter series. Factor out the corresponding code and use it in all series. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
64b82b16a2
commit
43b0ccca3e
6 changed files with 72 additions and 56 deletions
|
@ -1,2 +1,42 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include "statsselection.h"
|
||||
#include "core/dive.h"
|
||||
#include "core/selection.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
void processSelection(std::vector<dive *> dives, SelectionModifier modifier)
|
||||
{
|
||||
std::vector<dive *> selected;
|
||||
|
||||
if (modifier.ctrl) {
|
||||
// When shift is pressed, add the items under the mouse to the selection
|
||||
// or, if all items under the mouse are selected, remove them.
|
||||
selected = getDiveSelection();
|
||||
bool allSelected = std::all_of(dives.begin(), dives.end(),
|
||||
[] (const dive *d) { return d->selected; });
|
||||
if (allSelected) {
|
||||
// Remove items under cursor from selection. This could be made more efficient.
|
||||
for (const dive *d: dives) {
|
||||
auto it = std::find(selected.begin(), selected.end(), d);
|
||||
if (it != selected.end()) {
|
||||
// Move last element to deselected element. If this already was
|
||||
// the last element, this is a no-op. Then, chop off last element.
|
||||
*it = selected.back();
|
||||
selected.pop_back();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Add items under cursor to selection
|
||||
selected.reserve(dives.size() + selected.size());
|
||||
for (dive *d: dives) {
|
||||
if (std::find(selected.begin(), selected.end(), d) == selected.end())
|
||||
selected.push_back(d);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
selected = std::move(dives);
|
||||
}
|
||||
|
||||
setSelection(selected, selected.empty() ? nullptr : selected.front());
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue