TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicitemquerytablewidget.cpp
Go to the documentation of this file.
4 #include "musictoastlabel.h"
5 #include "musicconnectionpool.h"
6 #include "musicrightareawidget.h"
7 
9  : MusicQueryTableWidget(parent)
10 {
11  setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
12  setColumnCount(8);
13 
14  QHeaderView *headerView = horizontalHeader();
15  headerView->resizeSection(0, 30);
16  headerView->resizeSection(1, 342);
17  headerView->resizeSection(2, 110);
18  headerView->resizeSection(3, 47);
19  headerView->resizeSection(4, 26);
20  headerView->resizeSection(5, 26);
21  headerView->resizeSection(6, 26);
22  headerView->resizeSection(7, 26);
23 
24  G_CONNECTION_PTR->setValue(MusicQueryTableWidget::className(), this);
25  G_CONNECTION_PTR->connect(MusicQueryTableWidget::className(), MusicSongsContainerWidget::className());
26 }
27 
29 {
30  G_CONNECTION_PTR->removeValue(this);
31  removeItems();
32 }
33 
35 {
36  if(!G_NETWORK_PTR->isOnline())
37  {
38  removeItems();
39  return;
40  }
41 
44 }
45 
47 {
48  if(!isValid(row))
49  {
50  return;
51  }
52 
53  MusicDownloadWidget *widget = new MusicDownloadWidget(this);
54  widget->initialize(m_networkRequest, row);
55  widget->show();
56 }
57 
59 {
60  if(column <= 0 || row < 0 || row >= rowCount() - 1)
61  {
62  return;
63  }
64 
65  addSearchMusicToPlaylist(row, true);
66 }
67 
69 {
70  const TTK::MusicSongInformationList songInfos(m_networkRequest->items());
71  const TTKIntList &list = checkedIndexList();
72  if(list.isEmpty())
73  {
74  MusicToastLabel::popup(tr("Please select one item first"));
75  return;
76  }
77 
78  for(int i = 0; i < list.count(); ++i)
79  {
80  if(downloadDataFrom(songInfos[list[i]], play && (i == 0)))
81  {
82  continue;
83  }
84  }
85 }
86 
88 {
89  const TTKIntList &list = checkedIndexList();
90  if(list.isEmpty())
91  {
92  MusicToastLabel::popup(tr("Please select one item first"));
93  return;
94  }
95 
97  widget.initialize(m_networkRequest, list);
98  widget.exec();
99 }
100 
102 {
103  const int width = G_SETTING_PTR->value(MusicSettingManager::WidgetSize).toSize().width();
104  QHeaderView *headerView = horizontalHeader();
105  headerView->resizeSection(1, 342 + (width - WINDOW_WIDTH_MIN) / 2.0);
106  headerView->resizeSection(2, 110 + (width - WINDOW_WIDTH_MIN) / 2.0);
107 
108  for(int i = 0; i < rowCount(); ++i)
109  {
110  QTableWidgetItem *it = item(i, 1);
111  it->setText(TTK::Widget::elidedText(font(), it->toolTip(), Qt::ElideRight, headerView->sectionSize(1) - 31));
112 
113  it = item(i, 2);
114  it->setText(TTK::Widget::elidedText(font(), it->toolTip(), Qt::ElideRight, headerView->sectionSize(2) - 31));
115  }
116 }
117 
119 {
120  const int row = currentRow();
121  const TTK::MusicSongInformationList songInfos(m_networkRequest->items());
122  if(!isValid(row) || row >= songInfos.count())
123  {
124  return;
125  }
126 
127  const TTK::MusicSongInformation &info = songInfos[row];
128  switch(action->data().toInt())
129  {
130  case 0: addSearchMusicToPlaylist(row, true); break;
131  case 1: addSearchMusicToPlaylist(row, false); break;
132  case 2: downloadQueryResult(row); break;
136  case 6: MusicRightAreaWidget::instance()->showSongSearchedFound(item(row, 1)->toolTip()); break;
137  default: break;
138  }
139 }
140 
141 void MusicItemQueryTableWidget::resizeEvent(QResizeEvent *event)
142 {
144  resizeSection();
145 }
146 
147 void MusicItemQueryTableWidget::contextMenuEvent(QContextMenuEvent *event)
148 {
149  MusicQueryTableWidget::contextMenuEvent(event);
150 
151  QMenu menu;
152  menu.setStyleSheet(TTK::UI::MenuStyle02);
153 
154  const int row = currentRow();
155  const TTK::MusicSongInformationList songInfos(m_networkRequest->items());
156  if(!isValid(row) || row >= songInfos.count())
157  {
158  return;
159  }
160 
161  menu.addAction(QIcon(":/contextMenu/btn_play"), tr("Play"))->setData(0);
162  menu.addAction(tr("Add to list"))->setData(1);
163  menu.addAction(tr("Download More..."))->setData(2);
164 
165  menu.addSeparator();
166 
167  const TTK::MusicSongInformation &info = songInfos[row];
168  menu.addAction(tr("Search '%1'").arg(info.m_artistName))->setData(3);
169  menu.addAction(tr("Search '%1'").arg(info.m_songName))->setData(4);
170  menu.addAction(tr("Search '%1'").arg(info.m_albumName))->setData(5);
171  menu.addAction(tr("Search '%1 - %2'").arg(info.m_artistName, info.m_songName))->setData(6);
172  connect(&menu, SIGNAL(triggered(QAction*)), SLOT(menuActionChanged(QAction*)));
173 
174  menu.exec(QCursor::pos());
175 }
176 
178 {
180  if(column == 5 || column == 6 || column == 7)
181  {
182  setCursor(QCursor(Qt::PointingHandCursor));
183  }
184  else
185  {
186  unsetCursor();
187  }
188 }
189 
191 {
193 
194  switch(column)
195  {
196  case 5: addSearchMusicToPlaylist(row, true); break;
197  case 6: addSearchMusicToPlaylist(row, false); break;
198  case 7: downloadQueryResult(row); break;
199  default: break;
200  }
201 }
202 
204 {
206  setColumnCount(8);
207 }
208 
210 {
211  const int count = rowCount();
212  setRowCount(count + 1);
213 
214  QHeaderView *headerView = horizontalHeader();
215  QTableWidgetItem *item = new QTableWidgetItem;
216  item->setData(TTK_CHECKED_ROLE, Qt::Unchecked);
217  setItem(count, 0, item);
218 
219  item = new QTableWidgetItem;
220  item->setToolTip(TTK::generateSongName(songItem.m_songName, songItem.m_artistName));
221  item->setText(TTK::Widget::elidedText(font(), item->toolTip(), Qt::ElideRight, headerView->sectionSize(1) - 31));
222  item->setForeground(QColor(TTK::UI::Color02));
223  QtItemSetTextAlignment(item, Qt::AlignLeft | Qt::AlignVCenter);
224  setItem(count, 1, item);
225 
226  item = new QTableWidgetItem;
227  item->setToolTip(songItem.m_albumName);
228  item->setText(TTK::Widget::elidedText(font(), item->toolTip(), Qt::ElideRight, headerView->sectionSize(2) - 31));
229  item->setForeground(QColor(TTK::UI::Color02));
230  QtItemSetTextAlignment(item, Qt::AlignLeft | Qt::AlignVCenter);
231  setItem(count, 2, item);
232 
233  item = new QTableWidgetItem(songItem.m_duration);
234  item->setForeground(QColor(TTK::UI::Color02));
235  QtItemSetTextAlignment(item, Qt::AlignLeft | Qt::AlignVCenter);
236  setItem(count, 3, item);
237 
238  item = new QTableWidgetItem;
239  item->setIcon(QIcon(":/tiny/lb_server_type"));
240  item->setToolTip(songItem.m_type);
241  setItem(count, 4, item);
242 
243  item = new QTableWidgetItem;
244  item->setIcon(QIcon(":/contextMenu/btn_play"));
245  setItem(count, 5, item);
246 
247  item = new QTableWidgetItem;
248  item->setIcon(QIcon(":/contextMenu/btn_add"));
249  setItem(count, 6, item);
250 
251  item = new QTableWidgetItem;
252  item->setIcon(QIcon(":/contextMenu/btn_download"));
253  setItem(count, 7, item);
254 
255  setFixedHeight(rowHeight(0) * (rowCount() + 1));
256 }
257 
259 {
260  if(!isValid(row))
261  {
262  MusicToastLabel::popup(tr("Please select one item first"));
263  return;
264  }
265 
266  const TTK::MusicSongInformationList songInfos(m_networkRequest->items());
267  if(row >= songInfos.count())
268  {
269  return;
270  }
271 
272  downloadDataFrom(songInfos[row], play);
273 }
274 
276 {
277  if(!G_NETWORK_PTR->isOnline())
278  {
279  MusicToastLabel::popup(tr("No resource found"));
280  return false;
281  }
282 
283  TTK::MusicSongInformation songInfo;
284  songInfo.m_songId = info.m_songId;
286 
287  if(songInfo.m_songProps.isEmpty())
288  {
289  MusicToastLabel::popup(tr("No resource found"));
290  return false;
291  }
292 
293  const TTK::MusicSongProperty &prop = songInfo.m_songProps.front();
294 
295  MusicResultDataItem item;
297  item.m_updateTime = info.m_duration;
298  item.m_id = info.m_songId;
299  item.m_nickName = prop.m_url;
300  item.m_description = prop.m_format;
301  item.m_count = prop.m_size;
303 
304  if(m_networkRequest)
305  {
306  item.m_id = m_networkRequest->queryServer() + item.m_id;
307  }
308 
309  Q_EMIT songBufferToPlaylist(item);
310  return true;
311 }
static MusicRightAreaWidget * instance()
The class of the download batch widget.
TTK_MODULE_EXPORT QString generateSongName(const QString &title, const QString &artist)
Definition: musicsong.cpp:112
void addSearchMusicToPlaylist(int row, bool play)
The class of the search result data item.
The class of the download widget.
void initialize(MusicAbstractQueryRequest *request, int row)
virtual void resizeEvent(QResizeEvent *event) override
The class of the music song property.
Definition: musicobject.h:223
MusicSongPropertyList m_songProps
Definition: musicobject.h:295
void songBufferToPlaylist(const MusicResultDataItem &item)
#define QtItemSetTextAlignment(p, a)
Item text alignment.
Definition: ttkqtcompat.h:45
static constexpr unsigned int Color02
Definition: musicuiobject.h:34
#define G_CONNECTION_PTR
void showSongSearchedFound(const QString &text)
virtual void itemCellClicked(int row, int column) override
static void popup(const QString &text)
virtual void startToQueryResult(TTK::MusicSongInformation *info, int bitrate)
#define MUSIC_PLAY_NOW
virtual void itemDoubleClicked(int row, int column) override
QList< int > TTKIntList
Definition: ttkqtglobal.h:188
virtual void itemCellEntered(int row, int column) overridefinal
void showArtistFound(const QString &text, const QString &id)
void initialize(MusicAbstractQueryRequest *request, const TTKIntList &items)
virtual void removeItems() overridefinal
MusicItemQueryTableWidget(QWidget *parent=nullptr)
TTK_MODULE_EXPORT QString elidedText(const QFont &font, const QString &text, Qt::TextElideMode mode, int width)
virtual void itemCellEntered(int row, int column)
void showAlbumFound(const QString &text, const QString &id)
static const QString MenuStyle02
virtual void contextMenuEvent(QContextMenuEvent *event) override
virtual void downloadQueryResult(int row) override
virtual void removeItems() override
The class of the search result info item.
#define MUSIC_PLAY_LATER
#define G_NETWORK_PTR
virtual void startToSearchByText(const QString &text) overridefinal
virtual void resizeEvent(QResizeEvent *event) overridefinal
#define WINDOW_WIDTH_MIN
Definition: musicobject.h:153
The class of the query table widget.
virtual void createResultItem(const MusicResultInfoItem &songItem) override
virtual void itemCellClicked(int row, int column) override
virtual void startToSearch(const QString &value)=0
const TTK::MusicSongInformationList & items() const
MusicAbstractQueryRequest * m_networkRequest
#define TTK_CHECKED_ROLE
The class of the music song information.
Definition: musicobject.h:281
#define TTK_BN_128
Definition: ttkglobal.h:348
#define G_SETTING_PTR