TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musictransformwidget.cpp
Go to the documentation of this file.
1 #include "musictransformwidget.h"
2 #include "ui_musictransformwidget.h"
3 #include "musicwidgetheaders.h"
4 #include "musiclrcfromkrc.h"
5 #include "musictoastlabel.h"
6 #include "musicfileutils.h"
7 
8 #include <QSound>
9 #include <QProcess>
10 
11 static constexpr int LINE_WIDTH = 420;
12 
14  : MusicAbstractMoveDialog(parent),
15  m_ui(new Ui::MusicTransformWidget),
16  m_currentType(Module::Music)
17 {
18  m_ui->setupUi(this);
19  setFixedSize(size());
20  setBackgroundLabel(m_ui->background);
21 
22  m_process = new QProcess(this);
23  m_ui->topTitleCloseButton->setIcon(QIcon(":/functions/btn_close_hover"));
24  m_ui->topTitleCloseButton->setStyleSheet(TTK::UI::ToolButtonStyle04);
25  m_ui->topTitleCloseButton->setCursor(QCursor(Qt::PointingHandCursor));
26  m_ui->topTitleCloseButton->setToolTip(tr("Close"));
27  connect(m_ui->topTitleCloseButton, SIGNAL(clicked()), SLOT(close()));
28 
33 
34  m_ui->inputButton->setStyleSheet(TTK::UI::PushButtonStyle04);
35  m_ui->outputButton->setStyleSheet(TTK::UI::PushButtonStyle04);
36 
37  m_ui->transformButton->setStyleSheet(TTK::UI::PushButtonStyle04);
38  m_ui->inputLineEdit->setStyleSheet(TTK::UI::LineEditStyle01);
39  m_ui->outputLineEdit->setStyleSheet(TTK::UI::LineEditStyle01);
40 
41  m_ui->listWidget->setStyleSheet(TTK::UI::ListWidgetStyle01);
42  m_ui->listWidget->verticalScrollBar()->setStyleSheet(TTK::UI::ScrollBarStyle03);
43 
44  m_ui->inputButton->setCursor(QCursor(Qt::PointingHandCursor));
45  m_ui->outputButton->setCursor(QCursor(Qt::PointingHandCursor));
46  m_ui->transformButton->setCursor(QCursor(Qt::PointingHandCursor));
47 
48  m_ui->folderBox->setStyleSheet(TTK::UI::CheckBoxStyle01);
49  m_ui->tabButton->addButtons({tr("Music"), tr("Krc")});
50 
51 #ifdef Q_OS_UNIX
52  m_ui->inputButton->setFocusPolicy(Qt::NoFocus);
53  m_ui->outputButton->setFocusPolicy(Qt::NoFocus);
54  m_ui->transformButton->setFocusPolicy(Qt::NoFocus);
55  m_ui->folderBox->setFocusPolicy(Qt::NoFocus);
56 #endif
57 
58  initialize();
59 
60  connect(m_ui->inputButton, SIGNAL(clicked()), SLOT(initInputPath()));
61  connect(m_ui->outputButton, SIGNAL(clicked()), SLOT(initOutputPath()));
62  connect(m_ui->transformButton, SIGNAL(clicked()), SLOT(startTransform()));
63  connect(m_process, SIGNAL(finished(int)), SLOT(transformFinish()));
64  connect(m_ui->folderBox, SIGNAL(clicked(bool)), SLOT(folderBoxChecked()));
65  connect(m_ui->tabButton, SIGNAL(clicked(int)), SLOT(buttonClicked(int)));
66 }
67 
69 {
70  m_process->kill();
71  delete m_process;
72  delete m_ui;
73 }
74 
76 {
77  QString path;
78  QStringList supportedFormat;
79  (m_currentType == Module::Music) ? (supportedFormat << "mp3" << "wav" << "wma" << "ogg" << "flac" << "ac3" << "aac") : supportedFormat << "krc";
80 
81  if(!m_ui->folderBox->isChecked())
82  {
83  QString filter = "Audio Files (";
84  for(int i = 0; i < supportedFormat.count(); ++i)
85  {
86  filter += QString("*.%1 ").arg(supportedFormat[i]);
87  }
88  filter = filter.trimmed() + ")";
89 
90  path = TTK::File::getOpenFileName(this, filter);
91  if(path.isEmpty() || m_path.contains(path))
92  {
93  return;
94  }
95 
96  m_ui->listWidget->addItem(TTK::Widget::elidedText(font(), path, Qt::ElideLeft, LINE_WIDTH));
97  m_ui->listWidget->setToolTip(path);
98  m_path << path;
99  }
100  else
101  {
102  path = TTK::File::getExistingDirectory(this);
103  if(!path.isEmpty())
104  {
105  for(const QFileInfo &fin : TTK::File::fileInfoListByPath(path))
106  {
107  if(!m_path.contains(fin.absoluteFilePath()) && supportedFormat.contains(TTK_FILE_SUFFIX(fin)))
108  {
109  m_path << fin.absoluteFilePath();
110  m_ui->listWidget->addItem(TTK::Widget::elidedText(font(), m_path.back(), Qt::ElideLeft, LINE_WIDTH));
111  m_ui->listWidget->setToolTip(m_path.back());
112  }
113  }
114  }
115  }
116 
117  if(!path.isEmpty())
118  {
119  m_ui->inputLineEdit->setText(path);
120  }
121 }
122 
124 {
125  const QString &path = TTK::File::getExistingDirectory(this);
126  if(!path.isEmpty())
127  {
128  m_ui->outputLineEdit->setText(path);
129  }
130 }
131 
133 {
134  if(!processTransform())
135  {
136  return;
137  }
138 
139  m_ui->loadingLabel->show();
140  m_ui->loadingLabel->start();
141  setCheckedControl(false);
142 }
143 
145 {
146  QSound::play(":/data/sound");
147 
148  m_path.removeFirst();
149  m_ui->listWidget->clear();
150 
151  if(!m_path.isEmpty())
152  {
153  for(const QString &path : qAsConst(m_path))
154  {
155  m_ui->listWidget->addItem(TTK::Widget::elidedText(font(), path, Qt::ElideLeft, LINE_WIDTH));
156  m_ui->listWidget->setToolTip(path);
157  }
158 
159  if(processTransform())
160  {
161  return;
162  }
163  }
164 
165  setCheckedControl(true);
166  m_ui->loadingLabel->run(false);
167 }
168 
170 {
171  m_ui->inputLineEdit->clear();
172  m_ui->listWidget->clear();
173  m_path.clear();
174 }
175 
177 {
179  const bool musicMode = Module::Music == m_currentType;
180 
181  m_path.clear();
182  m_ui->listWidget->clear();
183  m_ui->inputLineEdit->clear();
184  m_ui->outputLineEdit->clear();
185 
186  m_ui->label_8->setVisible(!musicMode);
187  m_ui->label_3->setVisible(musicMode);
188  m_ui->label_4->setVisible(musicMode);
189  m_ui->label_5->setVisible(musicMode);
190  m_ui->label_6->setVisible(musicMode);
191  m_ui->formatCombo->setVisible(musicMode);
192  m_ui->hzCombo->setVisible(musicMode);
193  m_ui->kbpsCombo->setVisible(musicMode);
194  m_ui->msCombo->setVisible(musicMode);
195 }
196 
198 {
199  if(!QFile::exists(MAKE_TRANSFORM_PATH_FULL))
200  {
201  MusicToastLabel::popup(tr("Lack of plugin file"));
202  return -1;
203  }
204 
206 }
207 
209 {
210  return m_path.isEmpty() ? QString() : QFileInfo(m_path.front()).completeBaseName();
211 }
212 
214 {
215  m_ui->formatCombo->addItems({"MP3", "WAV", "WMA", "OGG", "FLAC", "AC3", "AAC"});
216  m_ui->kbpsCombo->addItems({"32", "48", "56", "64", "80", "96", "112", "128", "192", "224", "256", "320"});
217  m_ui->hzCombo->addItems({"8000", "12050", "16000", "22050", "24000", "32000", "44100", "48000"});
218  m_ui->msCombo->addItems({"Mono", "Stereo"});
219 
220  m_ui->kbpsCombo->setCurrentIndex(7);
221  m_ui->hzCombo->setCurrentIndex(6);
222 
223  m_ui->label_8->hide();
224  m_ui->loadingLabel->setType(MusicGifLabelWidget::Module::CicleBlue);
225 }
226 
228 {
229  if(m_path.isEmpty())
230  {
231  MusicToastLabel::popup(tr("The input file path is empty"));
232  return false;
233  }
234 
235  const QString &in = m_path.front().trimmed();
236  const QString &out = m_ui->outputLineEdit->text().trimmed();
237 
238  if(in.isEmpty() || out.isEmpty())
239  {
240  MusicToastLabel::popup(tr("The output file path is empty"));
241  return false;
242  }
243 
245  {
246  if(m_ui->formatCombo->currentText() == "OGG")
247  {
248  m_ui->msCombo->setCurrentIndex(1);
249  }
250 
251  TTK_INFO_STREAM(QString("%1 %2 %3 %4").arg(m_ui->formatCombo->currentText(), m_ui->kbpsCombo->currentText(), m_ui->hzCombo->currentText())
252  .arg(m_ui->msCombo->currentIndex() + 1));
253 
254  m_process->start(MAKE_TRANSFORM_PATH_FULL, {"-i", in, "-y",
255  "-ab", m_ui->kbpsCombo->currentText() + "k",
256  "-ar", m_ui->hzCombo->currentText(),
257  "-ac", QString::number(m_ui->msCombo->currentIndex() + 1),
258  QString("%1%2-new.%3").arg(out, transformSongName(), m_ui->formatCombo->currentText().toLower())});
259  }
260  else
261  {
262  MusicLrcFromKrc krc;
263  TTK_INFO_STREAM("Krc to lrc state: " << krc.decode(in, QString("%1%2.%3").arg(out, transformSongName(), LRC_FILE_SUFFIX)));
264  transformFinish();
265  }
266  return true;
267 }
268 
270 {
271  m_ui->inputButton->setEnabled(enabled);
272  m_ui->outputButton->setEnabled(enabled);
273  m_ui->folderBox->setEnabled(enabled);
274  m_ui->transformButton->setEnabled(enabled);
275  m_ui->tabButton->setButtonEnabled(enabled);
276 }
TTK_MODULE_EXPORT QString getExistingDirectory(QWidget *parent)
#define TTKStaticCast(x, y)
Definition: ttkglobal.h:159
void setBackgroundLabel(QLabel *label)
static const QString ListWidgetStyle01
ListWidget.
QString transformSongName() const
static const QString CheckBoxStyle01
CheckBox.
voidpf void uLong size
Definition: ioapi.h:136
TTK_MODULE_EXPORT QString getOpenFileName(QWidget *parent, const QString &filter="Image Files (*.png *.bmp *.jpg)")
static void popup(const QString &text)
static const QString ScrollBarStyle03
#define qAsConst
Definition: ttkqtglobal.h:53
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:67
The class of the krc to lrc.
static const QString PushButtonStyle04
#define MAKE_TRANSFORM_PATH_FULL
Definition: musicobject.h:148
TTK_MODULE_EXPORT QString elidedText(const QFont &font, const QString &text, Qt::TextElideMode mode, int width)
TTK_MODULE_EXPORT QFileInfoList fileInfoListByPath(const QString &dpath, const QStringList &filter={}, bool recursively=true)
MusicTransformWidget(QWidget *parent=nullptr)
The class of the moving dialog base.
TTK_MODULE_EXPORT void generateComboBoxFormat(QComboBox *widget, const QString &style={})
static const QString LineEditStyle01
LineEdit.
Ui::MusicTransformWidget * m_ui
static const QString ToolButtonStyle04
static constexpr int LINE_WIDTH
#define TTK_FILE_SUFFIX(fin)
Definition: ttkqtglobal.h:173
#define LRC_FILE_SUFFIX
Definition: musicobject.h:33
The class of the transform widget.
bool decode(const QString &input, const QString &output={})
void setCheckedControl(bool enabled)