mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Dive pictures: don't update all images on drag&drop to profile
Gracefully handle drag & drop to the profile, which changes the offset of the pictures. To do this, keep the pictures in the DivePictureModel and the ProfileWidget2 sorted by offset and re-arrange if needed to keep the list sorted. This needs some code reshuffling. Introduce a helper-function that moves ranges in arrays. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
0aaa1bf386
commit
9efb56e2d4
5 changed files with 174 additions and 38 deletions
|
@ -88,6 +88,32 @@ QString getUserAgent();
|
|||
#define TITLE_OR_TEXT(_t, _m) _t, _m
|
||||
#endif
|
||||
|
||||
// Move a range in a vector to a different position.
|
||||
// The parameters are given according to the usual STL-semantics:
|
||||
// v: a container with STL-like random access iterator via std::begin(...)
|
||||
// rangeBegin: index of first element
|
||||
// rangeEnd: index one *past* last element
|
||||
// destination: index to element before which the range will be moved
|
||||
// Owing to std::begin() magic, this function works with STL-like containers:
|
||||
// QVector<int> v{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
|
||||
// moveInVector(v, 1, 4, 6);
|
||||
// as well as with C-style arrays:
|
||||
// int array[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
|
||||
// moveInVector(array, 1, 4, 6);
|
||||
// Both calls will have the following effect:
|
||||
// Before: 0 1 2 3 4 5 6 7 8 9
|
||||
// After: 0 4 5 1 2 3 6 7 8 9
|
||||
// No sanitizing of the input arguments is performed.
|
||||
template <typename Vector>
|
||||
void moveInVector(Vector &v, int rangeBegin, int rangeEnd, int destination)
|
||||
{
|
||||
auto it = std::begin(v);
|
||||
if (destination > rangeEnd)
|
||||
std::rotate(it + rangeBegin, it + rangeEnd, it + destination);
|
||||
else if (destination < rangeBegin)
|
||||
std::rotate(it + destination, it + rangeBegin, it + rangeEnd);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// 3) Functions visible to C and C++
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue