TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicwebmvradioinfowidget.cpp
Go to the documentation of this file.
4 #include "musiccoverrequest.h"
5 #include "musicdownloadwidget.h"
6 #include "musicrightareawidget.h"
7 
8 #include <qmath.h>
9 Q_DECLARE_METATYPE(TTK::MusicSongInformation)
10 
13 {
14 
15 }
16 
18 {
19  removeItems();
20 }
21 
23 {
25  if(parent()->metaObject()->indexOfSlot("queryAllFinished()") != -1)
26  {
27  connect(m_networkRequest, SIGNAL(downLoadDataChanged(QString)), parent(), SLOT(queryAllFinished()));
28  }
29 }
30 
32 {
33  if(!isValid(row))
34  {
35  return;
36  }
37 
39 
40  MusicDownloadWidget *widget = new MusicDownloadWidget(this);
41  widget->initialize(m_networkRequest, row);
42  widget->show();
43 }
44 
46 {
48  switch(column)
49  {
50  case 5:
51  case 6:
52  {
53  const TTK::MusicSongInformationList songInfos(m_networkRequest->items());
54  if(!isValid(row) || row >= songInfos.count())
55  {
56  return;
57  }
58 
59  MusicRightAreaWidget::instance()->movieRadioSearchByID(QVariant::fromValue<TTK::MusicSongInformation>(songInfos[row]));
60  break;
61  }
62  case 7: downloadQueryResult(row); break;
63  default: break;
64  }
65 }
66 
68 {
69  Q_UNUSED(column);
70  itemCellClicked(row, 5);
71 }
72 
74 {
75  const int row = currentRow();
76  const TTK::MusicSongInformationList songInfos(m_networkRequest->items());
77  if(!isValid(row) || row >= songInfos.count())
78  {
79  return;
80  }
81 
82  switch(action->data().toInt())
83  {
84  case 0: itemCellClicked(row, 6); break;
85  case 1: itemCellClicked(row, 7); break;
86  default: break;
87  }
88 }
89 
91 {
92  MusicQueryTableWidget::contextMenuEvent(event);
93 
94  QMenu menu;
95  menu.setStyleSheet(TTK::UI::MenuStyle02);
96 
97  const int row = currentRow();
98  const TTK::MusicSongInformationList songInfos(m_networkRequest->items());
99  if(!isValid(row) || row >= songInfos.count())
100  {
101  return;
102  }
103 
104  menu.addAction(QIcon(":/contextMenu/btn_play"), tr("Play"))->setData(0);
105  menu.addAction(tr("Download More..."))->setData(1);
106  connect(&menu, SIGNAL(triggered(QAction*)), SLOT(actionChanged(QAction*)));
107 
108  menu.exec(QCursor::pos());
109 }
110 
111 
112 
115 {
116  delete m_statusLabel;
117  m_statusLabel = nullptr;
118 
120  m_queryTableWidget->hide();
121 
124  connect(d, SIGNAL(createMVRadioItem(MusicResultDataItem)), SLOT(createMVRadioProgramItem(MusicResultDataItem)));
125 }
126 
128 {
131 }
132 
134 {
136 
137  if(!m_resizeWidgets.isEmpty())
138  {
139  const int width = G_SETTING_PTR->value(MusicSettingManager::WidgetSize).toSize().width() - WINDOW_WIDTH_MIN + 390;
140 
141  TTKResizeWidget *data = &m_resizeWidgets[0];
142  data->m_label->setText(TTK::Widget::elidedText(data->m_font, data->m_label->toolTip(), Qt::ElideRight, width));
143 
144  data = &m_resizeWidgets[1];
145  data->m_label->setText(TTK::Widget::elidedText(data->m_font, data->m_label->toolTip(), Qt::ElideRight, width));
146  }
147 }
148 
150 {
152 }
153 
155 {
156  m_currentPlaylistItem = item;
157 
158  createLabels();
159 
160  if(!m_resizeWidgets.isEmpty())
161  {
162  if(TTK::isCoverValid(item.m_coverUrl))
163  {
164  MusicCoverRequest *d = G_DOWNLOAD_QUERY_PTR->makeCoverRequest(this);
165  connect(d, SIGNAL(downLoadRawDataChanged(QByteArray)), SLOT(downLoadFinished(QByteArray)));
166  d->startToRequest(item.m_coverUrl);
167  }
168 
169  const int width = G_SETTING_PTR->value(MusicSettingManager::WidgetSize).toSize().width() - WINDOW_WIDTH_MIN + 390;
170 
171  TTKResizeWidget *data = &m_resizeWidgets[0];
172  data->m_label->setToolTip(item.m_name);
173  data->m_label->setText(TTK::Widget::elidedText(data->m_font, data->m_label->toolTip(), Qt::ElideRight, width));
174 
175  data = &m_resizeWidgets[1];
176  data->m_label->setToolTip(tr("Type: %1").arg(item.m_nickName));
177  data->m_label->setText(TTK::Widget::elidedText(data->m_font, data->m_label->toolTip(), Qt::ElideRight, width));
178  }
179 }
180 
182 {
184 }
185 
187 {
188  initThirdWidget();
189  m_container->show();
190 
191  layout()->removeWidget(m_mainWindow);
192  QScrollArea *scrollArea = new QScrollArea(this);
194  layout()->addWidget(scrollArea);
195 
196  QWidget *function = new QWidget(m_mainWindow);
197  function->setStyleSheet(TTK::UI::CheckBoxStyle01 + TTK::UI::PushButtonStyle03);
198  QVBoxLayout *grid = new QVBoxLayout(function);
199 
200  QWidget *firstTopFuncWidget = new QWidget(function);
201  QHBoxLayout *firstTopFuncLayout = new QHBoxLayout(firstTopFuncWidget);
202 
203  QLabel *firstLabel = new QLabel(function);
204  firstLabel->setText(tr("<font color=#158FE1> MVRadio > %1 </font>").arg(m_currentPlaylistItem.m_name));
205 
206  QPushButton *backButton = new QPushButton(tr("Back"));
207  backButton->setFixedSize(90, 30);
208  backButton->setStyleSheet(TTK::UI::PushButtonStyle03);
209  backButton->setCursor(QCursor(Qt::PointingHandCursor));
210  connect(backButton, SIGNAL(clicked()), this, SIGNAL(backToMainMenu()));
211 
212  firstTopFuncLayout->addWidget(firstLabel);
213  firstTopFuncLayout->addWidget(backButton);
214  grid->addWidget(firstTopFuncWidget);
215  //
216  QWidget *topFuncWidget = new QWidget(function);
217  QHBoxLayout *topFuncLayout = new QHBoxLayout(topFuncWidget);
218 
219  m_iconLabel = new QLabel(topFuncWidget);
220  m_iconLabel->setPixmap(QPixmap(":/image/lb_warning").scaled(180, 180));
221  m_iconLabel->setFixedSize(210, 180);
222  //
223  QWidget *topLineWidget = new QWidget(topFuncWidget);
224  QVBoxLayout *topLineLayout = new QVBoxLayout(topLineWidget);
225  topLineLayout->setContentsMargins(10, 5, 5, 0);
226 
227  QLabel *nameLabel = new QLabel(topLineWidget);
228  QFont nameFont = nameLabel->font();
229  nameFont.setPixelSize(20);
230  nameLabel->setFont(nameFont);
231  nameLabel->setStyleSheet(TTK::UI::FontStyle01);
232  nameLabel->setText(TTK_DEFAULT_STR);
233 
234  QLabel *typeLabel = new QLabel(topLineWidget);
235  typeLabel->setStyleSheet(TTK::UI::ColorStyle04 + TTK::UI::FontStyle03);
236  typeLabel->setText(TTK_DEFAULT_STR);
237 
238  topLineLayout->addWidget(nameLabel);
239  topLineLayout->addStretch(1);
240  topLineLayout->addWidget(typeLabel);
241  topLineLayout->addStretch(5);
242  topLineWidget->setLayout(topLineLayout);
243 
244  topFuncLayout->addWidget(m_iconLabel);
245  topFuncLayout->addWidget(topLineWidget);
246  topFuncWidget->setLayout(topFuncLayout);
247  grid->addWidget(topFuncWidget);
248  //
249  QWidget *functionWidget = new QWidget(this);
250  functionWidget->setStyleSheet(TTK::UI::PushButtonStyle03);
251  QHBoxLayout *hLayout = new QHBoxLayout(functionWidget);
252 
253  m_songButton = new QPushButton(functionWidget);
254  m_songButton->setText(tr("SongItems"));
255  m_songButton->setFixedSize(100, 25);
256  m_songButton->setCursor(QCursor(Qt::PointingHandCursor));
257 
258  hLayout->addWidget(m_songButton);
259  hLayout->addStretch(1);
260  functionWidget->setLayout(hLayout);
261 
262  QButtonGroup *buttonGroup = new QButtonGroup(this);
263  buttonGroup->addButton(m_songButton, 0);
264  QtButtonGroupConnect(buttonGroup, m_container, setCurrentIndex, TTK_SLOT);
265 
266 #ifdef Q_OS_UNIX
267  backButton->setFocusPolicy(Qt::NoFocus);
268  m_songButton->setFocusPolicy(Qt::NoFocus);
269 #endif
270  grid->addWidget(functionWidget);
271  grid->addWidget(m_container);
272  grid->addStretch(1);
273 
274  function->setLayout(grid);
275  m_mainWindow->layout()->addWidget(function);
276 
277  m_resizeWidgets.push_back({nameLabel, nameLabel->font()});
278  m_resizeWidgets.push_back({typeLabel, typeLabel->font()});
279 }
280 
282 {
283  QWidget *songWidget = new QWidget(this);
284  QVBoxLayout *vLayout = new QVBoxLayout(songWidget);
285  vLayout->setSpacing(0);
286  vLayout->setContentsMargins(0, 0, 0, 0);
287 
288  QWidget *middleFuncWidget = new QWidget(songWidget);
289  middleFuncWidget->setStyleSheet(TTK::UI::PushButtonStyle03);
290  QHBoxLayout *middleFuncLayout = new QHBoxLayout(middleFuncWidget);
291  middleFuncLayout->setContentsMargins(0, 5, 0, 5);
292 
293  QLabel *marginLabel = new QLabel(middleFuncWidget);
294  marginLabel->setFixedWidth(1);
295  QCheckBox *allCheckBox = new QCheckBox(" " + tr("All"), middleFuncWidget);
296  QPushButton *downloadButton = new QPushButton(tr("Download"), middleFuncWidget);
297  downloadButton->setFixedSize(55, 25);
298  downloadButton->setCursor(QCursor(Qt::PointingHandCursor));
299 
300 #ifdef Q_OS_UNIX
301  allCheckBox->setFocusPolicy(Qt::NoFocus);
302  downloadButton->setFocusPolicy(Qt::NoFocus);
303 #endif
304 
305  middleFuncLayout->addWidget(marginLabel);
306  middleFuncLayout->addWidget(allCheckBox);
307  middleFuncLayout->addStretch(1);
308  middleFuncLayout->addWidget(downloadButton);
309  connect(allCheckBox, SIGNAL(clicked(bool)), m_queryTableWidget, SLOT(checkedItemsState(bool)));
310  connect(downloadButton, SIGNAL(clicked()), SLOT(downloadMVsButtonClicked()));
311 
312  vLayout->addWidget(middleFuncWidget);
313  vLayout->addWidget(m_queryTableWidget);
314  vLayout->addStretch(1);
315  songWidget->setLayout(vLayout);
316 
317  m_queryTableWidget->show();
318  m_container->addWidget(songWidget);
319 }
virtual void downloadQueryResult(int row) overridefinal
static MusicRightAreaWidget * instance()
virtual void setQueryInput(MusicAbstractQueryRequest *query)
The class of the search result data item.
The class of the download widget.
void initialize(MusicAbstractQueryRequest *request, int row)
#define TTK_DEFAULT_STR
Definition: ttkglobal.h:200
static const QString FontStyle03
MusicItemQueryTableWidget * m_queryTableWidget
virtual void startToRequest(const QString &url)=0
static const QString CheckBoxStyle01
CheckBox.
The class of the mv radio program request.
static const QString ColorStyle04
Definition: musicuiobject.h:46
virtual void setQueryInput(MusicAbstractQueryRequest *query) overridefinal
virtual void setCurrentValue(const QString &value)
static const QString FontStyle01
Font.
void movieRadioSearchByID(const QVariant &data)
The class of the query item table widget.
virtual void itemDoubleClicked(int row, int column) overridefinal
virtual void resizeWidget() overridefinal
static const QString PushButtonStyle03
virtual void setCurrentValue(const QString &value) overridefinal
virtual void removeItems() overridefinal
TTK_MODULE_EXPORT QString elidedText(const QFont &font, const QString &text, Qt::TextElideMode mode, int width)
#define TTK_SLOT
Definition: ttkqtglobal.h:165
MusicWebMVRadioInfoWidget(QWidget *parent=nullptr)
The class of the music mv info table widget.
void createMVRadioProgramItem(const MusicResultDataItem &item)
#define QtButtonGroupConnect(p, q, f, s)
Button group connect.
Definition: ttkqtcompat.h:101
static bool isCoverValid(const QString &url)
void downLoadFinished(const QByteArray &bytes)
The class of the item query widget base.
static const QString MenuStyle02
TTK_MODULE_EXPORT void generateVScrollAreaFormat(QWidget *widget, QWidget *parent, bool background=true)
virtual void startToSearchByText(const QString &text) overridefinal
#define WINDOW_WIDTH_MIN
Definition: musicobject.h:153
#define G_DOWNLOAD_QUERY_PTR
virtual void itemCellClicked(int row, int column) override
The class of the cover data download request.
The class of the abstract query download data from net.
virtual void contextMenuEvent(QContextMenuEvent *event) overridefinal
const TTK::MusicSongInformationList & items() const
virtual void itemCellClicked(int row, int column) overridefinal
MusicAbstractQueryRequest * m_networkRequest
The class of the music song information.
Definition: musicobject.h:281
#define G_SETTING_PTR