Files
WallReel/src/ui/Pages/CarouselScreen.qml
T
2026-02-16 14:22:03 +01:00

93 lines
2.5 KiB
QML

import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import WallReel.Core
import WallReel.UI.Modules
Item {
id: root
Keys.onPressed: (e) => {
if (e.key === Qt.Key_Left) {
if (carousel.currentIndex > 0)
carousel.currentIndex--;
} else if (e.key === Qt.Key_Right) {
if (carousel.currentIndex < carousel.count - 1)
carousel.currentIndex++;
} else if (e.key === Qt.Key_Escape)
Qt.quit();
else if (e.key === Qt.Key_Return || e.key === Qt.Key_Enter)
ImageModel.confirm(carousel.currentIndex);
else
e.accepted = false;
}
ColumnLayout {
anchors.fill: parent
anchors.margins: 20
spacing: 20
Label {
text: (ImageModel.dataAt(carousel.currentIndex, "imgName") ?? "") + " (" + (carousel.currentIndex + 1) + "/" + carousel.count + ")"
font.pixelSize: 12
Layout.alignment: Qt.AlignHCenter
}
Carousel {
id: carousel
Layout.fillWidth: true
Layout.fillHeight: true
model: ImageModel
itemWidth: Config.imageWidth
itemHeight: Config.imageWidth / Config.aspectRatio
focusedItemWidth: Config.imageFocusWidth
focusedItemHeight: Config.imageFocusWidth / Config.aspectRatio
MouseArea {
anchors.fill: parent
onWheel: (e) => {
if (e.angleDelta.y > 0) {
if (carousel.currentIndex > 0)
carousel.currentIndex--;
} else if (e.angleDelta.y < 0) {
if (carousel.currentIndex < carousel.count - 1)
carousel.currentIndex++;
}
}
onPressed: (e) => {
carousel.forceActiveFocus();
e.accepted = false;
}
onPositionChanged: (e) => {
e.accepted = false;
}
onReleased: (e) => {
e.accepted = false;
}
}
}
Slider {
id: progressBar
Layout.fillWidth: true
from: 0
to: carousel.count - 1
value: carousel.currentIndex
onMoved: {
if (carousel.currentIndex !== value)
carousel.currentIndex = value;
}
}
}
}