23 m_openFileWidget(nullptr),
24 m_songsInfoWidget(nullptr),
25 m_songsPlayWidget(nullptr),
26 m_leftButtonPressed(false),
27 m_renameActived(false),
28 m_deleteItemWithFile(false),
29 m_renameItem(nullptr),
30 m_renameEditDelegate(nullptr),
33 setSelectionMode(QAbstractItemView::ExtendedSelection);
34 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
37 QHeaderView *headerView = horizontalHeader();
38 headerView->resizeSection(0, 20);
39 headerView->resizeSection(1, 187);
40 headerView->resizeSection(2, 20);
41 headerView->resizeSection(3, 20);
42 headerView->resizeSection(4, 20);
43 headerView->resizeSection(5, 45);
68 const int count = rowCount();
69 setRowCount(songs.count());
70 QHeaderView *headerView = horizontalHeader();
72 for(
int i = count; i < songs.count(); ++i)
76 QTableWidgetItem *item =
new QTableWidgetItem;
79 item =
new QTableWidgetItem;
85 item =
new QTableWidgetItem;
88 item =
new QTableWidgetItem;
91 item =
new QTableWidgetItem;
94 item =
new QTableWidgetItem(v.
duration());
113 for(
int i = 0; i < columnCount(); ++i)
115 delete takeItem(index, i);
118 QString durationLabel;
120 const QString &path = !
m_songs->isEmpty() ?
m_songs->at(index).path() : QString();
134 setSpan(index, 0, 1, 6);
145 if(songs->count() == result.count())
154 m_songs->append(songs->at(index));
200 QHeaderView *headerView = horizontalHeader();
201 QTableWidgetItem *item =
new QTableWidgetItem;
204 item =
new QTableWidgetItem(
TTK::Widget::elidedText(font(), name, Qt::ElideRight, headerView->sectionSize(1) - 10));
258 it->setIcon(QIcon());
264 it->setIcon(QIcon());
270 it->setIcon(QIcon());
276 it->setIcon(QIcon());
282 it->setIcon(QIcon());
287 if(it = item(row, 0))
289 it->setIcon(QIcon(
":/tiny/btn_play_later_normal"));
292 if(it = item(row, 2))
294 it->setIcon(QIcon(
":/tiny/btn_mv_normal"));
297 if(it = item(row, 3))
300 it->setIcon(QIcon(contains ?
":/tiny/btn_loved_normal" :
":/tiny/btn_unloved_normal"));
303 if(it = item(row, 4))
305 it->setIcon(QIcon(
":/tiny/btn_delete_normal"));
308 if(it = item(row, 5))
311 it->setIcon(QIcon(
":/tiny/btn_more_normal"));
316 setCursor(QCursor(Qt::PointingHandCursor));
366 QTableWidgetItem *it = item(row, 3);
369 it->setIcon(QIcon(contains ?
":/tiny/btn_loved_normal" :
":/tiny/btn_unloved_normal"));
390 menu.exec(QCursor::pos());
420 message.
setText(tr(
"Are you sure to delete?"));
428 if(deletedList.isEmpty())
435 progress.
setTitle(tr(
"Delete file mode"));
436 progress.setRange(0, deletedList.count() / 3 * 2);
438 for(
int i = 0; i < deletedList.count(); ++i)
442 progress.setValue(i / 3);
451 for(
int i = deletedList.count() - 1; i >= 0; --i)
453 const int index = deletedList[i];
455 progress.setValue(deletedList.count() * 2 - i);
517 if(action->data().isNull())
528 if(rowCount() == 0 || row < 0)
538 const int row = currentRow();
539 if(rowCount() == 0 || row < 0)
559 const int newType = action->data().toInt();
560 if(newType < 0 || newType > 5)
593 m_songsInfoWidget->move(mapToGlobal(QPoint(width(), 0)).x() + 8, QCursor::pos().y());
609 MusicAbstractSongsListTableWidget::mousePressEvent(event);
612 if(event->button() == Qt::LeftButton)
622 MusicAbstractSongsListTableWidget::mouseMoveEvent(event);
626 setCursor(QCursor(QPixmap(
":/functions/lb_drag_cursor")));
632 MusicAbstractSongsListTableWidget::mouseReleaseEvent(event);
637 setCursor(QCursor(Qt::ArrowCursor));
661 menu.addAction(QIcon(
":/contextMenu/btn_play"), tr(
"Play"),
this, SLOT(
playClicked()));
667 QMenu sortFiles(tr(
"Sort"), &menu);
668 sortFiles.addAction(tr(
"Sort By FileName"))->setData(0);
669 sortFiles.addAction(tr(
"Sort By Singer"))->setData(1);
670 sortFiles.addAction(tr(
"Sort By FileSize"))->setData(2);
671 sortFiles.addAction(tr(
"Sort By AddTime"))->setData(3);
672 sortFiles.addAction(tr(
"Sort By Duration"))->setData(4);
673 sortFiles.addAction(tr(
"Sort By PlayCount"))->setData(5);
675 connect(&sortFiles, SIGNAL(triggered(QAction*)), SLOT(
songListSortBy(QAction*)));
679 const QList<QAction*> actions(sortFiles.actions());
683 actions[
m_songSort->
m_type]->setIcon(QIcon(asc ?
":/tiny/lb_sort_asc" :
":/tiny/lb_sort_desc"));
686 menu.addMenu(&sortFiles);
693 QMenu toolMenu(tr(
"Tools"), &menu);
696 menu.addMenu(&toolMenu);
701 menu.addAction(QIcon(
":/contextMenu/btn_local_file"), tr(
"Open File Dir"),
this, SLOT(
openFileDir()))->setEnabled(status);
702 menu.addAction(QIcon(
":/contextMenu/btn_ablum"), tr(
"Ablum"),
this, SLOT(
showAlbumQueryWidget()));
707 menu.addAction(tr(
"Rename"),
this, SLOT(
setChangSongName()))->setEnabled(status);
708 menu.addAction(QIcon(
":/contextMenu/btn_delete"), tr(
"Delete"),
this, SLOT(
removeItemAt()))->setEnabled(status);
709 menu.addAction(tr(
"Delete With File"),
this, SLOT(
removeItemWithFile()))->setEnabled(status);
710 menu.addAction(tr(
"Delete All"),
this, SLOT(
clearItems()))->setEnabled(status);
715 menu.addAction(tr(
"Search '%1'").arg(name))->setData(name);
718 for(
int i = 0; i < artists.count(); ++i)
720 name = artists[i].trimmed();
721 menu.addAction(tr(
"Search '%1'").arg(name))->setData(name);
723 menu.addAction(tr(
"Search '%1'").arg(songName))->setData(songName);
726 menu.exec(QCursor::pos());
745 QHeaderView *headerView = horizontalHeader();
767 const int end = currentRow();
776 index = (start > end) ? (end + 1) : (end - 1);
791 for(
int i = qMin(start, end); i <= qMax(start, end); ++i)
798 QHeaderView *headerView = horizontalHeader();
800 item(i, 5)->setText(songs[i].duration());
bool containsLovestItem() const
TTK_MODULE_EXPORT QString generateSongArtist(const QString &name, const QString &key=TTK_DEFAULT_STR)
static MusicApplication * instance()
void setText(const QString &text) const
TTK_MODULE_EXPORT bool playlistRowValid(int index)
The class of the messagebox widget.
TTK_MODULE_EXPORT QString generateSongTitle(const QString &name, const QString &key=TTK_DEFAULT_STR)
#define QtItemSetTextAlignment(p, a)
Item text alignment.
The class of the song ringtone maker widget.
#define TTK_ITEM_SIZE_2XL
The class of the lineedit item delegate.
TTK_MODULE_EXPORT QStringList split(const QString &value, const QString &key=TTK_DEFAULT_STR)
QString duration() const noexcept
QString name() const noexcept
static const QString MenuStyle02
void setDuration(const QString &t) noexcept
static constexpr unsigned int Color01
Color QRgb.
The class of the music song info.
TTK_MODULE_EXPORT bool isNetworkUrl(const QString &path)
#define TTKObjectCast(x, y)
#define LEFT_SIDE_WIDTH_MIN