From 2b586ec23438991e3fa7ed3c02ff10a330e4e4d3 Mon Sep 17 00:00:00 2001 From: Ylva Selling Date: Thu, 17 Nov 2022 11:20:25 -0500 Subject: [PATCH] Change logic of reordering of images to accomodate for drag and drop --- modules/skybrowser/src/wwtcommunicator.cpp | 31 +++++++++++++++++----- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/modules/skybrowser/src/wwtcommunicator.cpp b/modules/skybrowser/src/wwtcommunicator.cpp index 08263b68e2..9d387314d4 100644 --- a/modules/skybrowser/src/wwtcommunicator.cpp +++ b/modules/skybrowser/src/wwtcommunicator.cpp @@ -29,6 +29,7 @@ #include #include #include +#include namespace { constexpr std::string_view _loggerCat = "WwtCommunicator"; @@ -290,16 +291,34 @@ glm::dvec2 WwtCommunicator::equatorialAim() const { } void WwtCommunicator::setImageOrder(int i, int order) { + using it = std::deque>::iterator; // Find in selected images list - auto current = findSelectedImage(i); - auto target = _selectedImages.begin() + order; + it current = findSelectedImage(i); + int currentIndex = std::distance(_selectedImages.begin(), current); + int difference = order - currentIndex; - // Make sure the image was found in the list - if (current != _selectedImages.end() && target != _selectedImages.end()) { - // Swap the two images - std::iter_swap(current, target); + std::deque> newDeque; + + for (int i = 0; i < _selectedImages.size(); i++) { + if (i == currentIndex) { + continue; + } + else if (i == order) { + if (order < currentIndex) { + newDeque.push_back(*current); + newDeque.push_back(_selectedImages[i]); + } + else { + newDeque.push_back(_selectedImages[i]); + newDeque.push_back(*current); + } + } + else { + newDeque.push_back(_selectedImages[i]); + } } + _selectedImages = newDeque; int reverseOrder = static_cast(_selectedImages.size()) - order - 1; ghoul::Dictionary message = setLayerOrderMessage(std::to_string(i), reverseOrder); sendMessageToWwt(message);