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