TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicmobilesongsmanagerwidget.cpp
Go to the documentation of this file.
2 #include "ui_musicmobilesongsmanagerwidget.h"
5 #include "musicconnectionpool.h"
6 #include "musictoastlabel.h"
7 
10 {
11  setSelectionMode(QAbstractItemView::ExtendedSelection);
12  setColumnCount(5);
13 
14  QHeaderView *headerView = horizontalHeader();
15  headerView->resizeSection(0, 460);
16  headerView->resizeSection(1, 85);
17  headerView->resizeSection(2, 105);
18  headerView->resizeSection(3, 26);
19  headerView->resizeSection(4, 26);
20 
21  m_songs = new MusicSongList;
22  TTK::Widget::setTransparent(this, 150);
23 }
24 
26 {
27  removeItems();
28  delete m_songs;
29 }
30 
31 void MusicMobileSongsTableWidget::addCellItems(const QStringList &songs)
32 {
33  setRowCount(songs.count());
34  QHeaderView *headerView = horizontalHeader();
35 
36  for(int i = 0; i < songs.count(); ++i)
37  {
38  const QFileInfo fin(songs[i]);
39 
40  QTableWidgetItem *item = new QTableWidgetItem;
41  item->setToolTip(fin.fileName());
42  item->setText(" " + TTK::Widget::elidedText(font(), item->toolTip(), Qt::ElideRight, headerView->sectionSize(0) - 20));
43  QtItemSetTextAlignment(item, Qt::AlignLeft | Qt::AlignVCenter);
44  setItem(i, 0, item);
45 
46  item = new QTableWidgetItem;
47  item->setToolTip(TTK::Number::sizeByteToLabel(fin.size()));
48  item->setText(TTK::Widget::elidedText(font(), item->toolTip(), Qt::ElideRight, headerView->sectionSize(1) - 15));
49  QtItemSetTextAlignment(item, Qt::AlignRight | Qt::AlignVCenter);
50  setItem(i, 1, item);
51 
52  item = new QTableWidgetItem(fin.lastModified().date().toString(Qt::ISODate));
53  QtItemSetTextAlignment(item, Qt::AlignCenter);
54  setItem(i, 2, item);
55 
56  item = new QTableWidgetItem;
57  item->setIcon(QIcon(":/contextMenu/btn_audition"));
58  setItem(i, 3, item);
59 
60  item = new QTableWidgetItem;
61  item->setIcon(QIcon(":/contextMenu/btn_add"));
62  setItem(i, 4, item);
63 
64  m_songs->append(MusicSong(fin.absoluteFilePath()));
65  }
66 }
67 
69 {
71  if(column == 3 || column == 4)
72  {
73  setCursor(QCursor(Qt::PointingHandCursor));
74  }
75  else
76  {
77  unsetCursor();
78  }
79 }
80 
82 {
84  m_songs->clear();
85 }
86 
87 void MusicMobileSongsTableWidget::contextMenuEvent(QContextMenuEvent *event)
88 {
89  MusicAbstractSongsListTableWidget::contextMenuEvent(event);
90 
91  QMenu menu(this);
92  menu.setStyleSheet(TTK::UI::MenuStyle02);
93  menu.addAction(QIcon(":/contextMenu/btn_play"), tr("Play"), this, SLOT(playClicked()));
94  menu.addSeparator();
95 
96  createMoreMenu(&menu);
97 
98  const bool status = !(m_songs->isEmpty() || TTK::String::isNetworkUrl(currentSongPath()));
99  menu.addAction(tr("Song Info..."), this, SLOT(showFileInformation()))->setEnabled(status);
100  menu.addAction(QIcon(":/contextMenu/btn_local_file"), tr("Open File Dir"), this, SLOT(openFileDir()))->setEnabled(status);
101  menu.addAction(QIcon(":/contextMenu/btn_ablum"), tr("Ablum"), this, SLOT(showAlbumQueryWidget()));
102  menu.addSeparator();
103 
104  menu.exec(QCursor::pos());
105 }
106 
107 
108 
110  : MusicAbstractMoveWidget(parent),
113 {
114  m_ui->setupUi(this);
115  setFixedSize(size());
116  setAttribute(Qt::WA_DeleteOnClose);
117  setBackgroundLabel(m_ui->background);
118 
119  m_ui->topTitleCloseButton->setIcon(QIcon(":/functions/btn_close_hover"));
120  m_ui->topTitleCloseButton->setStyleSheet(TTK::UI::ToolButtonStyle04);
121  m_ui->topTitleCloseButton->setCursor(QCursor(Qt::PointingHandCursor));
122  m_ui->topTitleCloseButton->setToolTip(tr("Close"));
123  connect(m_ui->topTitleCloseButton, SIGNAL(clicked()), SLOT(close()));
124 
125  m_ui->toolWidget->setStyleSheet(QString("#toolWidget{%1}").arg(TTK::UI::BackgroundStyle03));
126 
127  m_ui->allSelectedcheckBox->setStyleSheet(TTK::UI::CheckBoxStyle03);
128  m_ui->allSelectedcheckBox->setCursor(QCursor(Qt::PointingHandCursor));
129  m_ui->allSelectedcheckBox->setText(tr("All"));
130  connect(m_ui->allSelectedcheckBox, SIGNAL(clicked(bool)), SLOT(selectedAllItems(bool)));
131 
132  m_ui->auditionButton->setStyleSheet(TTK::UI::ToolButtonStyle01 + TTK::UI::ToolButtonStyle02 + "QToolButton{ image:url(:/contextMenu/btn_audition); }");
133  m_ui->addButton->setStyleSheet(TTK::UI::ToolButtonStyle01 + TTK::UI::ToolButtonStyle02 + "QToolButton{ image:url(:/contextMenu/btn_add); }");
134 
135  m_ui->auditionButton->setCursor(QCursor(Qt::PointingHandCursor));
136  m_ui->addButton->setCursor(QCursor(Qt::PointingHandCursor));
137  m_ui->searchLineLabel->setCursor(QCursor(Qt::PointingHandCursor));
138 
139  m_ui->loadingLabel->setType(MusicGifLabelWidget::Module::CicleBlue);
140  m_ui->toolWidget->setStyleSheet(TTK::UI::BackgroundStyle10);
141 
142  connect(m_ui->auditionButton, SIGNAL(clicked()), SLOT(auditionButtonClick()));
143  connect(m_ui->addButton, SIGNAL(clicked()), SLOT(auditionButtonClick()));
144  connect(m_ui->searchLineEdit, SIGNAL(cursorPositionChanged(int,int)), SLOT(searchResultChanged(int,int)));
145 
146  connect(m_ui->songlistTable, SIGNAL(cellClicked(int,int)), SLOT(itemCellClicked(int,int)));
147  connect(m_ui->songlistTable, SIGNAL(cellDoubleClicked(int,int)), SLOT(itemDoubleClicked(int,int)));
148 
149 #ifdef Q_OS_UNIX
150  m_ui->allSelectedcheckBox->setFocusPolicy(Qt::NoFocus);
151  m_ui->searchLineLabel->setFocusPolicy(Qt::NoFocus);
152 #endif
153 
154  m_thread = new MusicSongsManagerThread(this);
155  connect(m_thread, SIGNAL(searchFilePathChanged(QStringList)), SLOT(searchFilePathChanged(QStringList)));
156 
157  G_CONNECTION_PTR->setValue(className(), this);
158  G_CONNECTION_PTR->connect(className(), MusicSongsContainerWidget::className());
159 }
160 
162 {
163  G_CONNECTION_PTR->removeValue(this);
164  TTKRemoveSingleWidget(className());
165  clearItems();
166  m_thread->stop();
167  delete m_thread;
168  delete m_ui;
169 }
170 
172 {
173  TTK_INFO_STREAM("Start fetch result");
175  m_thread->stop();
176  m_thread->start();
177  m_ui->loadingLabel->run(true);
178 }
179 
181 {
182  if(!checked)
183  {
184  m_ui->songlistTable->clearSelection();
185  m_ui->songlistTable->setCurrentIndex(QModelIndex());
186  }
187  else
188  {
189  m_ui->songlistTable->selectAll();
190  }
191 }
192 
194 {
195  if(m_ui->songlistTable->selectedItems().count() > 0)
196  {
198  return;
199  }
200 
201  if(m_ui->songlistTable->rowCount() <= 0 || m_ui->songlistTable->currentRow() < 0)
202  {
203  MusicToastLabel::popup(tr("Please select one item first"));
204  return;
205  }
206 
208 }
209 
211 {
212  switch(column)
213  {
214  case 3:
215  case 4: itemDoubleClicked(row, column); break;
216  default: break;
217  }
218 }
219 
221 {
222  Q_UNUSED(column);
223  mappedSearchRow(m_ui->searchLineEdit->text().length(), row);
224  Q_EMIT addSongToPlaylist(QStringList(m_containerItems[row]));
225 }
226 
228 {
229  TTK_INFO_STREAM("Stop fetch result");
230 
231  clearItems();
233  m_ui->searchLineEdit->clear();
234 
235  m_containerItems = path;
236  m_ui->songlistTable->addCellItems(m_containerItems);
237  m_ui->loadingLabel->run(false);
238 }
239 
241 {
242  TTKIntList result;
243  for(int i = 0; i < m_containerItems.count(); ++i)
244  {
245  if(QFileInfo(m_containerItems[i]).fileName().contains(m_ui->searchLineEdit->text(), Qt::CaseInsensitive))
246  {
247  result << i;
248  }
249  }
250 
251  QStringList data;
252  for(const int index : qAsConst(result))
253  {
254  data.append(m_containerItems[index]);
255  }
256 
257  m_searchResultLevel = column;
258  m_searchResultItems.insert(column, result);
259 
260  clearItems();
261  m_ui->songlistTable->addCellItems(data);
262 }
263 
265 {
266  m_ui->songlistTable->removeItems();
267  if(m_ui->allSelectedcheckBox->isChecked())
268  {
269  m_ui->allSelectedcheckBox->click();
270  }
271 }
272 
274 {
275  TTKIntSet auditionRow; //if selected multi rows
276  for(QTableWidgetItem *item : m_ui->songlistTable->selectedItems())
277  {
278  int row = item->row();
279  mappedSearchRow(m_ui->searchLineEdit->text().length(), row);
280  auditionRow.insert(row);
281  }
282 
283  TTKIntList indexs = auditionRow.values();
284  std::sort(indexs.begin(), indexs.end());
285 
286  QStringList items;
287  for(const int index : qAsConst(indexs))
288  {
289  items << m_containerItems[index];
290  }
291 
292  Q_EMIT addSongToPlaylist(items);
293 }
MusicMobileSongsManagerWidget(QWidget *parent=nullptr)
void setBackgroundLabel(QLabel *label)
void addSongToPlaylist(const QStringList &items)
static const QString CheckBoxStyle03
void mappedSearchRow(int pos, int &row) const
voidpf void uLong size
Definition: ioapi.h:136
void addCellItems(const QStringList &songs)
#define QtItemSetTextAlignment(p, a)
Item text alignment.
Definition: ttkqtcompat.h:45
TTK_MODULE_EXPORT QString sizeByteToLabel(qint64 size)
#define G_CONNECTION_PTR
void setFindFilePath(const QString &path)
virtual void removeItems() overridefinal
The class of the songs manager thread.
static void popup(const QString &text)
QList< int > TTKIntList
Definition: ttkqtglobal.h:188
#define qAsConst
Definition: ttkqtglobal.h:53
#define TTKRemoveSingleWidget(name)
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:67
TTK_MODULE_EXPORT void setTransparent(QWidget *widget, int alpha)
QSet< int > TTKIntSet
Definition: ttkqtglobal.h:187
TTK_MODULE_EXPORT QString elidedText(const QFont &font, const QString &text, Qt::TextElideMode mode, int width)
virtual void itemCellEntered(int row, int column)
static const QString BackgroundStyle10
static const QString MenuStyle02
static const QString ToolButtonStyle02
static const QString ToolButtonStyle01
ToolButton.
static const QString ToolButtonStyle04
Ui::MusicMobileSongsManagerWidget * m_ui
static const QString BackgroundStyle03
Definition: musicuiobject.h:87
The class of the music song info.
Definition: musicsong.h:28
The class of the mobile songs manager widget.
virtual void itemCellEntered(int row, int column) overridefinal
MusicMobileSongsTableWidget(QWidget *parent=nullptr)
The class of the songs list abstract table widget.
TTK_MODULE_EXPORT bool isNetworkUrl(const QString &path)
The class of the moving widget base.
virtual void contextMenuEvent(QContextMenuEvent *event) overridefinal
void searchFilePathChanged(const QStringList &path)