TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicwebdjradioquerywidget.cpp
Go to the documentation of this file.
3 #include "musictinyuiobject.h"
4 #include "musicpagequerywidget.h"
6 #include "musiccoverrequest.h"
8 
9 static constexpr int WIDTH_LABEL_SIZE = 150;
10 static constexpr int HEIGHT_LABEL_SIZE = 200;
11 static constexpr int LINE_SPACING_SIZE = 200;
12 
14  : QLabel(parent)
15 {
16  setFixedSize(WIDTH_LABEL_SIZE, HEIGHT_LABEL_SIZE);
17 
18  m_playButton = new QPushButton(this);
19  m_playButton->setGeometry(110, 110, 30, 30);
20  m_playButton->setCursor(Qt::PointingHandCursor);
21  m_playButton->setStyleSheet(TTK::UI::TinyBtnPlaylist);
22  connect(m_playButton, SIGNAL(clicked()), SLOT(currentItemClicked()));
23 
24 #ifdef Q_OS_UNIX
25  m_playButton->setFocusPolicy(Qt::NoFocus);
26 #endif
27 
28  m_iconLabel = new QLabel(this);
29  m_iconLabel->setGeometry(0, 0, WIDTH_LABEL_SIZE, WIDTH_LABEL_SIZE);
30 
31  m_nameLabel = new QLabel(this);
32  m_nameLabel->setGeometry(0, 150, WIDTH_LABEL_SIZE, 25);
33  m_nameLabel->setText(TTK_DEFAULT_STR);
34 
35  m_creatorLabel = new QLabel(this);
36  m_creatorLabel->setGeometry(0, 175, WIDTH_LABEL_SIZE, 25);
37  m_creatorLabel->setText("by anonymous");
38 }
39 
41 {
42  delete m_playButton;
43  delete m_iconLabel;
44  delete m_nameLabel;
45  delete m_creatorLabel;
46 }
47 
49 {
50  m_itemData = item;
51  m_nameLabel->setToolTip(item.m_name);
52  m_nameLabel->setText(TTK::Widget::elidedText(m_nameLabel->font(), m_nameLabel->toolTip(), Qt::ElideRight, WIDTH_LABEL_SIZE));
53  m_creatorLabel->setToolTip("by " + item.m_nickName);
54  m_creatorLabel->setText(TTK::Widget::elidedText(m_creatorLabel->font(), m_creatorLabel->toolTip(), Qt::ElideRight, WIDTH_LABEL_SIZE));
55 
57  {
58  MusicCoverRequest *d = G_DOWNLOAD_QUERY_PTR->makeCoverRequest(this);
59  connect(d, SIGNAL(downLoadRawDataChanged(QByteArray)), SLOT(downLoadFinished(QByteArray)));
60  d->startToRequest(item.m_coverUrl);
61  }
62 }
63 
65 {
66  if(bytes.isEmpty())
67  {
68  TTK_ERROR_STREAM("Input byte data is empty");
69  return;
70  }
71 
72  MusicImageRenderer *render = new MusicImageRenderer(sender());
73  connect(render, SIGNAL(renderFinished(QPixmap)), SLOT(renderFinished(QPixmap)));
74  render->setInputData(bytes, m_iconLabel->size());
75  render->start();
76 }
77 
79 {
80  m_iconLabel->setPixmap(data);
81  m_playButton->raise();
82 }
83 
85 {
87 }
88 
89 
90 
93 {
94  m_container->show();
95  layout()->removeWidget(m_mainWindow);
96  layout()->addWidget(m_container);
97  m_container->addWidget(m_mainWindow);
98 
99  m_initialized = false;
100  m_infoWidget = nullptr;
101  m_gridLayout = nullptr;
102  m_pageQueryWidget = nullptr;
103 
106 }
107 
109 {
110  delete m_infoWidget;
111  delete m_gridLayout;
112  delete m_pageQueryWidget;
113 }
114 
116 {
119 }
120 
122 {
124  MusicResultDataItem item;
125  item.m_id = id;
126  currentRadioClicked(item);
127 }
128 
130 {
131  if(m_infoWidget)
132  {
134  }
135 
136  if(!m_resizeWidgets.isEmpty() && m_gridLayout)
137  {
138  for(const TTKResizeWidget &widget : qAsConst(m_resizeWidgets))
139  {
140  m_gridLayout->removeWidget(widget.m_label);
141  }
142 
143  const int lineNumber = QUERY_WIDGET_WIDTH / LINE_SPACING_SIZE;
144  for(int i = 0; i < m_resizeWidgets.count(); ++i)
145  {
146  m_gridLayout->addWidget(m_resizeWidgets[i].m_label, i / lineNumber, i % lineNumber, Qt::AlignCenter);
147  }
148  }
149 }
150 
152 {
153  if(!m_initialized)
154  {
155  delete m_statusLabel;
156  m_statusLabel = nullptr;
157 
158  m_container->removeWidget(m_mainWindow);
159  QScrollArea *scrollArea = new QScrollArea(this);
161  m_container->addWidget(scrollArea);
162 
163  m_initialized = true;
164  QVBoxLayout *mainLayout = TTKObjectCast(QVBoxLayout*, m_mainWindow->layout());
165  QWidget *containTopWidget = new QWidget(m_mainWindow);
166  QHBoxLayout *containTopLayout = new QHBoxLayout(containTopWidget);
167  containTopLayout->setContentsMargins(30, 0, 30, 0);
168  containTopLayout->addStretch(1);
169 
170  QPushButton *backButton = new QPushButton(tr("Back"), containTopWidget);
171  backButton->setFixedSize(90, 30);
172  backButton->setStyleSheet(TTK::UI::PushButtonStyle03);
173  backButton->setCursor(QCursor(Qt::PointingHandCursor));
174  connect(backButton, SIGNAL(clicked()), this, SIGNAL(backToMainMenu()));
175  containTopLayout->addWidget(backButton);
176 #ifdef Q_OS_UNIX
177  backButton->setFocusPolicy(Qt::NoFocus);
178 #endif
179  containTopWidget->setLayout(containTopLayout);
180 
181  QFrame *line = new QFrame(m_mainWindow);
182  line->setFrameShape(QFrame::HLine);
183  line->setStyleSheet(TTK::UI::ColorStyle12);
184 
185  QWidget *containWidget = new QWidget(m_mainWindow);
186  m_gridLayout = new QGridLayout(containWidget);
187  m_gridLayout->setVerticalSpacing(35);
188  containWidget->setLayout(m_gridLayout);
189 
190  mainLayout->addWidget(containTopWidget);
191  mainLayout->addWidget(line);
192  mainLayout->addWidget(containWidget);
193 
195  connect(m_pageQueryWidget, SIGNAL(clicked(int)), SLOT(buttonClicked(int)));
196 
198  mainLayout->addStretch(1);
199  }
200 
202  {
204  }
205 
207  connect(label, SIGNAL(currentItemClicked(MusicResultDataItem)), SLOT(currentRadioClicked(MusicResultDataItem)));
208  label->setResultDataItem(item);
209 
210  const int lineNumber = QUERY_WIDGET_WIDTH / LINE_SPACING_SIZE;
211  m_gridLayout->addWidget(label, m_resizeWidgets.count() / lineNumber, m_resizeWidgets.count() % lineNumber, Qt::AlignCenter);
212 
213  m_resizeWidgets.push_back({label, label->font()});
214 }
215 
217 {
218  delete m_infoWidget;
220  connect(m_infoWidget, SIGNAL(backToMainMenu()), SLOT(backToMainMenuClicked()));
222 
223  m_container->addWidget(m_infoWidget);
224  m_container->setCurrentIndex(1);
225 }
226 
228 {
229  if(!m_initialized)
230  {
231  Q_EMIT backToMainMenu();
232  return;
233  }
234  m_container->setCurrentIndex(0);
235 }
236 
238 {
239  while(!m_resizeWidgets.isEmpty())
240  {
241  QWidget *w = m_resizeWidgets.takeLast().m_label;
242  m_gridLayout->removeWidget(w);
243  delete w;
244  }
245 
248 }
The class of the dj radio music info widget.
The class of the search result data item.
void currentRadioClicked(const MusicResultDataItem &item)
virtual void setCurrentValue(const QString &value) overridefinal
static constexpr const char * TinyBtnPlaylist
#define TTK_DEFAULT_STR
Definition: ttkglobal.h:200
int pageTotalSize() const noexcept
virtual void startToRequest(const QString &url)=0
void downLoadFinished(const QByteArray &bytes)
MusicPageQueryWidget * m_pageQueryWidget
static constexpr int WIDTH_LABEL_SIZE
virtual void setCurrentValue(const QString &value)
MusicWebDJRadioInfoWidget * m_infoWidget
static const QString ColorStyle12
Definition: musicuiobject.h:70
virtual void startToSearchByID(const QString &value)
MusicWebDJRadioQueryWidget(QWidget *parent=nullptr)
The class of the wangyi query program category download data from net.
#define qAsConst
Definition: ttkqtglobal.h:53
virtual void setCurrentValue(const QString &value) overridefinal
static const QString PushButtonStyle03
virtual void resizeWidget() overridefinal
void setResultDataItem(const MusicResultDataItem &item)
static constexpr int HEIGHT_LABEL_SIZE
void setInputData(const QByteArray &data, const QSize &size)
static constexpr int LINE_SPACING_SIZE
MusicWebDJRadioQueryItemWidget(QWidget *parent=nullptr)
The class of the page query widget.
virtual void startToPage(int offset)
TTK_MODULE_EXPORT QString elidedText(const QFont &font, const QString &text, Qt::TextElideMode mode, int width)
void page(int index, int total)
void createProgramItem(const MusicResultDataItem &item)
virtual void setCurrentID(const QString &id) overridefinal
static bool isCoverValid(const QString &url)
The class of the image render thread.
The class of the item query widget base.
TTK_MODULE_EXPORT void generateVScrollAreaFormat(QWidget *widget, QWidget *parent, bool background=true)
QWidget * createPageWidget(QWidget *parent, int total)
MusicAbstractQueryRequest * m_networkRequest
#define G_DOWNLOAD_QUERY_PTR
virtual void resizeWidget() overridefinal
#define QUERY_WIDGET_WIDTH
The class of the dj radio music item widget.
The class of the cover data download request.
#define TTK_ERROR_STREAM(msg)
Definition: ttklogger.h:69
#define TTKObjectCast(x, y)
Definition: ttkqtglobal.h:60