blob: 2bfd0cd57591ef841ede76059908070364f47694 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
#include "screenslidetimer.h"
#include <QDebug>
namespace kal
{
ScreenSlideTimer::ScreenSlideTimer(QObject *parent)
: QObject(parent)
{
m_pause = new QTimer(this);
m_pause->setInterval(TRANSITION_BOOKEND_DELAY);
m_pause->setSingleShot(true);
m_group = new QParallelAnimationGroup(this);
connect(m_pause, &QTimer::timeout, this, &ScreenSlideTimer::startNextState);
connect(m_group, &QParallelAnimationGroup::finished, this, &ScreenSlideTimer::startNextState);
}
ScreenSlideTimer::~ScreenSlideTimer()
{
m_group->disconnect(this);
m_pause->disconnect(this);
stop();
}
void ScreenSlideTimer::addAnimation(QAbstractAnimation *animation)
{
if (m_running)
{
qWarning() << "Cannot add animations while transition is in progress";
return;
}
m_group->addAnimation(animation);
}
void ScreenSlideTimer::start()
{
if (m_running)
{
qWarning() << "Transition already in progress";
return;
}
m_running = true;
startNextState();
}
void ScreenSlideTimer::stop()
{
if (m_running)
{
m_running = false;
m_state = NoTransition;
m_group->stop();
m_group->clear();
m_pause->stop();
}
}
void ScreenSlideTimer::startNextState()
{
switch (m_state)
{
case NoTransition:
m_state = PreTransition;
Q_EMIT started();
m_pause->start();
return;
case PreTransition:
m_state = GroupTransition;
m_group->start();
break;
case GroupTransition:
m_state = PostTransition;
m_pause->start();
break;
case PostTransition:
stop();
Q_EMIT finished();
break;
}
}
} // namespace kal
|