diff options
Diffstat (limited to 'src/qmmpui/configdialog.cpp.orig')
| -rw-r--r-- | src/qmmpui/configdialog.cpp.orig | 450 |
1 files changed, 450 insertions, 0 deletions
diff --git a/src/qmmpui/configdialog.cpp.orig b/src/qmmpui/configdialog.cpp.orig new file mode 100644 index 000000000..faa451642 --- /dev/null +++ b/src/qmmpui/configdialog.cpp.orig @@ -0,0 +1,450 @@ +/*************************************************************************** + * Copyright (C) 2007-2013 by Ilya Kotov * + * forkotov02@hotmail.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 <QFontDialog> +#include <QTreeWidgetItem> +#include <QHeaderView> +#include <QCheckBox> +#include <QRadioButton> +#include <QMenu> +#include <QMessageBox> +#include <QTreeWidgetItem> +#include <qmmp/decoder.h> +#include <qmmp/output.h> +#include <qmmp/decoderfactory.h> +#include <qmmp/outputfactory.h> +#include <qmmp/visualfactory.h> +#include <qmmp/effectfactory.h> +#include <qmmp/effect.h> +#include <qmmp/soundcore.h> +#include <qmmp/enginefactory.h> +#include <qmmp/abstractengine.h> +#include <qmmp/qmmpsettings.h> +#include <qmmp/inputsource.h> +#include <qmmp/inputsourcefactory.h> +#include "ui_configdialog.h" +#include "pluginitem_p.h" +#include "radioitemdelegate_p.h" +#include "generalfactory.h" +#include "general.h" +#include "uihelper.h" +#include "uiloader.h" +#include "filedialog.h" +#include "mediaplayer.h" +#include "qmmpuisettings.h" +#include "playlistmodel.h" +#include "configdialog.h" + +ConfigDialog::ConfigDialog (QWidget *parent) : QDialog (parent) +{ + m_ui = new Ui::ConfigDialog; + m_ui->setupUi (this); + m_insert_row = 0; + setAttribute(Qt::WA_QuitOnClose, false); + setAttribute(Qt::WA_DeleteOnClose, false); + m_ui->preferencesButton->setEnabled(false); + m_ui->informationButton->setEnabled(false); + m_ui->treeWidget->setItemDelegate(new RadioItemDelegate(this)); + connect (this, SIGNAL(rejected()),SLOT(saveSettings())); + m_ui->replayGainModeComboBox->addItem (tr("Track"), QmmpSettings::REPLAYGAIN_TRACK); + m_ui->replayGainModeComboBox->addItem (tr("Album"), QmmpSettings::REPLAYGAIN_ALBUM); + m_ui->replayGainModeComboBox->addItem (tr("Disabled"), QmmpSettings::REPLAYGAIN_DISABLED); + readSettings(); + loadPluginsInfo(); + loadLanguages(); + createMenus(); + //setup icons + m_ui->preferencesButton->setIcon(QIcon::fromTheme("configure")); + m_ui->informationButton->setIcon(QIcon::fromTheme("dialog-information")); +} + +ConfigDialog::~ConfigDialog() +{ + delete m_ui; +} + +void ConfigDialog::addPage(const QString &name, QWidget *widget, const QIcon &icon) +{ + m_ui->stackedWidget->insertWidget(m_insert_row, widget); + m_ui->contentsWidget->insertItem (m_insert_row, name); + m_ui->contentsWidget->item(m_insert_row)->setIcon(icon); + m_ui->contentsWidget->setCurrentRow(0); + m_insert_row++; +} + +void ConfigDialog::readSettings() +{ + if (MediaPlayer::instance()) + { + //playlist options + QmmpUiSettings *guis = QmmpUiSettings::instance(); + m_ui->formatLineEdit->setText(guis->titleFormat()); + m_ui->groupLineEdit->setText(guis->groupFormat()); + m_ui->metadataCheckBox->setChecked(guis->useMetadata()); + m_ui->underscoresCheckBox->setChecked(guis->convertUnderscore()); + m_ui->per20CheckBox->setChecked(guis->convertTwenty()); + //resume playback on startup + m_ui->continuePlaybackCheckBox->setChecked(guis->resumeOnStartup()); + //directory filters + m_ui->dirRestrictLineEdit->setText(guis->restrictFilters().join(";").trimmed()); + m_ui->dirExcludeLineEdit->setText(guis->excludeFilters().join(";").trimmed()); + //default playlist + m_ui->defaultPlayListCheckBox->setChecked(guis->useDefaultPlayList()); + m_ui->defaultPlayListLineEdit->setText(guis->defaultPlayListName()); + //playlist auto-save when modified + m_ui->autoSavePlayListCheckBox->setChecked(guis->autoSavePlayList()); + //url dialog + m_ui->clipboardCheckBox->setChecked(guis->useClipboard()); + } + //proxy settings + QmmpSettings *gs = QmmpSettings::instance(); + m_ui->enableProxyCheckBox->setChecked(gs->isProxyEnabled()); + m_ui->authProxyCheckBox->setChecked(gs->useProxyAuth()); + m_ui->hostLineEdit->setText(gs->proxy().host()); + if (gs->proxy().port(0)) + m_ui->portLineEdit->setText(QString::number(gs->proxy().port(0))); + m_ui->proxyUserLineEdit->setText(gs->proxy().userName()); + m_ui->proxyPasswLineEdit->setText(gs->proxy().password()); + + m_ui->hostLineEdit->setEnabled(m_ui->enableProxyCheckBox->isChecked()); + m_ui->portLineEdit->setEnabled(m_ui->enableProxyCheckBox->isChecked()); + m_ui->proxyUserLineEdit->setEnabled(m_ui->authProxyCheckBox->isChecked()); + m_ui->proxyPasswLineEdit->setEnabled(m_ui->authProxyCheckBox->isChecked()); + //file type determination + m_ui->byContentCheckBox->setChecked(gs->determineFileTypeByContent()); + //cover options + m_ui->coverIncludeLineEdit->setText(gs->coverNameFilters(true).join(",")); + m_ui->coverExcludeLineEdit->setText(gs->coverNameFilters(false).join(",")); + m_ui->coverDepthSpinBox->setValue(gs->coverSearchDepth()); + m_ui->useCoverFilesCheckBox->setChecked(gs->useCoverFiles()); + //replay gain + m_ui->clippingCheckBox->setChecked(gs->replayGainPreventClipping()); + m_ui->replayGainModeComboBox->setCurrentIndex(m_ui->replayGainModeComboBox->findData(gs->replayGainMode())); + m_ui->preampDoubleSpinBox->setValue(gs->replayGainPreamp()); + m_ui->defaultGainDoubleSpinBox->setValue(gs->replayGainDefaultGain()); + //audio + m_ui->softVolumeCheckBox->setChecked(gs->useSoftVolume()); + m_ui->use16BitCheckBox->setChecked(gs->use16BitOutput()); + m_ui->bufferSizeSpinBox->setValue(gs->bufferSize()); + //geometry + QSettings settings (Qmmp::configFile(), QSettings::IniFormat); + resize(settings.value("ConfigDialog/window_size", QSize(700,470)).toSize()); + QList<QVariant> var_sizes = settings.value("ConfigDialog/splitter_sizes").toList(); + if(var_sizes.count() != 2) + { + var_sizes.clear(); + var_sizes << 180 << width()-180; + } + QList<int> sizes; + sizes << var_sizes.first().toInt() << var_sizes.last().toInt(); + m_ui->splitter->setSizes(sizes); +} + +void ConfigDialog::on_contentsWidget_currentItemChanged (QListWidgetItem *current, + QListWidgetItem *previous) +{ + if (!current) + current = previous; + m_ui->stackedWidget->setCurrentIndex (m_ui->contentsWidget->row (current)); +} + +void ConfigDialog::loadPluginsInfo() +{ + m_ui->treeWidget->blockSignals(true); + /* + load transport plugin information + */ + QTreeWidgetItem *item = new QTreeWidgetItem (m_ui->treeWidget, QStringList() << tr("Transports")); + foreach(InputSourceFactory *factory, InputSource::factories()) + { + new PluginItem (item, factory, InputSource::file(factory)); + } + m_ui->treeWidget->addTopLevelItem(item); + item->setExpanded(true); + /* + load input plugins information + */ + item = new QTreeWidgetItem (m_ui->treeWidget, QStringList() << tr("Decoders")); + foreach(DecoderFactory *factory, Decoder::factories()) + { + new PluginItem (item, factory, Decoder::file(factory)); + } + m_ui->treeWidget->addTopLevelItem(item); + item->setExpanded(true); + /* + load audio engines information + */ + item = new QTreeWidgetItem (m_ui->treeWidget, QStringList() << tr("Engines")); + foreach(EngineFactory *factory, AbstractEngine::factories()) + { + new PluginItem (item, factory, AbstractEngine::file(factory)); + } + m_ui->treeWidget->addTopLevelItem(item); + item->setExpanded(true); + /* + load effect plugin information + */ + item = new QTreeWidgetItem (m_ui->treeWidget, QStringList() << tr("Effects")); + foreach(EffectFactory *factory, Effect::factories()) + { + new PluginItem (item, factory, Effect::file(factory)); + } + m_ui->treeWidget->addTopLevelItem(item); + item->setExpanded(true); + /* + load visual plugin information + */ + item = new QTreeWidgetItem (m_ui->treeWidget, QStringList() << tr("Visualization")); + foreach(VisualFactory *factory, Visual::factories()) + { + new PluginItem (item, factory, Visual::file(factory)); + } + m_ui->treeWidget->addTopLevelItem(item); + item->setExpanded(true); + /* + load general plugin information + */ + item = new QTreeWidgetItem (m_ui->treeWidget, QStringList() << tr("General")); + foreach(GeneralFactory *factory, General::factories()) + { + new PluginItem (item, factory, General::file(factory)); + } + m_ui->treeWidget->addTopLevelItem(item); + item->setExpanded(true); + /* + load output plugins information + */ + item = new QTreeWidgetItem (m_ui->treeWidget, QStringList() << tr("Output")); + foreach(OutputFactory *factory, Output::factories()) + { + new PluginItem (item, factory, Output::file(factory)); + } + m_ui->treeWidget->addTopLevelItem(item); + item->setExpanded(true); + /* + load file dialogs information + */ + item = new QTreeWidgetItem (m_ui->treeWidget, QStringList() << tr("File Dialogs")); + foreach(FileDialogFactory *factory, FileDialog::factories()) + { + new PluginItem (item, factory, FileDialog::file(factory)); + } + m_ui->treeWidget->addTopLevelItem(item); + item->setExpanded(true); + /* + load user interfaces information + */ + item = new QTreeWidgetItem (m_ui->treeWidget, QStringList() << tr("User Interfaces")); + foreach(UiFactory *factory, UiLoader::factories()) + { + new PluginItem (item, factory, UiLoader::file(factory)); + } + m_ui->treeWidget->addTopLevelItem(item); + item->setExpanded(true); + + m_ui->treeWidget->blockSignals(false); + m_ui->treeWidget->resizeColumnToContents(0); + m_ui->treeWidget->resizeColumnToContents(1); +} + +void ConfigDialog::on_preferencesButton_clicked() +{ + QTreeWidgetItem *item = m_ui->treeWidget->currentItem(); + if(item && item->type() >= PluginItem::TRANSPORT) + dynamic_cast<PluginItem *>(item)->showSettings(this); + +} + +void ConfigDialog::on_informationButton_clicked() +{ + QTreeWidgetItem *item = m_ui->treeWidget->currentItem(); + if(item && item->type() >= PluginItem::TRANSPORT) + dynamic_cast<PluginItem *>(item)->showAbout(this); +} + +void ConfigDialog::createMenus() +{ + QMenu *titleMenu = new QMenu(this); + + titleMenu->addAction(tr("Artist"))->setData("%p"); + titleMenu->addAction(tr("Album"))->setData("%a"); + titleMenu->addAction(tr("Title"))->setData("%t"); + titleMenu->addAction(tr("Track number"))->setData("%n"); + titleMenu->addAction(tr("Two-digit track number"))->setData("%NN"); + titleMenu->addAction(tr("Genre"))->setData("%g"); + titleMenu->addAction(tr("Comment"))->setData("%c"); + titleMenu->addAction(tr("Composer"))->setData("%C"); + titleMenu->addAction(tr("Disc number"))->setData("%D"); + titleMenu->addAction(tr("File name"))->setData("%f"); + titleMenu->addAction(tr("File path"))->setData("%F"); + titleMenu->addAction(tr("Year"))->setData("%y"); + titleMenu->addAction(tr("Condition"))->setData("%if(%p&%t,%p - %t,%f)"); + + m_ui->titleButton->setMenu(titleMenu); + m_ui->titleButton->setPopupMode(QToolButton::InstantPopup); + connect(titleMenu, SIGNAL(triggered (QAction *)), SLOT(addTitleString(QAction *))); + + QMenu *groupMenu = new QMenu(this); + + groupMenu->addAction(tr("Artist"))->setData("%p"); + groupMenu->addAction(tr("Album"))->setData("%a"); + groupMenu->addAction(tr("Genre"))->setData("%g"); + groupMenu->addAction(tr("Comment"))->setData("%c"); + groupMenu->addAction(tr("Composer"))->setData("%C"); + groupMenu->addAction(tr("Disc number"))->setData("%D"); + groupMenu->addAction(tr("Year"))->setData("%y"); + groupMenu->addAction(tr("Condition"))->setData("%if(%p&%a,%p - %a,%p%a)"); + groupMenu->addAction(tr("Artist/Album"))->setData("%p%if(%p&%a, - ,)%a"); + groupMenu->addAction(tr("Artist/Year/Album"))->setData("%p%if(%p&%a, - %if(%y,[%y] ,),)%a"); + + m_ui->groupButton->setMenu(groupMenu); + m_ui->groupButton->setPopupMode(QToolButton::InstantPopup); + connect(groupMenu, SIGNAL(triggered (QAction *)), SLOT(addGroupString(QAction *))); +} + +void ConfigDialog::loadLanguages() +{ + QMap<QString, QString> l; + l["auto"] = tr("<Autodetect>"); + l["pt_BR"] = tr("Brazilian Portuguese"); + l["zh_CN"] = tr("Chinese Simplified"); + l["zh_TW"] = tr("Chinese Traditional"); + l["cs"] = tr("Czech"); + l["nl"] = tr("Dutch"); + l["en_US"] = tr("English"); + l["fr"] = tr("French"); + l["de"] = tr("German"); + l["he"] = tr("Hebrew"); + l["hu"] = tr("Hungarian"); + l["it"] = tr("Italian"); + l["ja"] = tr("Japanese"); + l["kk"] = tr("Kazakh"); + l["lt"] = tr("Lithuanian"); + l["pl_PL"] = tr("Polish"); + l["ru_RU"] = tr("Russian"); + l["sk"] = tr("Slovak"); + l["es"] = tr("Spanish"); + l["tr"] = tr("Turkish"); + l["uk_UA"] = tr("Ukrainian"); + + foreach(QString code, l.keys()) + { + QString title = code != "auto" ? l.value(code) + " (" + code + ")" : l.value(code); + m_ui->langComboBox->addItem(title, code); + } + + QString code = Qmmp::uiLanguageID(); + int index = m_ui->langComboBox->findData(code); + if(index < 0) + index = m_ui->langComboBox->findData("auto"); + m_ui->langComboBox->setCurrentIndex(index); +} + +void ConfigDialog::addTitleString(QAction * a) +{ + if (m_ui->formatLineEdit->cursorPosition () < 1) + m_ui->formatLineEdit->insert(a->data().toString()); + else + m_ui->formatLineEdit->insert(" - "+a->data().toString()); +} + +void ConfigDialog::addGroupString(QAction *a) +{ + if (m_ui->groupLineEdit->cursorPosition () < 1) + m_ui->groupLineEdit->insert(a->data().toString()); + else + m_ui->groupLineEdit->insert(" - "+a->data().toString()); +} + +void ConfigDialog::saveSettings() +{ + if (QmmpUiSettings *guis = QmmpUiSettings::instance()) + { + guis->setTitleFormat(m_ui->formatLineEdit->text().trimmed()); + guis->setGroupFormat(m_ui->groupLineEdit->text().trimmed()); + guis->setUseMetadata(m_ui->metadataCheckBox->isChecked()); + guis->setConvertUnderscore(m_ui->underscoresCheckBox->isChecked()); + guis->setConvertTwenty(m_ui->per20CheckBox->isChecked()); + guis->setResumeOnStartup(m_ui->continuePlaybackCheckBox->isChecked()); + guis->setRestrictFilters(m_ui->dirRestrictLineEdit->text()); + guis->setExcludeFilters(m_ui->dirExcludeLineEdit->text()); + guis->setDefaultPlayList(m_ui->defaultPlayListLineEdit->text(), + m_ui->defaultPlayListCheckBox->isChecked()); + guis->setAutoSavePlayList(m_ui->autoSavePlayListCheckBox->isChecked()); + guis->setUseClipboard(m_ui->clipboardCheckBox->isChecked()); + guis->sync(); + } + + QmmpSettings *gs = QmmpSettings::instance(); + //proxy + QUrl proxyUrl; + proxyUrl.setHost(m_ui->hostLineEdit->text()); + proxyUrl.setPort(m_ui->portLineEdit->text().toUInt()); + proxyUrl.setUserName(m_ui->proxyUserLineEdit->text()); + proxyUrl.setPassword(m_ui->proxyPasswLineEdit->text()); + gs->setNetworkSettings(m_ui->enableProxyCheckBox->isChecked(), + m_ui->authProxyCheckBox->isChecked(), + proxyUrl); + + gs->setCoverSettings(m_ui->coverIncludeLineEdit->text().split(","), + m_ui->coverExcludeLineEdit->text().split(","), + m_ui->coverDepthSpinBox->value(), + m_ui->useCoverFilesCheckBox->isChecked()); + int i = m_ui->replayGainModeComboBox->currentIndex(); + gs->setReplayGainSettings((QmmpSettings::ReplayGainMode) + m_ui->replayGainModeComboBox->itemData(i).toInt(), + m_ui->preampDoubleSpinBox->value(), + m_ui->defaultGainDoubleSpinBox->value(), + m_ui->clippingCheckBox->isChecked()); + gs->setAudioSettings(m_ui->softVolumeCheckBox->isChecked(), m_ui->use16BitCheckBox->isChecked()); + gs->setBufferSize(m_ui->bufferSizeSpinBox->value()); + gs->setDetermineFileTypeByContent(m_ui->byContentCheckBox->isChecked()); + gs->sync(); + QList<QVariant> var_sizes; + var_sizes << m_ui->splitter->sizes().first() << m_ui->splitter->sizes().last(); + QSettings settings (Qmmp::configFile(), QSettings::IniFormat); + settings.setValue("ConfigDialog/splitter_sizes", var_sizes); + settings.setValue("ConfigDialog/window_size", size()); + //User interface language + int index = m_ui->langComboBox->currentIndex(); + if(index >= 0) + Qmmp::setUiLanguageID(m_ui->langComboBox->itemData(index).toString()); +} + +void ConfigDialog::on_treeWidget_itemChanged (QTreeWidgetItem *item, int column) +{ + if(column == 0 && item->type() >= PluginItem::TRANSPORT) + dynamic_cast<PluginItem *>(item)->setEnabled(item->checkState(0) == Qt::Checked); +} + +void ConfigDialog::on_treeWidget_currentItemChanged (QTreeWidgetItem *current, QTreeWidgetItem *) +{ + if(current->type() >= PluginItem::TRANSPORT) + { + m_ui->preferencesButton->setEnabled(dynamic_cast<PluginItem *>(current)->hasSettings()); + m_ui->informationButton->setEnabled(dynamic_cast<PluginItem *>(current)->hasAbout()); + } + else + { + m_ui->preferencesButton->setEnabled(false); + m_ui->informationButton->setEnabled(false); + } +} |
