Change logic of reordering of images to accomodate for drag and drop

This commit is contained in:
Ylva Selling
2022-11-17 11:20:25 -05:00
parent 6f45801732
commit 2b586ec234

View File

@@ -29,6 +29,7 @@
#include <modules/webbrowser/include/webkeyboardhandler.h>
#include <modules/webbrowser/webbrowsermodule.h>
#include <ghoul/misc/dictionaryjsonformatter.h>
#include <deque>
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<std::pair<int, double>>::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<std::pair<int, double>> 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<int>(_selectedImages.size()) - order - 1;
ghoul::Dictionary message = setLayerOrderMessage(std::to_string(i), reverseOrder);
sendMessageToWwt(message);