File indexing completed on 2024-04-21 04:48:17

0001 /* AUDEX CDDA EXTRACTOR
0002  * SPDX-FileCopyrightText: Copyright (C) 2007 Marco Nelles
0003  * <https://userbase.kde.org/Audex>
0004  *
0005  * SPDX-License-Identifier: GPL-3.0-or-later
0006  */
0007 
0008 #include "oggencwidget.h"
0009 
0010 #include <QDebug>
0011 
0012 oggencWidget::oggencWidget(Parameters *parameters, QWidget *parent)
0013     : oggencWidgetUI(parent)
0014 {
0015     Q_UNUSED(parent);
0016 
0017     this->parameters = parameters;
0018     if (!parameters) {
0019         qDebug() << "ParameterString is NULL!";
0020         return;
0021     }
0022 
0023     horizontalSlider_quality->setValue(parameters->value(ENCODER_OGGENC_QUALITY_KEY, ENCODER_OGGENC_QUALITY).toInt() * 10);
0024 
0025     kdoublenuminput_quality->setValue(parameters->value(ENCODER_OGGENC_QUALITY_KEY, ENCODER_OGGENC_QUALITY).toReal());
0026 
0027     set_bitrate(parameters->value(ENCODER_OGGENC_QUALITY_KEY, ENCODER_OGGENC_QUALITY).toInt());
0028 
0029     enable_min_bitrate(parameters->value(ENCODER_OGGENC_MINBITRATE_KEY).toBool());
0030     checkBox_minbitrate->setChecked(parameters->value(ENCODER_OGGENC_MINBITRATE_KEY).toBool());
0031     kintspinbox_minbitrate->setValue(parameters->value(ENCODER_OGGENC_MINBITRATE_VALUE_KEY, ENCODER_OGGENC_MINBITRATE_VALUE).toInt());
0032     set_minbitrate(parameters->value(ENCODER_OGGENC_MINBITRATE_VALUE_KEY, ENCODER_OGGENC_MINBITRATE_VALUE).toInt());
0033     enable_max_bitrate(parameters->value(ENCODER_OGGENC_MAXBITRATE_KEY).toBool());
0034     checkBox_maxbitrate->setChecked(parameters->value(ENCODER_OGGENC_MAXBITRATE_KEY).toBool());
0035     kintspinbox_maxbitrate->setValue(parameters->value(ENCODER_OGGENC_MAXBITRATE_VALUE_KEY, ENCODER_OGGENC_MAXBITRATE_VALUE).toInt());
0036     set_maxbitrate(parameters->value(ENCODER_OGGENC_MAXBITRATE_VALUE_KEY, ENCODER_OGGENC_MAXBITRATE_VALUE).toInt());
0037     qlineedit_suffix->setText(parameters->value(ENCODER_OGGENC_SUFFIX_KEY, ENCODER_OGGENC_SUFFIX).toString());
0038 
0039     connect(horizontalSlider_quality, SIGNAL(valueChanged(int)), this, SLOT(quality_changed_by_slider(int)));
0040     connect(horizontalSlider_quality, SIGNAL(valueChanged(int)), this, SLOT(trigger_changed()));
0041 
0042     connect(kdoublenuminput_quality, SIGNAL(valueChanged(double)), this, SLOT(quality_changed_by_spinbox(double)));
0043     connect(kdoublenuminput_quality, SIGNAL(valueChanged(double)), this, SLOT(trigger_changed()));
0044 
0045     connect(checkBox_minbitrate, SIGNAL(toggled(bool)), this, SLOT(enable_min_bitrate(bool)));
0046     connect(checkBox_minbitrate, SIGNAL(toggled(bool)), this, SLOT(trigger_changed()));
0047     connect(checkBox_maxbitrate, SIGNAL(toggled(bool)), this, SLOT(enable_max_bitrate(bool)));
0048     connect(checkBox_maxbitrate, SIGNAL(toggled(bool)), this, SLOT(trigger_changed()));
0049 
0050     connect(kintspinbox_minbitrate, SIGNAL(valueChanged(int)), this, SLOT(trigger_changed()));
0051     connect(kintspinbox_minbitrate, SIGNAL(valueChanged(int)), this, SLOT(set_minbitrate(int)));
0052     connect(kintspinbox_maxbitrate, SIGNAL(valueChanged(int)), this, SLOT(trigger_changed()));
0053     connect(kintspinbox_maxbitrate, SIGNAL(valueChanged(int)), this, SLOT(set_maxbitrate(int)));
0054 
0055     connect(qlineedit_suffix, SIGNAL(textEdited(const QString &)), this, SLOT(trigger_changed()));
0056 
0057     changed = false;
0058 }
0059 
0060 oggencWidget::~oggencWidget()
0061 {
0062 }
0063 
0064 bool oggencWidget::save()
0065 {
0066     bool success = true;
0067 
0068     parameters->setValue(ENCODER_OGGENC_QUALITY_KEY, kdoublenuminput_quality->value());
0069     parameters->setValue(ENCODER_OGGENC_MINBITRATE_KEY, checkBox_minbitrate->isChecked());
0070     parameters->setValue(ENCODER_OGGENC_MINBITRATE_VALUE_KEY, kintspinbox_minbitrate->value());
0071     parameters->setValue(ENCODER_OGGENC_MAXBITRATE_KEY, checkBox_maxbitrate->isChecked());
0072     parameters->setValue(ENCODER_OGGENC_MAXBITRATE_VALUE_KEY, kintspinbox_maxbitrate->value());
0073     parameters->setValue(ENCODER_OGGENC_SUFFIX_KEY, qlineedit_suffix->text());
0074 
0075     changed = false;
0076 
0077     return success;
0078 }
0079 
0080 void oggencWidget::quality_changed_by_slider(int quality)
0081 {
0082     auto q = (float)((float)quality / 10.0f);
0083 
0084     kdoublenuminput_quality->blockSignals(true);
0085     kdoublenuminput_quality->setValue(q);
0086     kdoublenuminput_quality->blockSignals(false);
0087 
0088     set_bitrate(q);
0089 }
0090 
0091 void oggencWidget::quality_changed_by_spinbox(double quality)
0092 {
0093     int q = (int)((float)quality * 10.0f);
0094 
0095     horizontalSlider_quality->blockSignals(true);
0096     horizontalSlider_quality->setValue(q);
0097     horizontalSlider_quality->blockSignals(false);
0098 
0099     set_bitrate(quality);
0100 }
0101 
0102 void oggencWidget::set_bitrate(float quality)
0103 {
0104     int q = (int)quality;
0105 
0106     switch (q) {
0107     case -1:
0108         lineEdit_kbps->setText("48");
0109         break;
0110     case 0:
0111         lineEdit_kbps->setText("64");
0112         break;
0113     case 1:
0114         lineEdit_kbps->setText("80");
0115         break;
0116     case 2:
0117         lineEdit_kbps->setText("96");
0118         break;
0119     case 3:
0120         lineEdit_kbps->setText("112");
0121         break;
0122     case 4:
0123         lineEdit_kbps->setText("128");
0124         break;
0125     case 5:
0126         lineEdit_kbps->setText("160");
0127         break;
0128     case 6:
0129         lineEdit_kbps->setText("192");
0130         break;
0131     case 7:
0132         lineEdit_kbps->setText("224");
0133         break;
0134     case 8:
0135         lineEdit_kbps->setText("256");
0136         break;
0137     case 9:
0138         lineEdit_kbps->setText("320");
0139         break;
0140     case 10:
0141         lineEdit_kbps->setText("500");
0142         break;
0143     }
0144 }
0145 
0146 void oggencWidget::enable_min_bitrate(bool enable)
0147 {
0148     kintspinbox_minbitrate->setEnabled(enable);
0149     label_minbitrate_kbps->setEnabled(enable);
0150 }
0151 
0152 void oggencWidget::set_minbitrate(int bitrate)
0153 {
0154     kintspinbox_maxbitrate->blockSignals(true);
0155     kintspinbox_maxbitrate->setMinimum(bitrate);
0156     kintspinbox_maxbitrate->blockSignals(false);
0157 }
0158 
0159 void oggencWidget::enable_max_bitrate(bool enable)
0160 {
0161     kintspinbox_maxbitrate->setEnabled(enable);
0162     label_maxbitrate_kbps->setEnabled(enable);
0163 }
0164 
0165 void oggencWidget::set_maxbitrate(int bitrate)
0166 {
0167     kintspinbox_minbitrate->blockSignals(true);
0168     kintspinbox_minbitrate->setMaximum(bitrate);
0169     kintspinbox_minbitrate->blockSignals(false);
0170 }
0171 
0172 void oggencWidget::trigger_changed()
0173 {
0174     changed = (kdoublenuminput_quality->value() != parameters->value(ENCODER_OGGENC_QUALITY_KEY, ENCODER_OGGENC_QUALITY).toReal()
0175                || kintspinbox_minbitrate->value() != parameters->value(ENCODER_OGGENC_MINBITRATE_VALUE_KEY, ENCODER_OGGENC_MINBITRATE_VALUE).toInt()
0176                || checkBox_minbitrate->isChecked() != parameters->value(ENCODER_OGGENC_MINBITRATE_KEY).toBool()
0177                || kintspinbox_maxbitrate->value() != parameters->value(ENCODER_OGGENC_MAXBITRATE_VALUE_KEY, ENCODER_OGGENC_MAXBITRATE_VALUE).toInt()
0178                || checkBox_maxbitrate->isChecked() != parameters->value(ENCODER_OGGENC_MAXBITRATE_KEY).toBool()
0179                || qlineedit_suffix->text() != parameters->value(ENCODER_OGGENC_SUFFIX_KEY, ENCODER_OGGENC_SUFFIX).toString());
0180 
0181     Q_EMIT triggerChanged();
0182 }