TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musiclrcdownloadbatchwidget.cpp
Go to the documentation of this file.
3 #include "ui_musiclrcdownloadbatchwidget.h"
5 
8 {
9  setAttribute(Qt::WA_TranslucentBackground, false);
10  setSelectionMode(QAbstractItemView::ExtendedSelection);
11  setColumnCount(5);
12 
13  QHeaderView *headerView = horizontalHeader();
14  headerView->resizeSection(0, 50);
15  headerView->resizeSection(1, 150);
16  headerView->resizeSection(2, 100);
17  headerView->resizeSection(3, 190);
18  headerView->resizeSection(4, 60);
19 
20  verticalScrollBar()->setStyleSheet(TTK::UI::ScrollBarStyle01);
21 }
22 
23 void MusicLrcDownloadBatchTableWidget::addCellItems(const MusicSongList &items)
24 {
25  setRowCount(items.count());
26  QHeaderView *headerView = horizontalHeader();
27 
28  for(int i = 0; i < items.count(); ++i)
29  {
30  const MusicSong &v = items[i];
31 
32  QTableWidgetItem *item = new QTableWidgetItem;
33  item->setToolTip(v.path());
34  item->setText(QString::number(i + 1));
35  QtItemSetTextAlignment(item, Qt::AlignCenter);
36  setItem(i, 0, item);
37 
38  item = new QTableWidgetItem;
39  item->setToolTip(v.path());
40  item->setText(TTK::Widget::elidedText(font(), v.title(), Qt::ElideRight, headerView->sectionSize(1) - 10));
41  QtItemSetTextAlignment(item, Qt::AlignLeft | Qt::AlignVCenter);
42  setItem(i, 1, item);
43 
44  item = new QTableWidgetItem;
45  item->setToolTip(v.path());
46  item->setText(TTK::Widget::elidedText(font(), v.artist(), Qt::ElideRight, headerView->sectionSize(2) - 10));
47  QtItemSetTextAlignment(item, Qt::AlignLeft | Qt::AlignVCenter);
48  setItem(i, 2, item);
49 
50  item = new QTableWidgetItem;
51  item->setToolTip(v.path());
52  item->setText(TTK::Widget::elidedText(font(), v.name(), Qt::ElideRight, headerView->sectionSize(3) - 10));
53  QtItemSetTextAlignment(item, Qt::AlignLeft | Qt::AlignVCenter);
54  setItem(i, 3, item);
55 
56  item = new QTableWidgetItem;
57  item->setToolTip(v.path());
58  QtItemSetTextAlignment(item, Qt::AlignLeft | Qt::AlignVCenter);
59  setItem(i, 4, item);
60  }
61 }
62 
63 
64 
66  : MusicAbstractMoveWidget(parent),
68 {
69  m_ui->setupUi(this);
70  setFixedSize(size());
71  setAttribute(Qt::WA_DeleteOnClose);
72  setBackgroundLabel(m_ui->background);
73 
74  m_ui->topTitleCloseButton->setIcon(QIcon(":/functions/btn_close_hover"));
75  m_ui->topTitleCloseButton->setStyleSheet(TTK::UI::ToolButtonStyle04);
76  m_ui->topTitleCloseButton->setCursor(QCursor(Qt::PointingHandCursor));
77  m_ui->topTitleCloseButton->setToolTip(tr("Close"));
78  connect(m_ui->topTitleCloseButton, SIGNAL(clicked()), SLOT(close()));
79 
80  m_ui->skipAlreadyLrcCheckBox->setStyleSheet(TTK::UI::CheckBoxStyle01);
81  m_ui->saveToLrcDirRadioBox->setStyleSheet(TTK::UI::RadioButtonStyle01);
82  m_ui->saveToCurrentDirRadioBox->setStyleSheet(TTK::UI::RadioButtonStyle01);
83 #ifdef Q_OS_UNIX
84  m_ui->skipAlreadyLrcCheckBox->setFocusPolicy(Qt::NoFocus);
85  m_ui->saveToLrcDirRadioBox->setFocusPolicy(Qt::NoFocus);
86  m_ui->saveToCurrentDirRadioBox->setFocusPolicy(Qt::NoFocus);
87  m_ui->addButton->setFocusPolicy(Qt::NoFocus);
88  m_ui->downloadButton->setFocusPolicy(Qt::NoFocus);
89 #endif
90  m_ui->addButton->setStyleSheet(TTK::UI::PushButtonStyle04);
91  m_ui->downloadButton->setStyleSheet(TTK::UI::PushButtonStyle04);
92 
93  connect(m_ui->addButton, SIGNAL(clicked()), SLOT(addButtonClicked()));
94  connect(m_ui->downloadButton, SIGNAL(clicked()), SLOT(downloadButtonClicked()));
95 
96  m_ui->skipAlreadyLrcCheckBox->setChecked(true);
97  m_ui->saveToLrcDirRadioBox->setChecked(true);
98 }
99 
101 {
102  TTKRemoveSingleWidget(className());
103  delete m_ui;
104 }
105 
107 {
108  m_localSongs = m_ui->selectedAreaWidget->selectedSongItems();
109  m_ui->tableWidget->addCellItems(m_localSongs);
110 }
111 
113 {
114  m_ui->addButton->setEnabled(false);
115  m_ui->downloadButton->setEnabled(false);
116 
117  for(int i = 0; i < m_ui->tableWidget->rowCount(); ++i)
118  {
119  QTableWidgetItem *it = m_ui->tableWidget->item(i, 4);
120  if(it)
121  {
122  it->setText({});
123  }
124  }
125 
126  const bool skip = m_ui->skipAlreadyLrcCheckBox->isChecked();
127  const bool lrcDir = m_ui->saveToLrcDirRadioBox->isChecked();
128 
129  for(int i = 0; i < m_localSongs.count(); ++i)
130  {
131  QTableWidgetItem *it = m_ui->tableWidget->item(i, 4);
132  if(!it)
133  {
134  continue;
135  }
136 
137  it->setText("...");
138 
139  MusicSong *song = &m_localSongs[i];
140  const QString &prefix = lrcDir ? TTK::String::lrcDirPrefix() : QFileInfo(song->path()).path() + TTK_SEPARATOR;
141  const QString &path = QString("%1/%2%3").arg(prefix, song->name(), LRC_FILE);
142  if(skip && QFile::exists(path))
143  {
144  it->setForeground(QColor(TTK::UI::Color02));
145  it->setText(tr("Skip"));
146  continue;
147  }
148 
149  TTKSemaphoreLoop loop;
150  MusicAbstractQueryRequest *d = G_DOWNLOAD_QUERY_PTR->makeQueryRequest(this);
151  connect(d, SIGNAL(downLoadDataChanged(QString)), &loop, SLOT(quit()));
154  d->startToSearch(song->name().trimmed());
155  loop.exec();
156 
157  if(!d->isEmpty())
158  {
159  const TTK::MusicSongInformation info(d->items().front());
160  MusicAbstractDownLoadRequest *d = G_DOWNLOAD_QUERY_PTR->makeLrcRequest(info.m_lrcUrl, path, this);
161  connect(d, SIGNAL(downLoadDataChanged(QString)), &loop, SLOT(quit()));
162  d->startToRequest();
163  loop.exec();
164 
165  it->setForeground(QColor(0, 0xFF, 0));
166  it->setText(tr("Finish"));
167  }
168  else
169  {
170  it->setForeground(QColor(0xFF, 0, 0));
171  it->setText(tr("Error"));
172  }
173  }
174 
175  m_ui->addButton->setEnabled(true);
176  m_ui->downloadButton->setEnabled(true);
177 }
void setBackgroundLabel(QLabel *label)
The class of the abstract download data.
MusicLrcDownloadBatchWidget(QWidget *parent=nullptr)
QString path() const noexcept
Definition: musicsong.h:90
The class of the table widget base.
static const QString CheckBoxStyle01
CheckBox.
voidpf void uLong size
Definition: ioapi.h:136
int exec(ProcessEventsFlags flags=AllEvents)
#define QtItemSetTextAlignment(p, a)
Item text alignment.
Definition: ttkqtcompat.h:45
The class of the lrc batch download widget.
static constexpr unsigned int Color02
Definition: musicuiobject.h:34
QString artist() const noexcept
Definition: musicsong.cpp:54
static const QString ScrollBarStyle01
ScrollBar.
#define TTKRemoveSingleWidget(name)
MusicLrcDownloadBatchTableWidget(QWidget *parent=nullptr)
#define TTK_SEPARATOR
Definition: ttkglobal.h:195
TTK_MODULE_EXPORT QString lrcDirPrefix()
static const QString PushButtonStyle04
TTK_MODULE_EXPORT QString elidedText(const QFont &font, const QString &text, Qt::TextElideMode mode, int width)
QString name() const noexcept
Definition: musicsong.h:82
static const QString ToolButtonStyle04
void addCellItems(const MusicSongList &items)
#define G_DOWNLOAD_QUERY_PTR
The class of the music song info.
Definition: musicsong.h:28
virtual void startToSearch(const QString &value)=0
static const QString RadioButtonStyle01
RadioButton.
The class of the abstract query download data from net.
const TTK::MusicSongInformationList & items() const
#define LRC_FILE
Definition: musicobject.h:63
QString title() const noexcept
Definition: musicsong.cpp:49
Ui::MusicLrcDownloadBatchWidget * m_ui
The class of the semaphore event loop.
The class of the music song information.
Definition: musicobject.h:281
The class of the moving widget base.