aboutsummaryrefslogtreecommitdiff
path: root/src/qmmpui/configdialog.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2011-07-12 17:45:06 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2011-07-12 17:45:06 +0000
commit4cb1b12751e486cea156c94c826c693fcf3d2f47 (patch)
tree0a8215e1caab4fa764fa54a272d2f730dc51a452 /src/qmmpui/configdialog.cpp
parent6eedde547fc8bebd5ee29c165970d1d46bc3b7a2 (diff)
downloadqmmp-4cb1b12751e486cea156c94c826c693fcf3d2f47.tar.gz
qmmp-4cb1b12751e486cea156c94c826c693fcf3d2f47.tar.bz2
qmmp-4cb1b12751e486cea156c94c826c693fcf3d2f47.zip
added configuration dialog
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@2270 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/qmmpui/configdialog.cpp')
-rw-r--r--src/qmmpui/configdialog.cpp371
1 files changed, 371 insertions, 0 deletions
diff --git a/src/qmmpui/configdialog.cpp b/src/qmmpui/configdialog.cpp
new file mode 100644
index 000000000..f64a83bd1
--- /dev/null
+++ b/src/qmmpui/configdialog.cpp
@@ -0,0 +1,371 @@
+/***************************************************************************
+ * Copyright (C) 2007-2011 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., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 "generalfactory.h"
+#include "general.h"
+#include "uihelper.h"
+#include "filedialog.h"
+#include "mediaplayer.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);
+ connect (this, SIGNAL(rejected()),SLOT(saveSettings()));
+ connect (m_ui->fileDialogComboBox, SIGNAL (currentIndexChanged (int)), SLOT(updateDialogButton(int)));
+ 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();
+ createMenus();
+ //setup icons
+ m_ui->preferencesButton->setIcon(QIcon::fromTheme("configure"));
+ m_ui->informationButton->setIcon(QIcon::fromTheme("dialog-information"));
+ m_ui->fdInformationButton->setIcon(QIcon::fromTheme("dialog-information"));
+ m_ui->outputInformationButton->setIcon(QIcon::fromTheme("dialog-information"));
+ m_ui->outputPreferencesButton->setIcon(QIcon::fromTheme("configure"));
+}
+
+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())
+ {
+ MediaPlayer *player = MediaPlayer::instance();
+ m_ui->formatLineEdit->setText(player->playListManager()->format());
+ m_ui->metadataCheckBox->setChecked(player->playListManager()->useMetadata());
+ m_ui->underscoresCheckBox->setChecked(player->playListManager()->convertUnderscore());
+ m_ui->per20CheckBox->setChecked(player->playListManager()->convertTwenty());
+ }
+ //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());
+ //resume playback
+ QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
+ m_ui->continuePlaybackCheckBox->setChecked(settings.value("General/resume_on_startup", false).toBool());
+ //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());
+}
+
+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"));
+ QList <InputSourceFactory *> *transports = InputSource::factories();
+ QStringList files = InputSource::files();
+ for (int i = 0; i < transports->count (); ++i)
+ new PluginItem (item, transports->at(i), files.at (i));
+ m_ui->treeWidget->addTopLevelItem(item);
+ item->setExpanded(true);
+ /*
+ load input plugins information
+ */
+ item = new QTreeWidgetItem (m_ui->treeWidget, QStringList() << tr("Decoders"));
+ QList <DecoderFactory *> *decoders = Decoder::factories();
+ files = Decoder::files();
+ for (int i = 0; i < decoders->count (); ++i)
+ new PluginItem (item, decoders->at(i), files.at (i));
+ m_ui->treeWidget->addTopLevelItem(item);
+ item->setExpanded(true);
+ /*
+ load audio engines information
+ */
+ item = new QTreeWidgetItem (m_ui->treeWidget, QStringList() << tr("Engines"));
+ QList <EngineFactory *> *engines = AbstractEngine::factories();
+ files = AbstractEngine::files();
+ for (int i = 0; i < engines->count (); ++i)
+ new PluginItem (item, engines->at(i), files.at (i));
+ m_ui->treeWidget->addTopLevelItem(item);
+ item->setExpanded(true);
+ /*
+ load effect plugin information
+ */
+ item = new QTreeWidgetItem (m_ui->treeWidget, QStringList() << tr("Effects"));
+ QList <EffectFactory *> *effects = Effect::factories();
+ files = Effect::files();
+ for (int i = 0; i < effects->count (); ++i)
+ new PluginItem (item, effects->at(i), files.at (i));
+ m_ui->treeWidget->addTopLevelItem(item);
+ item->setExpanded(true);
+ /*
+ load visual plugin information
+ */
+ item = new QTreeWidgetItem (m_ui->treeWidget, QStringList() << tr("Visualization"));
+ QList <VisualFactory *> *visuals = Visual::factories();
+ files = Visual::files();
+ for (int i = 0; i < visuals->count (); ++i)
+ new PluginItem (item, visuals->at(i), files.at (i));
+ m_ui->treeWidget->addTopLevelItem(item);
+ item->setExpanded(true);
+ /*
+ load general plugin information
+ */
+ item = new QTreeWidgetItem (m_ui->treeWidget, QStringList() << tr("General"));
+ QList <GeneralFactory *> *generals = General::factories();
+ files = General::files();
+ for (int i = 0; i < generals->count (); ++i)
+ new PluginItem (item, generals->at(i), files.at (i));
+ m_ui->treeWidget->addTopLevelItem(item);
+ item->setExpanded(true);
+
+ m_ui->treeWidget->blockSignals(false);
+ m_ui->treeWidget->resizeColumnToContents(0);
+ m_ui->treeWidget->resizeColumnToContents(1);
+ /*
+ load output plugins information
+ */
+ m_ui->outputInformationButton->setEnabled(false);
+ m_ui->outputPreferencesButton->setEnabled(false);
+ QList <OutputFactory *> *outputs = Output::factories();
+ for (int i = 0; i < outputs->count (); ++i)
+ {
+ m_ui->outputComboBox->addItem(outputs->at(i)->properties().name);
+ if(Output::currentFactory() == outputs->at(i))
+ {
+ m_ui->outputComboBox->setCurrentIndex(i);
+ on_outputComboBox_activated (i);
+ }
+ }
+ /*
+ load file dialog information
+ */
+ foreach(FileDialogFactory *factory, FileDialog::registeredFactories())
+ {
+ m_ui->fileDialogComboBox->addItem(factory->properties().name);
+ if (FileDialog::isEnabled(factory))
+ m_ui->fileDialogComboBox->setCurrentIndex(m_ui->fileDialogComboBox->count()-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 *menu = new QMenu(this);
+
+ menu->addAction(tr("Artist"))->setData("%p");
+ menu->addAction(tr("Album"))->setData("%a");
+ menu->addAction(tr("Title"))->setData("%t");
+ menu->addAction(tr("Track number"))->setData("%n");
+ menu->addAction(tr("Two-digit track number"))->setData("%NN");
+ menu->addAction(tr("Genre"))->setData("%g");
+ menu->addAction(tr("Comment"))->setData("%c");
+ menu->addAction(tr("Composer"))->setData("%C");
+ menu->addAction(tr("Disc number"))->setData("%D");
+ menu->addAction(tr("File name"))->setData("%f");
+ menu->addAction(tr("File path"))->setData("%F");
+ menu->addAction(tr("Year"))->setData("%y");
+ menu->addAction(tr("Condition"))->setData("%if(%p&%t,%p - %t,%f)");
+
+ m_ui->titleButton->setMenu(menu);
+ m_ui->titleButton->setPopupMode(QToolButton::InstantPopup);
+ connect(menu, SIGNAL(triggered (QAction *)), SLOT(addTitleString(QAction *)));
+}
+
+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::saveSettings()
+{
+ if (MediaPlayer *player = MediaPlayer::instance())
+ {
+ player->playListManager()->setFormat(m_ui->formatLineEdit->text().trimmed());
+ player->playListManager()->setUseMetadata(m_ui->metadataCheckBox->isChecked());
+ player->playListManager()->setConvertUnderscore(m_ui->underscoresCheckBox->isChecked());
+ player->playListManager()->setConvertTwenty(m_ui->per20CheckBox->isChecked());
+ }
+
+ FileDialog::setEnabled(FileDialog::registeredFactories().at(m_ui->fileDialogComboBox->currentIndex()));
+ 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);
+
+ QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
+ settings.setValue ("General/resume_on_startup", m_ui->continuePlaybackCheckBox->isChecked());
+ 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());
+ QList <OutputFactory *> *outputs = Output::factories();
+ if(m_ui->outputComboBox->currentIndex() >= 0 && outputs->count())
+ Output::setCurrentFactory(outputs->at(m_ui->outputComboBox->currentIndex()));
+}
+
+void ConfigDialog::updateDialogButton(int index)
+{
+ m_ui->fdInformationButton->setEnabled(FileDialog::registeredFactories()[index]->properties().hasAbout);
+}
+
+void ConfigDialog::on_fdInformationButton_clicked()
+{
+ int index = m_ui->fileDialogComboBox->currentIndex ();
+ FileDialog::registeredFactories()[index]->showAbout(this);
+}
+
+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);
+ }
+}
+
+void ConfigDialog::on_outputComboBox_activated (int index)
+{
+ OutputFactory *factory = Output::factories()->at(index);
+ m_ui->outputInformationButton->setEnabled(factory->properties().hasAbout);
+ m_ui->outputPreferencesButton->setEnabled(factory->properties().hasSettings);
+}
+
+void ConfigDialog::on_outputPreferencesButton_clicked()
+{
+ int index = m_ui->outputComboBox->currentIndex();
+ Output::factories()->at(index)->showSettings(this);
+}
+
+void ConfigDialog::on_outputInformationButton_clicked()
+{
+ int index = m_ui->outputComboBox->currentIndex();
+ Output::factories()->at(index)->showAbout(this);
+}