aboutsummaryrefslogblamecommitdiff
path: root/src/plugins/General/library/settingsdialog.cpp
blob: f67b2997cf1a3f390859703d15c0dcfe39c738ca (plain) (tree)
1
2
                                                                            
                                                                            

















                                                                             
               
                    

                       

                              







                                                 



                                                                                  

                                                                                                      






                                 









                                                                 

                                                                                          


                      














                                                                                                             
/***************************************************************************
 *   Copyright (C) 2020-2021 by Ilya Kotov                                 *
 *   forkotov02@ya.ru                                                      *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
 ***************************************************************************/

#include <QDir>
#include <QSettings>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <qmmp/qmmp.h>
#include <qmmpui/filedialog.h>
#include "settingsdialog.h"
#include "ui_settingsdialog.h"

SettingsDialog::SettingsDialog(QWidget *parent) :
    QDialog(parent),
    m_ui(new Ui::SettingsDialog)
{
    m_ui->setupUi(this);
    QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
    m_lastPath = settings.value("Library/last_path", QDir::homePath()).toString();
    QStringList dirs = settings.value("Library/dirs").toStringList();
    m_ui->dirsListWidget->addItems(dirs);
    m_ui->showYearCheckBox->setChecked(settings.value("Library/show_year", false).toBool());
    m_ui->recreateDatabaseCheckBox->setChecked(settings.value("Library/recreate_db", false).toBool());
}

SettingsDialog::~SettingsDialog()
{
    delete m_ui;
}

void SettingsDialog::accept()
{
    QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
    settings.setValue("Library/last_path", m_lastPath);

    QStringList dirs;
    for(int i = 0; i < m_ui->dirsListWidget->count(); ++i)
        dirs << m_ui->dirsListWidget->item(i)->text();

    settings.setValue("Library/dirs", dirs);
    settings.setValue("Library/show_year", m_ui->showYearCheckBox->isChecked());
    settings.setValue("Library/recreate_db", m_ui->recreateDatabaseCheckBox->isChecked());
    QDialog::accept();
}

void SettingsDialog::on_addDirButton_clicked()
{
    QString path = FileDialog::getExistingDirectory(this, tr("Select Directories for Scanning"), m_lastPath);
    if(!path.isEmpty())
    {
        m_ui->dirsListWidget->addItem(path);
        m_lastPath = QFileInfo(path).absolutePath();
    }
}

void SettingsDialog::on_removeDirButton_clicked()
{
    QList<QListWidgetItem *> items = m_ui->dirsListWidget->selectedItems();
    qDeleteAll(items);
}
an class="hl kwa">for(int i = 0; i < 16; ++i) { QSlider *slider = new QSlider(this); slider->setRange(-20, 20); slider->setTickPosition(QSlider::TicksLeft); slider->setTickInterval(10); QLabel *label = new QLabel(this); label->setFrameShape(QFrame::Box); label->setText(names.at(i)); slidersLayout->addWidget(slider, 1, i, Qt::AlignHCenter); slidersLayout->addWidget(label, 2, i, Qt::AlignHCenter); QLabel *label2 = new QLabel(this); label2->setText(tr("%1dB").arg(0)); label2->setFrameShape(QFrame::Box); label2->setMinimumWidth(fontMetrics().width(tr("+%1dB").arg(20) + 5)); label2->setAlignment(Qt::AlignCenter); slidersLayout->addWidget(label2, 0, i, Qt::AlignHCenter); connect(slider, SIGNAL(valueChanged(int)), SLOT(updateLabel())); m_sliders << slider; m_labels << label2; } m_layout->addItem(slidersLayout); m_layout->addItem(buttonsLayout); setMinimumHeight(300); foreach(QSlider *slider, m_sliders) { connect(slider, SIGNAL(valueChanged(int)), SLOT(applySettings())); } connect(m_enabled, SIGNAL(clicked()), SLOT(applySettings())); readSettigs(); loadPresets(); } Equalizer::~Equalizer() { savePresets(); qDeleteAll(m_presets); m_presets.clear(); } void Equalizer::readSettigs() { EqSettings settings = QmmpSettings::instance()->eqSettings(); m_enabled->setChecked(settings.isEnabled()); m_sliders.at(0)->setValue(settings.preamp()); for(int i = 0; i < EqSettings::EQ_BANDS_15; ++i) { m_sliders.at(i+1)->setValue(settings.gain(i)); } } void Equalizer::loadPresets() { m_presetComboBox->clear(); //equalizer presets QString preset_path = Qmmp::configDir() + "eq15.preset"; if(!QFile::exists(preset_path)) preset_path = ":/qsui/eq15.preset"; QSettings eq_preset (preset_path, QSettings::IniFormat); int i = 0; while(eq_preset.contains("Presets/Preset"+QString("%1").arg(++i))) { QString name = eq_preset.value(QString("Presets/Preset%1").arg(i), tr("preset")).toString(); EQPreset *preset = new EQPreset(); //preset->setText(name); eq_preset.beginGroup(name); for (int j = 0; j < EqSettings::EQ_BANDS_15; ++j) { preset->setGain(j,eq_preset.value(QString("Band%1").arg(j), 0).toDouble()); } preset->setPreamp(eq_preset.value("Preamp",0).toDouble()); m_presets.append(preset); m_presetComboBox->addItem(name); eq_preset.endGroup(); } m_presetComboBox->clearEditText(); } void Equalizer::applySettings() { EqSettings settings(EqSettings::EQ_BANDS_15); settings.setPreamp(m_sliders.at(0)->value()); settings.setEnabled(m_enabled->isChecked()); for(int i = 0; i < EqSettings::EQ_BANDS_15; ++i) { settings.setGain(i, m_sliders.at(i+1)->value()); } QmmpSettings::instance()->setEqSettings(settings); } void Equalizer::resetSettings() { foreach(QSlider *slider, m_sliders) { slider->setValue(0); } applySettings(); m_presetComboBox->setCurrentIndex(-1); } void Equalizer::updateLabel() { QSlider *slider = qobject_cast<QSlider *>(sender()); int index = m_sliders.indexOf(slider); if(index < 0) return; if(slider->value() > 0) m_labels[index]->setText(tr("+%1dB").arg(slider->value())); else m_labels[index]->setText(tr("%1dB").arg(slider->value())); } void Equalizer::loadPreset(int index) { EQPreset *preset = m_presets.at(index); m_sliders.at(0)->setValue(preset->preamp()); for(int i = 0; i < EqSettings::EQ_BANDS_15; ++i) { m_sliders.at(i+1)->setValue(preset->gain(i)); } applySettings(); } void Equalizer::savePreset() { QString name = m_presetComboBox->currentText(); if(name.isEmpty()) return; int index = m_presetComboBox->findText(name); if(index != -1) { if(QMessageBox::question(this, tr("Overwrite Request"), tr("Preset '%1' already exists. Overwrite?").arg(name), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No) return; m_presets[index]->setPreamp(m_sliders.at(0)->value()); for(int i = 0; i < EqSettings::EQ_BANDS_15; ++i) { m_presets[index]->setGain(i, m_sliders.at(i+1)->value()); } } else { m_presetComboBox->addItem(name); EQPreset *preset = new EQPreset(); preset->setPreamp(m_sliders.at(0)->value()); for(int i = 0; i < EqSettings::EQ_BANDS_15; ++i) { preset->setGain(i, m_sliders.at(i+1)->value()); } m_presets.append(preset); } m_presetComboBox->clearEditText(); } void Equalizer::savePresets() { QSettings eq_preset (Qmmp::configDir() + "eq15.preset", QSettings::IniFormat); eq_preset.clear (); for (int i = 0; i < m_presets.size(); ++i) { eq_preset.setValue(QString("Presets/Preset%1").arg(i+1), m_presetComboBox->itemText(i)); eq_preset.beginGroup(m_presetComboBox->itemText(i)); for (int j = 0; j < EqSettings::EQ_BANDS_15; ++j) { eq_preset.setValue(QString("Band%1").arg(j),m_presets.at(i)->gain(j)); } eq_preset.setValue("Preamp",m_presets.at(i)->preamp()); eq_preset.endGroup(); } } void Equalizer::deletePreset() { QString name = m_presetComboBox->currentText(); if(name.isEmpty()) return; int index = m_presetComboBox->findText(name); if(index != -1) { m_presetComboBox->removeItem(index); delete m_presets.takeAt(index); } m_presetComboBox->clearEditText(); }