TTKMusicPlayer  4.1.3.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 
103  menu.exec(QCursor::pos());
104 }
105 
106 
107 
109  : MusicAbstractMoveWidget(parent),
112 {
113  m_ui->setupUi(this);
114  setFixedSize(size());
115  setAttribute(Qt::WA_DeleteOnClose);
116  setBackgroundLabel(m_ui->background);
117 
118  m_ui->topTitleCloseButton->setIcon(QIcon(":/functions/btn_close_hover"));
119  m_ui->topTitleCloseButton->setStyleSheet(TTK::UI::ToolButtonStyle04);
120  m_ui->topTitleCloseButton->setCursor(QCursor(Qt::PointingHandCursor));
121  m_ui->topTitleCloseButton->setToolTip(tr("Close"));
122  connect(m_ui->topTitleCloseButton, SIGNAL(clicked()), SLOT(close()));
123 
124  m_ui->toolWidget->setStyleSheet(QString("#toolWidget{ %1 }").arg(TTK::UI::BackgroundStyle03));
125 
126  m_ui->allSelectedcheckBox->setStyleSheet(TTK::UI::CheckBoxStyle03);
127  m_ui->allSelectedcheckBox->setCursor(QCursor(Qt::PointingHandCursor));
128  m_ui->allSelectedcheckBox->setText(tr("All"));
129  connect(m_ui->allSelectedcheckBox, SIGNAL(clicked(bool)), SLOT(selectedAllItems(bool)));
130 
131  m_ui->auditionButton->setStyleSheet(TTK::UI::ToolButtonStyle01 + TTK::UI::ToolButtonStyle02 + "QToolButton{ image:url(:/contextMenu/btn_audition); }");
132  m_ui->addButton->setStyleSheet(TTK::UI::ToolButtonStyle01 + TTK::UI::ToolButtonStyle02 + "QToolButton{ image:url(:/contextMenu/btn_add); }");
133 
134  m_ui->auditionButton->setCursor(QCursor(Qt::PointingHandCursor));
135  m_ui->addButton->setCursor(QCursor(Qt::PointingHandCursor));
136  m_ui->searchLineLabel->setCursor(QCursor(Qt::PointingHandCursor));
137 
138  m_ui->loadingLabel->setType(MusicGifLabelWidget::Module::CicleBlue);
139  m_ui->toolWidget->setStyleSheet(TTK::UI::BackgroundStyle10);
140 
141  connect(m_ui->auditionButton, SIGNAL(clicked()), SLOT(auditionButtonClick()));
142  connect(m_ui->addButton, SIGNAL(clicked()), SLOT(auditionButtonClick()));
143  connect(m_ui->searchLineEdit, SIGNAL(cursorPositionChanged(int,int)), SLOT(searchResultChanged(int,int)));
144 
145  connect(m_ui->songlistTable, SIGNAL(cellClicked(int,int)), SLOT(itemCellClicked(int,int)));
146  connect(m_ui->songlistTable, SIGNAL(cellDoubleClicked(int,int)), SLOT(itemDoubleClicked(int,int)));
147 
148 #ifdef Q_OS_UNIX
149  m_ui->allSelectedcheckBox->setFocusPolicy(Qt::NoFocus);
150  m_ui->searchLineLabel->setFocusPolicy(Qt::NoFocus);
151 #endif
152 
153  m_thread = new MusicSongsManagerThread(this);
154  connect(m_thread, SIGNAL(searchFilePathChanged(QStringList)), SLOT(searchFilePathChanged(QStringList)));
155 }
156 
158 {
159  TTKRemoveSingleWidget(className());
160  clearItems();
161  m_thread->stop();
162  delete m_thread;
163  delete m_ui;
164 }
165 
167 {
168  TTK_INFO_STREAM("Start fetch result");
170  m_thread->stop();
171  m_thread->start();
172  m_ui->loadingLabel->run(true);
173 }
174 
176 {
177  if(!checked)
178  {
179  m_ui->songlistTable->clearSelection();
180  m_ui->songlistTable->setCurrentIndex(QModelIndex());
181  }
182  else
183  {
184  m_ui->songlistTable->selectAll();
185  }
186 }
187 
189 {
190  if(m_ui->songlistTable->selectedItems().count() > 0)
191  {
193  return;
194  }
195 
196  if(m_ui->songlistTable->rowCount() <= 0 || m_ui->songlistTable->currentRow() < 0)
197  {
198  MusicToastLabel::popup(tr("Please select one item first"));
199  return;
200  }
201 
203 }
204 
206 {
207  switch(column)
208  {
209  case 3:
210  case 4: itemDoubleClicked(row, column); break;
211  default: break;
212  }
213 }
214 
216 {
217  Q_UNUSED(column);
218  mappedSearchRow(m_ui->searchLineEdit->text().length(), row);
220 }
221 
223 {
224  TTK_INFO_STREAM("Stop fetch result");
225 
226  clearItems();
228  m_ui->searchLineEdit->clear();
229 
230  m_containerItems = path;
231  m_ui->songlistTable->addCellItems(m_containerItems);
232  m_ui->loadingLabel->run(false);
233 }
234 
236 {
237  TTKIntList result;
238  for(int i = 0; i < m_containerItems.count(); ++i)
239  {
240  if(QFileInfo(m_containerItems[i]).fileName().contains(m_ui->searchLineEdit->text(), Qt::CaseInsensitive))
241  {
242  result << i;
243  }
244  }
245 
246  QStringList data;
247  for(const int index : qAsConst(result))
248  {
249  data.append(m_containerItems[index]);
250  }
251 
252  m_searchResultLevel = column;
253  m_searchResultItems.insert(column, result);
254 
255  clearItems();
256  m_ui->songlistTable->addCellItems(data);
257 }
258 
260 {
261  m_ui->songlistTable->removeItems();
262  if(m_ui->allSelectedcheckBox->isChecked())
263  {
264  m_ui->allSelectedcheckBox->click();
265  }
266 }
267 
269 {
270  TTKIntSet auditionRow; //if selected multi rows
271  for(QTableWidgetItem *item : m_ui->songlistTable->selectedItems())
272  {
273  int row = item->row();
274  mappedSearchRow(m_ui->searchLineEdit->text().length(), row);
275  auditionRow.insert(row);
276  }
277 
278  TTKIntList indexs = auditionRow.values();
279  std::sort(indexs.begin(), indexs.end());
280 
281  QStringList items;
282  for(const int index : qAsConst(indexs))
283  {
284  items << m_containerItems[index];
285  }
286 
288 }
MusicMobileSongsManagerWidget(QWidget *parent=nullptr)
void setBackgroundLabel(QLabel *label)
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)
void setFindFilePath(const QString &path)
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:204
#define qAsConst
Definition: ttkqtglobal.h:51
#define TTKRemoveSingleWidget(name)
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:68
TTK_MODULE_EXPORT void setTransparent(QWidget *widget, int alpha)
QSet< int > TTKIntSet
Definition: ttkqtglobal.h:203
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
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:195
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)