11 #include <QButtonGroup>
12 #if TTK_QT_VERSION_CHECK(5,0,0)
13 # include <QStandardPaths>
15 # include <QDesktopServices>
25 return v.isEmpty() ? QObject::tr(
"Various Artist") : v;
32 return v.isEmpty() ? QObject::tr(
"Various Album") : v;
39 return v.isEmpty() ? QObject::tr(
"Various Year") : v;
46 return v.isEmpty() ? QObject::tr(
"Various Genre") : v;
56 QHeaderView *headerView = horizontalHeader();
57 headerView->setVisible(
true);
58 headerView->resizeSection(0, 100);
59 headerView->resizeSection(1, 55);
61 setAlternatingRowColors(
true);
62 setFrameShape(QFrame::Box);
63 setTextElideMode(Qt::ElideRight);
67 setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
78 setRowCount(song.count());
81 for(
auto it = song.constBegin(); it != song.constEnd(); ++it, ++index)
83 QTableWidgetItem *item =
new QTableWidgetItem;
84 item->setToolTip(it.key());
85 item->setText(item->toolTip());
87 setItem(index, 0, item);
89 item =
new QTableWidgetItem;
90 item->setToolTip(QString::number(it.value()));
91 item->setText(item->toolTip());
93 setItem(index, 1, item);
100 QHeaderView *headerView = horizontalHeader();
110 setSelectionMode(QAbstractItemView::ExtendedSelection);
113 QHeaderView *headerView = horizontalHeader();
114 headerView->setVisible(
true);
115 headerView->resizeSection(0, 200);
116 headerView->resizeSection(1, 100);
117 headerView->resizeSection(2, 100);
118 headerView->resizeSection(3, 40);
119 headerView->resizeSection(4, 100);
120 headerView->resizeSection(5, 100);
121 headerView->resizeSection(6, 200);
123 setAlternatingRowColors(
true);
124 setFrameShape(QFrame::Box);
125 setTextElideMode(Qt::ElideRight);
128 setHorizontalHeaderLabels({tr(
"Title"), tr(
"Artist"), tr(
"Album"), tr(
"Track"), tr(
"Year"), tr(
"Genre"), tr(
"Path")});
129 setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
143 setRowCount(songs.count());
145 for(
int i = 0; i < songs.count(); ++i)
149 QTableWidgetItem *item =
new QTableWidgetItem;
151 item->setText(item->toolTip());
155 item =
new QTableWidgetItem;
157 item->setText(item->toolTip());
161 item =
new QTableWidgetItem;
163 item->setText(item->toolTip());
167 item =
new QTableWidgetItem;
169 item->setText(item->toolTip());
173 item =
new QTableWidgetItem;
174 item->setToolTip(v.
m_year);
175 item->setText(item->toolTip());
179 item =
new QTableWidgetItem;
181 item->setText(item->toolTip());
185 item =
new QTableWidgetItem;
186 item->setToolTip(v.
m_path);
187 item->setText(item->toolTip());
198 QHeaderView *headerView = horizontalHeader();
213 MusicAbstractSongsListTableWidget::contextMenuEvent(event);
217 menu.addAction(QIcon(
":/contextMenu/btn_play"), tr(
"Play"),
this, SLOT(
playClicked()));
224 menu.addAction(QIcon(
":/contextMenu/btn_local_file"), tr(
"Open File Dir"),
this, SLOT(
openFileDir()))->setEnabled(status);
225 menu.addAction(QIcon(
":/contextMenu/btn_ablum"), tr(
"Ablum"),
this, SLOT(
showAlbumQueryWidget()));
227 menu.exec(QCursor::pos());
237 QVBoxLayout *layout =
new QVBoxLayout(
this);
238 layout->setSpacing(0);
239 layout->setContentsMargins(0, 0, 0, 0);
242 QWidget *mainWidget =
new QWidget(
this);
243 QVBoxLayout *mainLayout =
new QVBoxLayout(mainWidget);
244 mainLayout->setSpacing(0);
245 mainLayout->setContentsMargins(20, 10, 20, 10);
246 mainWidget->setLayout(mainLayout);
247 layout->addWidget(mainWidget);
249 QWidget *topWidget =
new QWidget(mainWidget);
250 mainLayout->addWidget(topWidget);
252 QVBoxLayout *topLayout =
new QVBoxLayout(topWidget);
253 topLayout->setSpacing(0);
254 topLayout->setContentsMargins(0, 0, 0, 10);
255 topWidget->setLayout(topLayout);
257 QWidget *functionWidget =
new QWidget(topWidget);
258 QHBoxLayout *functionWidgetLayout =
new QHBoxLayout(functionWidget);
259 functionWidgetLayout->setContentsMargins(0, 0, 0, 10);
260 functionWidget->setLayout(functionWidgetLayout);
262 QLabel *pLabel =
new QLabel(tr(
"Media Library"), functionWidget);
263 QFont pLabelFont = pLabel->font();
264 pLabelFont.setPixelSize(33);
265 pLabel->setFont(pLabelFont);
267 functionWidgetLayout->addWidget(pLabel);
272 functionWidgetLayout->addStretch(1);
274 QPushButton *refresh =
new QPushButton(tr(
"Refresh"), functionWidget);
275 refresh->setIcon(QIcon(
":/functions/btn_similar_hover"));
276 refresh->setFixedSize(90, 30);
278 refresh->setCursor(QCursor(Qt::PointingHandCursor));
279 functionWidgetLayout->addWidget(refresh);
281 QPushButton *button =
new QPushButton(tr(
"Settings"), functionWidget);
282 button->setIcon(QIcon(
":/functions/btn_setting_hover"));
283 button->setFixedSize(90, 30);
285 button->setCursor(QCursor(Qt::PointingHandCursor));
286 functionWidgetLayout->addWidget(button);
290 topLayout->addWidget(functionWidget);
293 QWidget *tabWidget =
new QWidget(mainWidget);
294 QHBoxLayout *tabWidgetLayout =
new QHBoxLayout(tabWidget);
295 tabWidgetLayout->setSpacing(0);
296 tabWidgetLayout->setContentsMargins(0, 0, 0, 0);
297 tabWidget->setLayout(tabWidgetLayout);
298 mainLayout->addWidget(tabWidget);
306 refresh->setFocusPolicy(Qt::NoFocus);
307 button->setFocusPolicy(Qt::NoFocus);
310 QWidget *centerWidget =
new QWidget(mainWidget);
311 QHBoxLayout *centerWidgetLayout =
new QHBoxLayout(centerWidget);
312 centerWidgetLayout->setSpacing(2);
313 centerWidgetLayout->setContentsMargins(0, 5, 0, 0);
314 centerWidget->setLayout(centerWidgetLayout);
315 mainLayout->addWidget(centerWidget);
328 connect(refresh, SIGNAL(clicked()), SLOT(
refreshItems()));
354 case 0:
m_searchEdit->
editor()->setPlaceholderText(tr(
"Please input search song words"));
break;
355 case 1:
m_searchEdit->
editor()->setPlaceholderText(tr(
"Please input search artist words"));
break;
356 case 2:
m_searchEdit->
editor()->setPlaceholderText(tr(
"Please input search album words"));
break;
357 case 3:
m_searchEdit->
editor()->setPlaceholderText(tr(
"Please input search year words"));
break;
358 case 4:
m_searchEdit->
editor()->setPlaceholderText(tr(
"Please input search genre words"));
break;
386 #if TTK_QT_VERSION_CHECK(5,0,0)
387 path = QStandardPaths::writableLocation(QStandardPaths::MusicLocation) +
TTK_SEPARATOR;
389 path = QDesktopServices::storageLocation(QDesktopServices::MusicLocation) +
TTK_SEPARATOR;
396 m_sizeLabel->setText(tr(
" (Songs Totol: %1)").arg(files.size()));
400 for(
const QString &path :
qAsConst(files))
422 qApp->processEvents();
463 MusicSongInfoItemList data;
464 for(
const int index :
qAsConst(result))
486 QWidget::resizeEvent(event);
507 data = item.m_artist;
508 label = tr(
"Artist");
532 if(!statistic.contains(data))
534 statistic.insert(data, 1);
538 statistic.insert(data, statistic[data] + 1);
TTK_MODULE_EXPORT QString getExistingDirectory(QWidget *parent)
MusicSongInfoItemList m_containerItems
static QString generateYear(const QString &v) noexcept
static QString generateAlbum(const QString &v) noexcept
static const QString ScrollBarStyle04
#define QtItemSetTextAlignment(p, a)
Item text alignment.
void mappedSearchRow(int pos, int &row) const noexcept
TTKSearchItems m_searchResultItems
TTK_MODULE_EXPORT void enableBreakPoint(bool enable) noexcept
static const QString ColorStyle01
Color.
void clearSearchResult() noexcept
The class of the local song item information.
static const QString ColorStyle02
TTK_MODULE_EXPORT bool isNetworkUrl(const QString &path) noexcept
static const QString PushButtonStyle03
The namespace of the application object.
#define TTK_SIGNLE_SHOT(...)
TTK_MODULE_EXPORT bool isBreakPointEnabled() noexcept
static QString generateGenre(const QString &v) noexcept
static const QString BackgroundStyle01
Background.
MusicSearchEdit * editor() const noexcept
static const QString BackgroundStyle10
static const QString MenuStyle02
TTK_MODULE_EXPORT QStringList fileListByPath(const QString &dpath, const QStringList &filter={}, bool recursively=true)
The class of the music song info.
The class of the query line edit widget.
static QString generateArtist(const QString &v) noexcept
TTK_MODULE_EXPORT QString generateSongName(const QString &title, const QString &artist) noexcept