21 m_openFileWidget(nullptr),
22 m_songsInfoWidget(nullptr),
23 m_songsPlayWidget(nullptr),
24 m_mouseLeftPressed(false),
25 m_renameActived(false),
26 m_deleteItemWithFile(false),
27 m_renameItem(nullptr),
28 m_renameEditDelegate(nullptr),
31 setSelectionMode(QAbstractItemView::ExtendedSelection);
32 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
35 QHeaderView *headerView = horizontalHeader();
36 headerView->resizeSection(0, 20);
37 headerView->resizeSection(1, 187);
38 headerView->resizeSection(2, 20);
39 headerView->resizeSection(3, 20);
40 headerView->resizeSection(4, 20);
41 headerView->resizeSection(5, 45);
66 const int count = rowCount();
67 setRowCount(songs.count());
68 QHeaderView *headerView = horizontalHeader();
70 for(
int i = count; i < songs.count(); ++i)
74 QTableWidgetItem *item =
new QTableWidgetItem;
77 item =
new QTableWidgetItem;
83 item =
new QTableWidgetItem;
86 item =
new QTableWidgetItem;
89 item =
new QTableWidgetItem;
92 item =
new QTableWidgetItem(v.
duration());
111 for(
int i = 0; i < columnCount(); ++i)
113 delete takeItem(index, i);
116 QString durationLabel;
118 const QString &path =
songPath(index);
132 setSpan(index, 0, 1, 6);
143 if(songs->count() == result.count())
152 m_songs->append(songs->at(index));
198 QHeaderView *headerView = horizontalHeader();
199 QTableWidgetItem *item =
new QTableWidgetItem;
202 item =
new QTableWidgetItem(
TTK::Widget::elidedText(font(), name, Qt::ElideRight, headerView->sectionSize(1) - 10));
256 it->setIcon(QIcon());
262 it->setIcon(QIcon());
268 it->setIcon(QIcon());
274 it->setIcon(QIcon());
280 it->setIcon(QIcon());
285 if(it = item(row, 0))
287 it->setIcon(QIcon(
":/tiny/btn_play_later_normal"));
290 if(it = item(row, 2))
292 it->setIcon(QIcon(
":/tiny/btn_mv_normal"));
295 if(it = item(row, 3))
298 it->setIcon(QIcon(contains ?
":/tiny/btn_loved_normal" :
":/tiny/btn_unloved_normal"));
301 if(it = item(row, 4))
303 it->setIcon(QIcon(
":/tiny/btn_delete_normal"));
306 if(it = item(row, 5))
309 it->setIcon(QIcon(
":/tiny/btn_more_normal"));
314 setCursor(QCursor(Qt::PointingHandCursor));
364 QTableWidgetItem *it = item(row, 3);
367 it->setIcon(QIcon(contains ?
":/tiny/btn_loved_normal" :
":/tiny/btn_unloved_normal"));
388 menu.exec(QCursor::pos());
418 message.
setText(tr(
"Are you sure to delete?"));
426 if(deletedRows.isEmpty())
433 progress.
setTitle(tr(
"Delete file mode"));
434 progress.setRange(0, deletedRows.count() / 3 * 2);
436 for(
int i = 0; i < deletedRows.count(); ++i)
440 progress.setValue(i / 3);
449 for(
int i = deletedRows.count() - 1; i >= 0; --i)
451 const int row = deletedRows[i];
453 progress.setValue(deletedRows.count() * 2 - i);
515 if(action->data().isNull())
526 if(rowCount() == 0 || row < 0)
536 const int row = currentRow();
537 if(rowCount() == 0 || row < 0)
557 const int newType = action->data().toInt();
558 if(newType < 0 || newType > 5)
591 m_songsInfoWidget->move(mapToGlobal(QPoint(width(), 0)).x() + 8, QCursor::pos().y());
607 MusicAbstractSongsListTableWidget::mousePressEvent(event);
610 if(event->button() == Qt::LeftButton)
620 MusicAbstractSongsListTableWidget::mouseMoveEvent(event);
624 setCursor(QCursor(QPixmap(
":/functions/lb_drag_cursor")));
630 MusicAbstractSongsListTableWidget::mouseReleaseEvent(event);
635 setCursor(QCursor(Qt::ArrowCursor));
660 menu.addAction(QIcon(
":/contextMenu/btn_play"), tr(
"Play"),
this, SLOT(
playClicked()));
665 menu.addAction(tr(
"Download More..."),
this, SLOT(
showDownloadWidget()))->setEnabled(!status);
668 QMenu *sortFilesMenu = menu.addMenu(tr(
"Sort"));
669 sortFilesMenu->addAction(tr(
"Sort By FileName"))->setData(0);
670 sortFilesMenu->addAction(tr(
"Sort By Singer"))->setData(1);
671 sortFilesMenu->addAction(tr(
"Sort By FileSize"))->setData(2);
672 sortFilesMenu->addAction(tr(
"Sort By AddTime"))->setData(3);
673 sortFilesMenu->addAction(tr(
"Sort By Duration"))->setData(4);
674 sortFilesMenu->addAction(tr(
"Sort By PlayCount"))->setData(5);
676 connect(sortFilesMenu, SIGNAL(triggered(QAction*)), SLOT(
songListSortBy(QAction*)));
680 const QList<QAction*> actions(sortFilesMenu->actions());
684 actions[
m_songSort->
m_type]->setIcon(QIcon(asc ?
":/tiny/lb_sort_asc" :
":/tiny/lb_sort_desc"));
693 QMenu *toolMenu = menu.addMenu(tr(
"Tools"));
698 status = !(
m_songs->isEmpty() || status);
700 menu.addAction(QIcon(
":/contextMenu/btn_local_file"), tr(
"Open File Dir"),
this, SLOT(
openFileDir()))->setEnabled(status);
701 menu.addAction(QIcon(
":/contextMenu/btn_ablum"), tr(
"Ablum"),
this, SLOT(
showAlbumQueryWidget()));
706 menu.addAction(tr(
"Rename"),
this, SLOT(
setChangSongName()))->setEnabled(status);
707 menu.addAction(QIcon(
":/contextMenu/btn_delete"), tr(
"Delete"),
this, SLOT(
removeItemAt()))->setEnabled(status);
708 menu.addAction(tr(
"Delete With File"),
this, SLOT(
removeItemWithFile()))->setEnabled(status);
709 menu.addAction(tr(
"Delete All"),
this, SLOT(
clearItems()))->setEnabled(status);
714 menu.addAction(tr(
"Search '%1'").arg(name))->setData(name);
717 for(
int i = 0; i < artists.count(); ++i)
719 name = artists[i].trimmed();
720 menu.addAction(tr(
"Search '%1'").arg(name))->setData(name);
722 menu.addAction(tr(
"Search '%1'").arg(songName))->setData(songName);
725 menu.exec(QCursor::pos());
744 QHeaderView *headerView = horizontalHeader();
766 const int end = currentRow();
775 index = (start > end) ? (end + 1) : (end - 1);
790 for(
int i = qMin(start, end); i <= qMax(start, end); ++i)
797 QHeaderView *headerView = horizontalHeader();
799 item(i, 5)->setText(songs[i].duration());
TTK_MODULE_EXPORT QString generateSongArtist(const QString &name, const QString &key=TTK_DEFAULT_STR)
static QString message(const TTK::Attribute attr)
static MusicApplication * instance()
void setText(const QString &text) const
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
TTK_MODULE_EXPORT bool isNetworkUrl(const QString &path) noexcept
TTK_MODULE_EXPORT bool playlistRowValid(int index) noexcept
bool containsLovestMedia() const
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.
#define TTKObjectCast(x, y)
#define LEFT_SIDE_WIDTH_MIN