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 #if TTK_QT_VERSION_CHECK(5,1,0)
90 m_ui->volumeLineEdit->setValidator(
new QRegularExpressionValidator(QRegularExpression(
"-?[0-9]+$"),
this));
92 m_ui->volumeLineEdit->setValidator(
new QRegExpValidator(QRegExp(
"-?[0-9]+$"),
this));
99 m_process->setProcessChannelMode(QProcess::MergedChannels);
110 connect(
m_ui->volumeLineEdit, SIGNAL(textChanged(QString)), SLOT(
lineTextChanged(QString)));
123 QPluginLoader loader;
125 QObject *obj = loader.instance();
149 const int row =
m_ui->tableWidget->rowCount();
150 m_ui->tableWidget->setRowCount(row + 1);
151 QHeaderView *headerView =
m_ui->tableWidget->horizontalHeader();
153 QTableWidgetItem *item =
new QTableWidgetItem;
155 item->setText(
TTK::Widget::elidedText(font(), item->toolTip(), Qt::ElideRight, headerView->sectionSize(0) - 15));
157 m_ui->tableWidget->setItem(row, 0, item);
159 item =
new QTableWidgetItem;
160 item->setText(QString::number(
GAIN_DEFAULT - track.toDouble()));
162 m_ui->tableWidget->setItem(row, 1, item);
164 item =
new QTableWidgetItem;
165 item->setText(QString::number(
m_ui->volumeLineEdit->text().toDouble() -
GAIN_DEFAULT + track.toDouble()));
167 m_ui->tableWidget->setItem(row, 2, item);
169 item =
new QTableWidgetItem;
170 item->setText(QString::number(
GAIN_DEFAULT - album.toDouble()));
172 m_ui->tableWidget->setItem(row, 3, item);
174 item =
new QTableWidgetItem;
175 item->setText(QString::number(
m_ui->volumeLineEdit->text().toDouble() -
GAIN_DEFAULT + album.toDouble()));
177 m_ui->tableWidget->setItem(row, 4, item);
182 m_ui->addFileButton->setEnabled(enabled);
183 m_ui->addFilesButton->setEnabled(enabled);
184 m_ui->rmFileButton->setEnabled(enabled);
185 m_ui->rmFilesButton->setEnabled(enabled);
186 m_ui->analysisButton->setEnabled(enabled);
187 m_ui->applyButton->setEnabled(enabled);
196 const int orcount =
m_paths.count();
198 for(
const QString &path :
qAsConst(files))
206 for(
int i = orcount; i <
m_paths.count(); ++i)
230 m_paths << fin.absoluteFilePath();
245 const int row =
m_ui->tableWidget->currentRow();
251 m_ui->tableWidget->removeRow(row);
257 m_ui->tableWidget->removeItems();
278 m_ui->progressBarAll->setRange(0,
m_ui->tableWidget->rowCount());
280 for(
int i = 0; i <
m_ui->tableWidget->rowCount(); ++i)
286 m_ui->progressBarAll->setValue(i + 1);
301 const double d = text.toDouble();
302 for(
int i = 0; i <
m_ui->tableWidget->rowCount(); ++i)
304 QString v =
m_ui->tableWidget->item(i, 1)->text();
305 m_ui->tableWidget->item(i, 2)->setText(QString::number(d - v.toDouble()));
306 v =
m_ui->tableWidget->item(i, 3)->text();
307 m_ui->tableWidget->item(i, 4)->setText(QString::number(d - v.toDouble()));
313 QString track, album;
321 track = QString(data.trimmed());
328 album = QString(data.trimmed());
332 if(!track.isEmpty() || !album.isEmpty())
342 const QByteArray &data =
m_process->readLine();
343 if(data.contains(
"Applying gain change"))
345 m_ui->progressBar->setValue(40);
347 else if(data.contains(
"done"))
349 m_ui->progressBar->setValue(100);
353 m_ui->progressBar->setValue(80);
360 const MusicSongList songs(
m_ui->selectedAreaWidget->selectedSongItems());
TTK_MODULE_EXPORT QString getExistingDirectory(QWidget *parent)
#define QtProcessFinishVoidConnect(p, q, f, s)
Process finished void connect.
Light plugin interface (Light factory).
static const QString CheckBoxStyle01
CheckBox.
int exec(ProcessEventsFlags flags=AllEvents)
#define QtProcessErrorVoidConnect(p, q, f, s)
Process error void connect.
#define QtItemSetTextAlignment(p, a)
Item text alignment.
static const QString ProgressBar01
ProgressBar.
static const QString HeaderView01
HeadView.
The class of the ttk event loop.
virtual void open(const QString &path)=0
virtual Light * create(QWidget *parent)=0
static void popup(const QString &text)
static const QString ScrollBarStyle03
static const QString PushButtonStyle04
#define TTK_REMOVE_SINGLE_WIDGET(object)
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.
#define TTKObjectCast(x, y)