TTKMusicPlayer  4.3.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 <QButtonGroup>
8 #include <QPropertyAnimation>
9 
11  : QWidget(parent)
12 {
13 
14 }
15 
17 {
18  m_backgroundTransparent = TTK::Image::boundValue<int>(0xFF, 0x10, TTK_RN_MAX - value);
19  update();
20 }
21 
22 void MusicBackgroundWidget::paintEvent(QPaintEvent *event)
23 {
24  QWidget::paintEvent(event);
25 
26  QPainter painter(this);
27  painter.setRenderHint(QPainter::Antialiasing);
28  painter.fillRect(rect(), QColor(255, 255, 255, m_backgroundTransparent));
29 }
30 
31 
32 
34  : QWidget(parent)
35 {
36  m_transparent = false;
37 }
38 
40 {
42  update();
43 }
44 
45 void MusicLineBackgroundWidget::paintEvent(QPaintEvent *event)
46 {
47  QWidget::paintEvent(event);
48 
49  QPainter painter(this);
50  painter.setRenderHint(QPainter::Antialiasing);
51  painter.setPen(QPen(Qt::black, 0.1, Qt::SolidLine));
52 
53  if(!m_transparent)
54  {
55  painter.fillRect(rect(), Qt::white);
56  painter.drawLine(0, height(), width(), height());
57  }
58 }
59 
60 
61 
63  : QWidget(parent),
64  m_pix(":/toolSets/btn_arrow_normal"),
65  m_curIndex(0),
66  m_preIndex(0),
67  m_x(0),
68  m_perWidth(0.0f),
69  m_totalWidth(0.0f),
70  m_isAnimation(true),
71  m_showState(true),
72  m_showLine(true)
73 {
74  m_animation = new QPropertyAnimation(this, {});
75  m_animation->setDuration(100);
76 
77  connect(m_animation, SIGNAL(valueChanged(QVariant)), SLOT(animationChanged(QVariant)));
78  connect(m_animation, SIGNAL(finished()), SLOT(finished()));
79 
80  QHBoxLayout *layout = new QHBoxLayout(this);
81  layout->setContentsMargins(0, 0, 0, 0);
82  layout->setSpacing(0);
83  setLayout(layout);
84 
85  m_buttonGroup = new QButtonGroup(this);
87 }
88 
90 {
91  qDeleteAll(m_container);
92  delete m_animation;
93  delete m_buttonGroup;
94 }
95 
97 {
98  QWidget::paintEvent(event);
99 
100  if(m_showState)
101  {
102  m_perWidth = m_container[0]->width() + m_container[0]->x();
103 
104  QPainter painter(this);
105  painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
106  painter.setPen(QPen(Qt::black, 0.1, Qt::SolidLine));
107 
108  int offset = m_perWidth - (m_container[0]->width() + m_pix.width()) / 2;
109  offset = m_isAnimation ? (offset + m_x) : (offset + m_curIndex * m_perWidth);
110  if(m_showLine)
111  {
112  painter.drawLine(0, height(), offset, height());
113  painter.drawLine(offset + m_pix.width(), height(), m_totalWidth, height());
114  }
115  painter.drawPixmap(offset, height() - m_pix.height(), m_pix);
116  }
117 }
118 
120 {
121  m_isAnimation = true;
123  m_curIndex = index;
124  m_animation->setStartValue(m_preIndex * m_perWidth);
125  m_animation->setEndValue(index * m_perWidth);
126  m_animation->start();
127 
128  Q_EMIT buttonClicked(index);
129 }
130 
132 {
133  m_x = value.toInt();
134  update();
135 }
136 
138 {
139  m_isAnimation = false;
140 }
141 
142 
143 
146 {
147  QHBoxLayout *ly = TTKObjectCast(QHBoxLayout*, layout());
148 
149  QStringList names;
150  names << tr("Playlist") << tr("Local") << tr("Cloud") << tr("Radio") << tr("Download");
151  for(int i = 0; i < names.count(); ++i)
152  {
153  QToolButton *btn = new QToolButton(this);
154  btn->setToolTip(names[i]);
155  btn->setFixedSize(20, 20);
156  btn->setFocusPolicy(Qt::ClickFocus);
157  btn->setCursor(Qt::PointingHandCursor);
158  ly->addWidget(btn);
159  m_buttonGroup->addButton(btn, i);
160  m_container << btn;
161  }
162 
164 }
165 
167 {
168  m_totalWidth = width();
170 }
171 
173 {
174  m_container[0]->setStyleSheet(TTK::UI::ItemMusic);
175  m_container[1]->setStyleSheet(TTK::UI::ItemLocal);
176  m_container[2]->setStyleSheet(TTK::UI::ItemCloud);
177  m_container[3]->setStyleSheet(TTK::UI::ItemRadio);
178  m_container[4]->setStyleSheet(TTK::UI::ItemDownload);
179 
180  switch(index)
181  {
182  case 0: m_container[0]->setStyleSheet(TTK::UI::ItemMusicClicked); break;
183  case 1: m_container[1]->setStyleSheet(TTK::UI::ItemLocalClicked); break;
184  case 2: m_container[2]->setStyleSheet(TTK::UI::ItemCloudClicked); break;
185  case 3: m_container[3]->setStyleSheet(TTK::UI::ItemRadioClicked); break;
186  case 4: m_container[4]->setStyleSheet(TTK::UI::ItemDownloadClicked); break;
187  default: break;
188  }
189 
191 }
192 
193 
194 
197 {
198  m_pix = QPixmap(54, 2);
199  m_pix.fill(QColor(0x80, 0xB7, 0xF1));
200  m_showLine = false;
201 
202  QHBoxLayout *ly = TTKObjectCast(QHBoxLayout*, layout());
203 
204  for(int i = 0; i < 6; ++i)
205  {
206  QToolButton *btn = new QToolButton(this);
207  btn->setFixedSize(54, 23);
208  btn->setFocusPolicy(Qt::ClickFocus);
209  btn->setCursor(Qt::PointingHandCursor);
210  ly->addWidget(btn);
211  m_buttonGroup->addButton(btn, i);
212  m_container << btn;
213  }
214 
216 }
217 
219 {
220  m_container[0]->setStyleSheet(fore ? TTK::UI::FuncSongFore : TTK::UI::FuncSongBack);
221  m_container[1]->setStyleSheet(fore ? TTK::UI::FuncRadioFore : TTK::UI::FuncRadioBack);
222  m_container[2]->setStyleSheet(fore ? TTK::UI::FuncListFore : TTK::UI::FuncListBack);
223  m_container[3]->setStyleSheet(fore ? TTK::UI::FuncLiveFore : TTK::UI::FuncLiveBack);
224  m_container[4]->setStyleSheet(fore ? TTK::UI::FuncMVFore : TTK::UI::FuncMVBack);
225  m_container[5]->setStyleSheet(TTK::UI::FuncLrcFore);
226 }
227 
229 {
230  switch(index)
231  {
232  case 0: m_container[0]->setStyleSheet(TTK::UI::FuncSongForeClicked); break;
233  case 1: m_container[1]->setStyleSheet(TTK::UI::FuncRadioForeClicked); break;
234  case 2: m_container[2]->setStyleSheet(TTK::UI::FuncListForeClicked); break;
235  case 3: m_container[3]->setStyleSheet(TTK::UI::FuncLiveForeClicked); break;
236  case 4: m_container[4]->setStyleSheet(TTK::UI::FuncMVForeClicked); break;
237  case 5: m_container[5]->setStyleSheet(TTK::UI::FuncLrcForeClicked); break;
238  default: break;
239  }
240 }
241 
243 {
244  m_totalWidth = width();
246 }
247 
249 {
251  m_showState = (index != 5);
252  update();
253 }
254 
255 
256 
259 {
260  QHBoxLayout *ly = TTKObjectCast(QHBoxLayout*, layout());
261 
262  QStringList names;
263  names << tr("Recommend") << tr("Stack") << tr("Daily") << tr("Online");
264  for(int i = 0; i < names.count(); ++i)
265  {
266  QToolButton *btn = new QToolButton(this);
267  btn->setText(names[i]);
268  btn->setFixedSize(80, 30);
269  btn->setFocusPolicy(Qt::ClickFocus);
270  btn->setCursor(Qt::PointingHandCursor);
271  ly->addWidget(btn);
272  m_buttonGroup->addButton(btn, i);
273  m_container << btn;
274  }
275  ly->addStretch(1);
276 
278 }
279 
280 void MusicSkinAnimationWidget::paintEvent(QPaintEvent *event)
281 {
282  m_totalWidth = width();
284 }
285 
287 {
288  for(QWidget *widget : qAsConst(m_container))
289  {
290  widget->setStyleSheet(TTK::UI::ColorStyle03 + TTK::UI::BackgroundStyle01);
291  }
292 
293  if(index < 0 || index >= m_container.count())
294  {
295  return;
296  }
297 
300 }
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:439
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:57
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:177
virtual void switchToSelectedItemStyle(int index)
#define QtButtonGroupConnect(p, q, f, s)
Button group connect.
Definition: ttkqtcompat.h:115
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:82