TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicfuntionanimationwidget.cpp
Go to the documentation of this file.
4 #include "musicimageutils.h"
5 #include "musicwidgetheaders.h"
6 
7 #include <qmath.h>
8 
9 #include <QButtonGroup>
10 #include <QPropertyAnimation>
11 
13  : QWidget(parent)
14 {
15 
16 }
17 
19 {
20  m_backgroundAlpha = TTK::Image::reRenderValue<int>(0xFF, 0x10, TTK_RN_MAX - value);
21  update();
22 }
23 
24 void MusicBackgroundWidget::paintEvent(QPaintEvent *event)
25 {
26  QWidget::paintEvent(event);
27 
28  QPainter painter(this);
29  painter.fillRect(rect(), QColor(255, 255, 255, m_backgroundAlpha));
30 }
31 
32 
33 
35  : QWidget(parent)
36 {
37  m_transparent = false;
38 }
39 
41 {
43  update();
44 }
45 
46 void MusicLineBackgroundWidget::paintEvent(QPaintEvent *event)
47 {
48  QWidget::paintEvent(event);
49 
50  QPainter painter(this);
51  painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
52  painter.setPen(QPen(QBrush(QColor(0, 0, 0)), 0.1, Qt::SolidLine));
53 
54  if(!m_transparent)
55  {
56  painter.fillRect(rect(), Qt::white);
57  painter.drawLine(0, height(), width(), height());
58  }
59 }
60 
61 
62 
64  : QWidget(parent),
65  m_pix(":/toolSets/btn_arrow_normal"),
66  m_curIndex(0),
67  m_preIndex(0),
68  m_x(0),
69  m_perWidth(0.0f),
70  m_totalWidth(0.0f),
71  m_isAnimation(true),
72  m_showState(true),
73  m_showLine(true)
74 {
75  m_animation = new QPropertyAnimation(this, {});
76  m_animation->setDuration(100);
77 
78  connect(m_animation, SIGNAL(valueChanged(QVariant)), SLOT(animationChanged(QVariant)));
79  connect(m_animation, SIGNAL(finished()), SLOT(finished()));
80 
81  QHBoxLayout *layout = new QHBoxLayout(this);
82  layout->setContentsMargins(0, 0, 0, 0);
83  layout->setSpacing(0);
84  setLayout(layout);
85 
86  m_buttonGroup = new QButtonGroup(this);
88 }
89 
91 {
92  qDeleteAll(m_container);
93  delete m_animation;
94  delete m_buttonGroup;
95 }
96 
98 {
99  QWidget::paintEvent(event);
100 
101  if(m_showState)
102  {
103  m_perWidth = m_container[0]->width() + m_container[0]->x();
104 
105  QPainter painter(this);
106  painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
107  painter.setPen(QPen(QBrush(QColor(0, 0, 0)), 0.1, Qt::SolidLine));
108 
109  int offset = m_perWidth - (m_container[0]->width() + m_pix.width()) / 2;
110  offset = m_isAnimation ? (offset + m_x) : (offset + m_curIndex * m_perWidth);
111  if(m_showLine)
112  {
113  painter.drawLine(0, height(), offset, height());
114  painter.drawLine(offset + m_pix.width(), height(), m_totalWidth, height());
115  }
116  painter.drawPixmap(offset, height() - m_pix.height(), m_pix);
117  }
118 }
119 
121 {
122  m_isAnimation = true;
124  m_curIndex = index;
125  m_animation->setStartValue(m_preIndex * m_perWidth);
126  m_animation->setEndValue(index * m_perWidth);
127  m_animation->start();
128 
129  Q_EMIT buttonClicked(index);
130 }
131 
133 {
134  m_x = value.toInt();
135  update();
136 }
137 
139 {
140  m_isAnimation = false;
141 }
142 
143 
144 
147 {
148  QHBoxLayout *ly = TTKObjectCast(QHBoxLayout*, layout());
149 
150  QStringList names;
151  names << tr("Playlist") << tr("Local") << tr("Cloud") << tr("Radio") << tr("Download");
152  for(int i = 0; i < names.count(); ++i)
153  {
154  QToolButton *btn = new QToolButton(this);
155  btn->setToolTip(names[i]);
156  btn->setFixedSize(20, 20);
157  btn->setFocusPolicy(Qt::ClickFocus);
158  btn->setCursor(Qt::PointingHandCursor);
159  ly->addWidget(btn);
160  m_buttonGroup->addButton(btn, i);
161  m_container << btn;
162  }
163 
165 }
166 
168 {
169  m_totalWidth = width();
171 }
172 
174 {
175  m_container[0]->setStyleSheet(TTK::UI::ItemMusic);
176  m_container[1]->setStyleSheet(TTK::UI::ItemLocal);
177  m_container[2]->setStyleSheet(TTK::UI::ItemCloud);
178  m_container[3]->setStyleSheet(TTK::UI::ItemRadio);
179  m_container[4]->setStyleSheet(TTK::UI::ItemDownload);
180 
181  switch(index)
182  {
183  case 0: m_container[0]->setStyleSheet(TTK::UI::ItemMusicClicked); break;
184  case 1: m_container[1]->setStyleSheet(TTK::UI::ItemLocalClicked); break;
185  case 2: m_container[2]->setStyleSheet(TTK::UI::ItemCloudClicked); break;
186  case 3: m_container[3]->setStyleSheet(TTK::UI::ItemRadioClicked); break;
187  case 4: m_container[4]->setStyleSheet(TTK::UI::ItemDownloadClicked); break;
188  default: break;
189  }
190 
192 }
193 
194 
195 
198 {
199  m_pix = QPixmap(54, 2);
200  m_pix.fill(QColor(0x80, 0xB7, 0xF1));
201  m_showLine = false;
202 
203  QHBoxLayout *ly = TTKObjectCast(QHBoxLayout*, layout());
204 
205  for(int i = 0; i < 6; ++i)
206  {
207  QToolButton *btn = new QToolButton(this);
208  btn->setFixedSize(54, 23);
209  btn->setFocusPolicy(Qt::ClickFocus);
210  btn->setCursor(Qt::PointingHandCursor);
211  ly->addWidget(btn);
212  m_buttonGroup->addButton(btn, i);
213  m_container << btn;
214  }
215 
217 }
218 
220 {
221  m_container[0]->setStyleSheet(fore ? TTK::UI::FuncSongFore : TTK::UI::FuncSongBack);
222  m_container[1]->setStyleSheet(fore ? TTK::UI::FuncRadioFore : TTK::UI::FuncRadioBack);
223  m_container[2]->setStyleSheet(fore ? TTK::UI::FuncListFore : TTK::UI::FuncListBack);
224  m_container[3]->setStyleSheet(fore ? TTK::UI::FuncMVFore : TTK::UI::FuncMVBack);
225  m_container[4]->setStyleSheet(fore ? TTK::UI::FuncLiveFore : TTK::UI::FuncLiveBack);
226  m_container[5]->setStyleSheet(TTK::UI::FuncLrcFore);
227 }
228 
230 {
231  switch(index)
232  {
233  case 0: m_container[0]->setStyleSheet(TTK::UI::FuncSongForeClicked); break;
234  case 1: m_container[1]->setStyleSheet(TTK::UI::FuncRadioForeClicked); break;
235  case 2: m_container[2]->setStyleSheet(TTK::UI::FuncListForeClicked); break;
236  case 3: m_container[3]->setStyleSheet(TTK::UI::FuncMVForeClicked); break;
237  case 4: m_container[4]->setStyleSheet(TTK::UI::FuncLiveForeClicked); break;
238  case 5: m_container[5]->setStyleSheet(TTK::UI::FuncLrcForeClicked); break;
239  default: break;
240  }
241 }
242 
244 {
245  m_totalWidth = width();
247 }
248 
250 {
252  m_showState = (index != 5);
253  update();
254 }
255 
256 
257 
260 {
261  QHBoxLayout *ly = TTKObjectCast(QHBoxLayout*, layout());
262 
263  QStringList names;
264  names << tr("Recommend") << tr("Stack") << tr("Daily") << tr("Online");
265  for(int i = 0; i < names.count(); ++i)
266  {
267  QToolButton *btn = new QToolButton(this);
268  btn->setText(names[i]);
269  btn->setFixedSize(80, 30);
270  btn->setFocusPolicy(Qt::ClickFocus);
271  btn->setCursor(Qt::PointingHandCursor);
272  ly->addWidget(btn);
273  m_buttonGroup->addButton(btn, i);
274  m_container << btn;
275  }
276  ly->addStretch(1);
277 
279 }
280 
281 void MusicSkinAnimationWidget::paintEvent(QPaintEvent *event)
282 {
283  m_totalWidth = width();
285 }
286 
288 {
289  for(QWidget *widget : qAsConst(m_container))
290  {
291  widget->setStyleSheet(TTK::UI::ColorStyle03 + TTK::UI::BackgroundStyle01);
292  }
293 
294  if(index < 0 || index >= m_container.count())
295  {
296  return;
297  }
298 
301 }
static constexpr const char * FuncListForeClicked
static constexpr const char * FuncMVFore
static constexpr const char * FuncRadioFore
MusicOptionAnimationWidget(QWidget *parent=nullptr)
static constexpr const char * FuncMVBack
static constexpr const char * ItemRadio
MusicAbstractAnimationWidget(QWidget *parent=nullptr)
static constexpr const char * FuncLrcForeClicked
static constexpr const char * FuncSongBack
static constexpr const char * ItemDownload
virtual void paintEvent(QPaintEvent *event) override
virtual void paintEvent(QPaintEvent *event) overridefinal
static constexpr const char * FuncRadioForeClicked
static constexpr const char * ItemDownloadClicked
static constexpr const char * ItemRadioClicked
virtual void switchToSelectedItemStyle(int index) overridefinal
#define TTK_RN_MAX
Definition: ttkglobal.h:359
static constexpr const char * FuncSongForeClicked
virtual void paintEvent(QPaintEvent *event) overridefinal
MusicFuntionAnimationWidget(QWidget *parent=nullptr)
voidpf uLong offset
Definition: ioapi.h:142
MusicBackgroundWidget(QWidget *parent=nullptr)
#define qAsConst
Definition: ttkqtglobal.h:53
static constexpr const char * FuncLrcFore
static constexpr const char * ItemMusic
static constexpr const char * ItemLocalClicked
static constexpr const char * FuncListBack
MusicSkinAnimationWidget(QWidget *parent=nullptr)
virtual void paintEvent(QPaintEvent *event) overridefinal
static constexpr const char * FuncSongFore
static const QString BackgroundStyle01
Background.
Definition: musicuiobject.h:77
virtual void switchToSelectedItemStyle(int index) overridefinal
static constexpr const char * FuncLiveBack
static constexpr const char * ItemCloud
static constexpr const char * FuncListFore
MusicLineBackgroundWidget(QWidget *parent=nullptr)
#define TTK_SLOT
Definition: ttkqtglobal.h:165
virtual void switchToSelectedItemStyle(int index)
#define QtButtonGroupConnect(p, q, f, s)
Button group connect.
Definition: ttkqtcompat.h:101
static constexpr const char * FuncLiveForeClicked
static constexpr const char * FuncRadioBack
static constexpr const char * ItemLocal
static const QString ColorStyle07
Definition: musicuiobject.h:55
virtual void paintEvent(QPaintEvent *event) overridefinal
static const QString ColorStyle03
Definition: musicuiobject.h:43
void buttonClicked(int index)
static constexpr const char * FuncLiveFore
static constexpr const char * ItemCloudClicked
static constexpr const char * ItemMusicClicked
virtual void paintEvent(QPaintEvent *event) overridefinal
virtual void switchToSelectedItemStyle(int index) overridefinal
The class of the animation base widget.
static constexpr const char * FuncMVForeClicked
state
Definition: http_parser.c:279
void animationChanged(const QVariant &value)
#define TTKObjectCast(x, y)
Definition: ttkqtglobal.h:60