TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicsmoothmovingwidget.cpp
Go to the documentation of this file.
2 #include "musicwidgetheaders.h"
3 
4 #include <QTimer>
5 #include <QWheelEvent>
6 #include <QPropertyAnimation>
7 
9  : MusicAbstractTableWidget(parent),
10  m_initialized(true),
11  m_previousValue(0),
12  m_deltaValue(0),
13  m_scrollBar(nullptr),
14  m_slowAnimation(nullptr)
15 {
16  verticalScrollBar()->setStyleSheet(TTK::UI::ScrollBarStyle03);
17 
18  m_animationTimer = new QTimer(this);
19  m_animationTimer->setInterval(100 * TTK_DN_MS);
20  connect(m_animationTimer, SIGNAL(timeout()), SLOT(timeToAnimation()));
21 }
22 
24 {
25  m_animationTimer->stop();
26  delete m_animationTimer;
27  delete m_slowAnimation;
28 }
29 
31 {
32  m_scrollBar = (bar == nullptr) ? verticalScrollBar() : bar;
33  delete m_slowAnimation;
34 
35  m_slowAnimation = new QPropertyAnimation(m_scrollBar, "value", this);
36  m_slowAnimation->setDuration(TTK_DN_S2MS);
37  connect(m_scrollBar, SIGNAL(valueChanged(int)), SLOT(valueChanged(int)));
38 }
39 
41 {
42  if(!m_slowAnimation)
43  {
44  return;
45  }
46 
47  m_initialized = true;
48  m_animationTimer->stop();
49 
50  m_deltaValue = (m_deltaValue / 480.0) * (m_deltaValue < 0 ? m_deltaValue + 120 : -m_deltaValue + 120);
51 
52  m_slowAnimation->setStartValue(m_previousValue);
53  m_slowAnimation->setEndValue(m_scrollBar->value() + m_deltaValue * TTK_ITEM_SIZE_M / 30);
54  m_slowAnimation->start();
55 }
56 
58 {
59  m_previousValue = value;
60 }
61 
63 {
64  MusicAbstractTableWidget::wheelEvent(event);
65 
66  if(!m_slowAnimation)
67  {
68  return;
69  }
70 
71  m_animationTimer->stop();
72  m_slowAnimation->stop();
73 
74  if(m_initialized)
75  {
76  m_deltaValue = 0;
77  m_previousValue = m_scrollBar->value();
78  m_initialized = false;
79  }
80 
81  m_deltaValue += QtWheelDelta(event);
82  m_animationTimer->start();
83 }
84 
85 
86 
88  : QScrollArea(parent),
89  m_initialized(true),
90  m_previousValue(0),
91  m_deltaValue(0),
92  m_scrollBar(nullptr),
93  m_slowAnimation(nullptr)
94 {
95  m_animationTimer = new QTimer(this);
96  m_animationTimer->setInterval(100 * TTK_DN_MS);
97 
98  setWidgetResizable(true);
99  setFrameShape(QFrame::NoFrame);
100  setAlignment(Qt::AlignLeft);
101 
102  verticalScrollBar()->setStyleSheet(TTK::UI::ScrollBarStyle03);
103 
104  connect(m_animationTimer, SIGNAL(timeout()), SLOT(timeToAnimation()));
105 }
106 
108 {
109  m_animationTimer->stop();
110  delete m_animationTimer;
111  delete m_slowAnimation;
112 }
113 
115 {
116  m_scrollBar = (bar == nullptr) ? verticalScrollBar() : bar;
117  delete m_slowAnimation;
118  m_slowAnimation = new QPropertyAnimation(m_scrollBar, "value", this);
119  m_slowAnimation->setDuration(TTK_DN_S2MS);
120  connect(m_scrollBar, SIGNAL(valueChanged(int)), SLOT(valueChanged(int)));
121 }
122 
124 {
125  if(!m_slowAnimation)
126  {
127  return;
128  }
129 
130  m_initialized = true;
131  m_animationTimer->stop();
132 
133  m_deltaValue = (m_deltaValue / 480.0) * (m_deltaValue < 0 ? m_deltaValue + 120 : -m_deltaValue + 120);
134 
135  m_slowAnimation->setStartValue(m_previousValue);
136  m_slowAnimation->setEndValue(m_scrollBar->value() + m_deltaValue * TTK_ITEM_SIZE_M / 30);
137  m_slowAnimation->start();
138 }
139 
141 {
142  m_previousValue = value;
143 }
144 
146 {
147  QScrollArea::wheelEvent(event);
148 
149  if(!m_slowAnimation)
150  {
151  return;
152  }
153 
154  m_animationTimer->stop();
155  m_slowAnimation->stop();
156 
157  if(m_initialized)
158  {
159  m_deltaValue = 0;
160  m_previousValue = m_scrollBar->value();
161  m_initialized = false;
162  }
163 
164  m_deltaValue += QtWheelDelta(event);
165  m_animationTimer->start();
166 }
The class of the table widget base.
void setMovedScrollBar(QScrollBar *bar=nullptr)
void setMovedScrollBar(QScrollBar *bar=nullptr)
static const QString ScrollBarStyle03
#define QtWheelDelta(p)
Event wheel.
Definition: ttkqtcompat.h:136
virtual void wheelEvent(QWheelEvent *event) overridefinal
#define TTK_DN_S2MS
Definition: ttkglobal.h:276
virtual void wheelEvent(QWheelEvent *event) override
MusicSmoothMovingTableWidget(QWidget *parent=nullptr)
MusicSmoothMovingScrollArea(QWidget *parent=nullptr)
#define TTK_ITEM_SIZE_M
Definition: ttkglobal.h:242
#define TTK_DN_MS
Definition: ttkglobal.h:270