2 #include "ui_musicreplaygainwidget.h"
10 #include <QPluginLoader>
15 static constexpr
const char *
GAIN_TRACKDB =
"Recommended \"Track\" dB change:";
16 static constexpr
const char *
GAIN_ALBUMDB =
"Recommended \"Album\" dB change for all files:";
23 QHeaderView *headerView = horizontalHeader();
24 headerView->resizeSection(0, 332);
25 headerView->resizeSection(1, 60);
26 headerView->resizeSection(2, 60);
27 headerView->resizeSection(3, 60);
28 headerView->resizeSection(4, 60);
36 m_replayGainWidget(nullptr),
41 setAttribute(Qt::WA_DeleteOnClose);
44 m_ui->topTitleCloseButton->setIcon(QIcon(
":/functions/btn_close_hover"));
46 m_ui->topTitleCloseButton->setCursor(QCursor(Qt::PointingHandCursor));
47 m_ui->topTitleCloseButton->setToolTip(tr(
"Close"));
48 connect(
m_ui->topTitleCloseButton, SIGNAL(clicked()), SLOT(close()));
52 m_ui->addFileButton->setIcon(QIcon(
":/toolSets/btn_gain_add_file"));
53 m_ui->addFileButton->setIconSize(QSize(40, 40));
55 m_ui->addFileButton->setToolTip(tr(
"Add File"));
56 m_ui->addFileButton->setCursor(QCursor(Qt::PointingHandCursor));
58 m_ui->addFilesButton->setIcon(QIcon(
":/toolSets/btn_gain_add_files"));
59 m_ui->addFilesButton->setIconSize(QSize(40, 40));
61 m_ui->addFilesButton->setToolTip(tr(
"Add Files"));
62 m_ui->addFilesButton->setCursor(QCursor(Qt::PointingHandCursor));
64 m_ui->rmFileButton->setIcon(QIcon(
":/toolSets/btn_gain_rm_file"));
65 m_ui->rmFileButton->setIconSize(QSize(40, 40));
67 m_ui->rmFileButton->setToolTip(tr(
"Remove File"));
68 m_ui->rmFileButton->setCursor(QCursor(Qt::PointingHandCursor));
70 m_ui->rmFilesButton->setIcon(QIcon(
":/toolSets/btn_gain_rm_files"));
71 m_ui->rmFilesButton->setIconSize(QSize(40, 40));
73 m_ui->rmFilesButton->setToolTip(tr(
"Remove Files"));
74 m_ui->rmFilesButton->setCursor(QCursor(Qt::PointingHandCursor));
76 m_ui->analysisButton->setIcon(QIcon(
":/toolSets/btn_analysis"));
77 m_ui->analysisButton->setIconSize(QSize(40, 40));
79 m_ui->analysisButton->setToolTip(tr(
"Analysis"));
80 m_ui->analysisButton->setCursor(QCursor(Qt::PointingHandCursor));
82 m_ui->applyButton->setIcon(QIcon(
":/toolSets/btn_analysis_apply"));
83 m_ui->applyButton->setIconSize(QSize(50, 50));
85 m_ui->applyButton->setToolTip(tr(
"Apply"));
86 m_ui->applyButton->setCursor(QCursor(Qt::PointingHandCursor));
89 m_ui->volumeLineEdit->setValidator(
new QRegExpValidator(QRegExp(
"-?[0-9]+$"),
this));
95 m_process->setProcessChannelMode(QProcess::MergedChannels);
106 connect(
m_ui->volumeLineEdit, SIGNAL(textChanged(QString)), SLOT(
lineTextChanged(QString)));
119 QPluginLoader loader;
121 const QObject *obj = loader.instance();
145 const int row =
m_ui->tableWidget->rowCount();
146 m_ui->tableWidget->setRowCount(row + 1);
147 QHeaderView *headerView =
m_ui->tableWidget->horizontalHeader();
149 QTableWidgetItem *item =
new QTableWidgetItem;
151 item->setText(
TTK::Widget::elidedText(font(), item->toolTip(), Qt::ElideRight, headerView->sectionSize(0) - 15));
153 m_ui->tableWidget->setItem(row, 0, item);
155 item =
new QTableWidgetItem;
156 item->setText(QString::number(
GAIN_DEFAULT - track.toDouble()));
158 m_ui->tableWidget->setItem(row, 1, item);
160 item =
new QTableWidgetItem;
161 item->setText(QString::number(
m_ui->volumeLineEdit->text().toDouble() -
GAIN_DEFAULT + track.toDouble()));
163 m_ui->tableWidget->setItem(row, 2, item);
165 item =
new QTableWidgetItem;
166 item->setText(QString::number(
GAIN_DEFAULT - album.toDouble()));
168 m_ui->tableWidget->setItem(row, 3, item);
170 item =
new QTableWidgetItem;
171 item->setText(QString::number(
m_ui->volumeLineEdit->text().toDouble() -
GAIN_DEFAULT + album.toDouble()));
173 m_ui->tableWidget->setItem(row, 4, item);
178 m_ui->addFileButton->setEnabled(enabled);
179 m_ui->addFilesButton->setEnabled(enabled);
180 m_ui->rmFileButton->setEnabled(enabled);
181 m_ui->rmFilesButton->setEnabled(enabled);
182 m_ui->analysisButton->setEnabled(enabled);
183 m_ui->applyButton->setEnabled(enabled);
192 const int orcount =
m_paths.count();
194 for(
const QString &path :
qAsConst(files))
202 for(
int i = orcount; i <
m_paths.count(); ++i)
206 connect(
m_process, SIGNAL(finished(
int)), &loop, SLOT(quit()));
226 m_paths << fin.absoluteFilePath();
229 connect(
m_process, SIGNAL(finished(
int)), &loop, SLOT(quit()));
241 const int row =
m_ui->tableWidget->currentRow();
247 m_ui->tableWidget->removeRow(row);
253 m_ui->tableWidget->removeItems();
274 m_ui->progressBarAll->setRange(0,
m_ui->tableWidget->rowCount());
276 for(
int i = 0; i <
m_ui->tableWidget->rowCount(); ++i)
279 connect(
m_process, SIGNAL(finished(
int)), &loop, SLOT(quit()));
282 m_ui->progressBarAll->setValue(i + 1);
297 const double d = text.toDouble();
298 for(
int i = 0; i <
m_ui->tableWidget->rowCount(); ++i)
300 QString v =
m_ui->tableWidget->item(i, 1)->text();
301 m_ui->tableWidget->item(i, 2)->setText(QString::number(d - v.toDouble()));
302 v =
m_ui->tableWidget->item(i, 3)->text();
303 m_ui->tableWidget->item(i, 4)->setText(QString::number(d - v.toDouble()));
309 QString track, album;
317 track = QString(data.trimmed());
324 album = QString(data.trimmed());
328 if(!track.isEmpty() || !album.isEmpty())
338 const QByteArray &data =
m_process->readLine();
339 if(data.contains(
"Applying gain change"))
341 m_ui->progressBar->setValue(40);
343 else if(data.contains(
"done"))
345 m_ui->progressBar->setValue(100);
349 m_ui->progressBar->setValue(80);
356 const MusicSongList songs(
m_ui->selectedAreaWidget->selectedSongItems());
TTK_MODULE_EXPORT QString getExistingDirectory(QWidget *parent)
Light plugin interface (Light factory).
static const QString CheckBoxStyle01
CheckBox.
int exec(ProcessEventsFlags flags=AllEvents)
#define QtItemSetTextAlignment(p, a)
Item text alignment.
static const QString ProgressBar01
ProgressBar.
static const QString HeaderView01
HeadView.
#define QtProcessVoidConnect(p, q, f, s)
Process error void connect.
virtual void open(const QString &path)=0
virtual Light * create(QWidget *parent)=0
static void popup(const QString &text)
static const QString ScrollBarStyle03
#define TTKRemoveSingleWidget(name)
static const QString PushButtonStyle04
TTK_MODULE_EXPORT QFileInfoList fileInfoListByPath(const QString &dpath, const QStringList &filter={}, bool recursively=true)
#define MAKE_GAIN_PATH_FULL
static const QString LineEditStyle01
LineEdit.
TTK_MODULE_EXPORT QString pluginPath(const QString &module, const QString &format)
static const QString TabWidgetStyle01
TabWidget.
static const QString ToolButtonStyle04
TTK_MODULE_EXPORT QStringList getOpenFileNames(QWidget *parent, const QString &filter="Image Files (*.png *.bmp *.jpg)")
#define TTK_FILE_SUFFIX(fin)
The class of the music song info.
The class of the semaphore event loop.
#define TTKObjectCast(x, y)