174 lines
4.3 KiB
QML
174 lines
4.3 KiB
QML
import QtQuick 2.15
|
|
|
|
Item {
|
|
property list<Dia> slides
|
|
property list<Dia> img
|
|
|
|
property int currentSlideIndex: 0
|
|
property int _currentSlideIndex: 0
|
|
property int slidesSize: slides.length
|
|
property bool firstIteration: true
|
|
|
|
function reset() {
|
|
currentSlideIndex = 0;
|
|
firstIteration = true;
|
|
}
|
|
|
|
onCurrentSlideIndexChanged: {
|
|
if (currentSlideIndex >= slidesSize) {
|
|
firstIteration = false;
|
|
currentSlideIndex = 0;
|
|
}
|
|
|
|
transitionAnimation.start();
|
|
}
|
|
|
|
Column {
|
|
anchors.fill: parent
|
|
spacing: 10
|
|
|
|
Text {
|
|
id: titleText
|
|
font {
|
|
family: "Raleway"
|
|
capitalization: Font.AllUppercase
|
|
weight: Font.DemiBold
|
|
pointSize: 16
|
|
}
|
|
color: "white"
|
|
text: slides[_currentSlideIndex].title
|
|
}
|
|
Text {
|
|
id: bodyText
|
|
font {
|
|
family: "Raleway"
|
|
pointSize: 12
|
|
weight: Font.DemiBold
|
|
}
|
|
width: 400
|
|
color: "white"
|
|
text: slides[_currentSlideIndex].body
|
|
wrapMode: Text.Wrap
|
|
}
|
|
|
|
Text {
|
|
id: footerText
|
|
font {
|
|
family: "Raleway"
|
|
weight: Font.Light
|
|
pointSize: 12
|
|
}
|
|
width: 400
|
|
color: "white"
|
|
text: slides[_currentSlideIndex].footer ?? ""
|
|
wrapMode: Text.Wrap
|
|
}
|
|
|
|
Image {
|
|
id: icon
|
|
source: slides[_currentSlideIndex].image
|
|
width: 250
|
|
height: 250
|
|
}
|
|
}
|
|
|
|
SequentialAnimation {
|
|
id: transitionAnimation
|
|
property int duration: 700
|
|
|
|
ParallelAnimation {
|
|
OpacityAnimator {
|
|
target: titleText
|
|
from: 1.0
|
|
to: 0.0
|
|
duration: transitionAnimation.duration
|
|
}
|
|
OpacityAnimator {
|
|
target: bodyText
|
|
from: 1.0
|
|
to: 0.0
|
|
duration: transitionAnimation.duration
|
|
}
|
|
OpacityAnimator {
|
|
target: footerText
|
|
from: 1.0
|
|
to: 0.0
|
|
duration: transitionAnimation.duration
|
|
}
|
|
OpacityAnimator {
|
|
target: icon
|
|
from: 1.0
|
|
to: 0.0
|
|
duration: 2000
|
|
}
|
|
XAnimator {
|
|
target: titleText
|
|
from: 0
|
|
to: -30
|
|
duration: transitionAnimation.duration
|
|
}
|
|
XAnimator {
|
|
target: bodyText
|
|
from: 0
|
|
to: -25
|
|
duration: transitionAnimation.duration
|
|
}
|
|
XAnimator {
|
|
target: footerText
|
|
from: 0
|
|
to: -25
|
|
duration: transitionAnimation.duration
|
|
}
|
|
}
|
|
|
|
ScriptAction {
|
|
script: _currentSlideIndex = currentSlideIndex
|
|
}
|
|
|
|
ParallelAnimation {
|
|
OpacityAnimator {
|
|
target: titleText
|
|
from: 0.0
|
|
to: 1.0
|
|
duration: transitionAnimation.duration
|
|
}
|
|
OpacityAnimator {
|
|
target: bodyText
|
|
from: 0.0
|
|
to: 1.0
|
|
duration: transitionAnimation.duration
|
|
}
|
|
OpacityAnimator {
|
|
target: footerText
|
|
from: 0.0
|
|
to: 1.0
|
|
duration: transitionAnimation.duration
|
|
}
|
|
OpacityAnimator {
|
|
target: icon
|
|
from: 0.0
|
|
to: 1.0
|
|
duration: 2000
|
|
}
|
|
XAnimator {
|
|
target: titleText
|
|
from: 30
|
|
to: 0
|
|
duration: transitionAnimation.duration
|
|
}
|
|
XAnimator {
|
|
target: bodyText
|
|
from: 25
|
|
to: 0
|
|
duration: transitionAnimation.duration
|
|
}
|
|
XAnimator {
|
|
target: footerText
|
|
from: 25
|
|
to: 0
|
|
duration: transitionAnimation.duration
|
|
}
|
|
}
|
|
}
|
|
}
|