Labrador/Desktop_Interface/ui_elements/swipeystack.cpp

60 lines
1.6 KiB
C++

#include "swipeystack.h"
swipeyStack::swipeyStack(QWidget *parent) : QStackedWidget(parent)
{
}
void swipeyStack::mousePressEvent(QMouseEvent *event){
initial_x = event->globalX();
initial_y = event->globalY();
initial_epochTime = QDateTime::currentMSecsSinceEpoch();
return;
}
void swipeyStack::mouseReleaseEvent(QMouseEvent *event){
qint64 msecsPassed = QDateTime::currentMSecsSinceEpoch() - initial_epochTime;
int x = event->globalX();
int y = event->globalY();
int deltaX = x - initial_x;
int deltaY = y - initial_y;
qDebug("TouchPoint moved [%d, %d] in %lldms", deltaX, deltaY, msecsPassed);
if((msecsPassed < SWIPEYSTACK_MAX_DRAG_TIME) && (qAbs(deltaX) > SWIPEYSTACK_MIN_DELTAX)){
if((qreal)deltaX/(qreal)msecsPassed > 1){
qDebug() << "SWIPE RIGHT";
cycleStack(-1);
}
if((qreal)deltaX/(qreal)msecsPassed < -1){
qDebug() << "SWIPE LEFT";
cycleStack(1);
}
}
return;
}
void swipeyStack::cycleStack(int delta){
int idx = currentIndex();
int cnt = count();
if(!wrapEnabled){
if((delta > 0) && ((idx + delta) > (cnt-1))){
setCurrentIndex(cnt-1);
return;
}
if((delta < 0) && ((idx + delta) < 0)){
setCurrentIndex(0);
return;
}
}
if(idx == 0){
idx = cnt;
}
setCurrentIndex((idx + delta) % cnt);
return;
}
void swipeyStack::enableWrapping(bool enabled){
wrapEnabled = enabled;
}