aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/General/dbuscontrol/dbuscontrolfactory.cpp6
-rw-r--r--src/plugins/General/dbuscontrol/dbuscontrolfactory.h2
-rw-r--r--src/plugins/General/scrobbler/scrobblerfactory.cpp5
-rw-r--r--src/plugins/General/scrobbler/scrobblerfactory.h2
-rw-r--r--src/plugins/General/scrobbler/settingsdialog.cpp1
-rw-r--r--src/plugins/General/statusicon/settingsdialog.cpp1
-rw-r--r--src/plugins/General/statusicon/statusiconfactory.cpp5
-rw-r--r--src/plugins/General/statusicon/statusiconfactory.h3
-rw-r--r--src/qmmpui/generalfactory.h3
-rw-r--r--src/qmmpui/generalhandler.cpp53
-rw-r--r--src/qmmpui/generalhandler.h5
-rw-r--r--src/ui/configdialog.cpp3
-rw-r--r--src/ui/mainwindow.cpp1
-rw-r--r--src/ui/pluginitem.cpp3
14 files changed, 60 insertions, 33 deletions
diff --git a/src/plugins/General/dbuscontrol/dbuscontrolfactory.cpp b/src/plugins/General/dbuscontrol/dbuscontrolfactory.cpp
index 922962c67..567614673 100644
--- a/src/plugins/General/dbuscontrol/dbuscontrolfactory.cpp
+++ b/src/plugins/General/dbuscontrol/dbuscontrolfactory.cpp
@@ -37,8 +37,10 @@ General *DBUSControlFactory::create(QObject *parent)
return new DBUSControl(parent);
}
-void DBUSControlFactory::showSettings(QWidget *)
-{}
+QDialog *DBUSControlFactory::createConfigDialog(QWidget *parent)
+{
+ return 0;
+}
void DBUSControlFactory::showAbout(QWidget *parent)
{
diff --git a/src/plugins/General/dbuscontrol/dbuscontrolfactory.h b/src/plugins/General/dbuscontrol/dbuscontrolfactory.h
index 98121edec..af06b30bc 100644
--- a/src/plugins/General/dbuscontrol/dbuscontrolfactory.h
+++ b/src/plugins/General/dbuscontrol/dbuscontrolfactory.h
@@ -36,7 +36,7 @@ Q_INTERFACES(GeneralFactory);
public:
const GeneralProperties properties() const;
General *create(QObject *parent);
- void showSettings(QWidget *parent);
+ QDialog *createConfigDialog(QWidget *parent);
void showAbout(QWidget *parent);
QTranslator *createTranslator(QObject *parent);
diff --git a/src/plugins/General/scrobbler/scrobblerfactory.cpp b/src/plugins/General/scrobbler/scrobblerfactory.cpp
index 77bbb0f2b..7f1fe7757 100644
--- a/src/plugins/General/scrobbler/scrobblerfactory.cpp
+++ b/src/plugins/General/scrobbler/scrobblerfactory.cpp
@@ -38,10 +38,9 @@ General *ScrobblerFactory::create(QObject *parent)
return new Scrobbler(parent);
}
-void ScrobblerFactory::showSettings(QWidget *parent)
+QDialog *ScrobblerFactory::createConfigDialog(QWidget *parent)
{
- SettingsDialog *dialog = new SettingsDialog(parent);
- dialog->show();
+ return new SettingsDialog(parent);
}
void ScrobblerFactory::showAbout(QWidget *parent)
diff --git a/src/plugins/General/scrobbler/scrobblerfactory.h b/src/plugins/General/scrobbler/scrobblerfactory.h
index 240749714..a0bd0a626 100644
--- a/src/plugins/General/scrobbler/scrobblerfactory.h
+++ b/src/plugins/General/scrobbler/scrobblerfactory.h
@@ -36,7 +36,7 @@ Q_INTERFACES(GeneralFactory);
public:
const GeneralProperties properties() const;
General *create(QObject *parent);
- void showSettings(QWidget *parent);
+ QDialog *createConfigDialog(QWidget *parent);
void showAbout(QWidget *parent);
QTranslator *createTranslator(QObject *parent);
diff --git a/src/plugins/General/scrobbler/settingsdialog.cpp b/src/plugins/General/scrobbler/settingsdialog.cpp
index 8dc2dfe22..9280550f1 100644
--- a/src/plugins/General/scrobbler/settingsdialog.cpp
+++ b/src/plugins/General/scrobbler/settingsdialog.cpp
@@ -27,7 +27,6 @@ SettingsDialog::SettingsDialog(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
- setAttribute(Qt::WA_DeleteOnClose);
QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat);
settings.beginGroup("Scrobbler");
ui.userLineEdit->setText(settings.value("login").toString());
diff --git a/src/plugins/General/statusicon/settingsdialog.cpp b/src/plugins/General/statusicon/settingsdialog.cpp
index 7cb6bb1e5..5dc1ab4eb 100644
--- a/src/plugins/General/statusicon/settingsdialog.cpp
+++ b/src/plugins/General/statusicon/settingsdialog.cpp
@@ -27,7 +27,6 @@ SettingsDialog::SettingsDialog(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
- setAttribute(Qt::WA_DeleteOnClose);
QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat);
settings.beginGroup("Tray");
ui.messageCheckBox->setChecked(settings.value("show_message",TRUE).toBool());
diff --git a/src/plugins/General/statusicon/statusiconfactory.cpp b/src/plugins/General/statusicon/statusiconfactory.cpp
index 1d3beaa0b..12c57261c 100644
--- a/src/plugins/General/statusicon/statusiconfactory.cpp
+++ b/src/plugins/General/statusicon/statusiconfactory.cpp
@@ -38,10 +38,9 @@ General *StatusIconFactory::create(QObject *parent)
return new StatusIcon(parent);
}
-void StatusIconFactory::showSettings(QWidget *parent)
+QDialog *StatusIconFactory::createConfigDialog(QWidget *parent)
{
- SettingsDialog *s = new SettingsDialog(parent);
- s->show();
+ return new SettingsDialog(parent);
}
void StatusIconFactory::showAbout(QWidget *parent)
diff --git a/src/plugins/General/statusicon/statusiconfactory.h b/src/plugins/General/statusicon/statusiconfactory.h
index b09fb1ef1..c2dc76bc5 100644
--- a/src/plugins/General/statusicon/statusiconfactory.h
+++ b/src/plugins/General/statusicon/statusiconfactory.h
@@ -25,6 +25,7 @@
*/
#include <QObject>
#include <QTranslator>
+#include <QDialog>
#include <qmmpui/general.h>
#include <qmmpui/generalfactory.h>
@@ -36,7 +37,7 @@ Q_INTERFACES(GeneralFactory);
public:
const GeneralProperties properties() const;
General *create(QObject *parent);
- void showSettings(QWidget *parent);
+ QDialog *createConfigDialog(QWidget *parent);
void showAbout(QWidget *parent);
QTranslator *createTranslator(QObject *parent);
diff --git a/src/qmmpui/generalfactory.h b/src/qmmpui/generalfactory.h
index 3038b597c..980d0b0f1 100644
--- a/src/qmmpui/generalfactory.h
+++ b/src/qmmpui/generalfactory.h
@@ -25,6 +25,7 @@
*/
class QObject;
class QTranslator;
+class QDialog;
class General;
@@ -41,7 +42,7 @@ public:
virtual ~GeneralFactory() {}
virtual const GeneralProperties properties() const = 0;
virtual General *create(QObject *parent) = 0;
- virtual void showSettings(QWidget *parent) = 0;
+ virtual QDialog *createConfigDialog(QWidget *parent) = 0;
virtual void showAbout(QWidget *parent) = 0;
virtual QTranslator *createTranslator(QObject *parent) = 0;
};
diff --git a/src/qmmpui/generalhandler.cpp b/src/qmmpui/generalhandler.cpp
index dc29f281a..c4dd86934 100644
--- a/src/qmmpui/generalhandler.cpp
+++ b/src/qmmpui/generalhandler.cpp
@@ -18,6 +18,7 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
+#include <QDialog>
#include "general.h"
#include "generalfactory.h"
@@ -37,7 +38,7 @@ GeneralHandler::GeneralHandler(QObject *parent)
{
General *general = factory->create(parent);
connect(general, SIGNAL(commandCalled(uint)), SLOT(processCommand(uint)));
- m_generals.append(general);
+ m_generals.insert(factory, general);
}
}
}
@@ -54,7 +55,7 @@ void GeneralHandler::setState(uint state)
if (state == General::Stopped)
m_songInfo.clear();
- foreach(general, m_generals)
+ foreach(general, m_generals.values())
{
general->setState(state);
}
@@ -68,31 +69,55 @@ void GeneralHandler::setSongInfo(const SongInfo &info)
{
m_songInfo = info;
General *general;
- foreach(general, m_generals)
+ foreach(general, m_generals.values())
{
general->setSongInfo(m_songInfo);
}
}
}
-void GeneralHandler::updateConfig()
+void GeneralHandler::setEnabled(GeneralFactory* factory, bool enable)
{
- while (!m_generals.isEmpty())
- delete m_generals.takeFirst();
+ if(enable == m_generals.keys().contains(factory))
+ return;
+ if(enable)
+ {
+ General *general = factory->create(parent());
+ connect(general, SIGNAL(commandCalled(uint)), SLOT(processCommand(uint)));
+ m_generals.insert(factory, general);
+ if (m_state != General::Stopped)
+ {
+ general->setState(m_state);
+ general->setSongInfo(m_songInfo);
+ }
+ }
+ else
+ {
+ delete m_generals.value(factory);
+ m_generals.remove(factory);
+ }
+ General::setEnabled(factory, enable);
+}
- GeneralFactory* factory;
- foreach(factory, *General::generalFactories())
+void GeneralHandler::showSettings(GeneralFactory* factory, QWidget* parentWidget)
+{
+ QDialog *dialog = factory->createConfigDialog(parentWidget);
+ if(!dialog)
+ return;
+
+ if(dialog->exec() == QDialog::Accepted && m_generals.keys().contains(factory))
{
- if (General::isEnabled(factory))
+ delete m_generals.value(factory);
+ General *general = factory->create(parent());
+ connect(general, SIGNAL(commandCalled(uint)), SLOT(processCommand(uint)));
+ m_generals[factory] = general;
+ if (m_state != General::Stopped)
{
- General *general = factory->create(parent());
- connect(general, SIGNAL(commandCalled(uint)), SLOT(processCommand(uint)));
- m_generals.append(general);
general->setState(m_state);
- if (m_state != General::Stopped)
- general->setSongInfo(m_songInfo);
+ general->setSongInfo(m_songInfo);
}
}
+ delete dialog;
}
GeneralHandler* GeneralHandler::instance()
diff --git a/src/qmmpui/generalhandler.h b/src/qmmpui/generalhandler.h
index 308a0a694..657eb2e82 100644
--- a/src/qmmpui/generalhandler.h
+++ b/src/qmmpui/generalhandler.h
@@ -39,7 +39,8 @@ public:
~GeneralHandler();
void setSongInfo(const SongInfo &info);
- void updateConfig();
+ void setEnabled(GeneralFactory* factory, bool enable);
+ void showSettings(GeneralFactory* factory, QWidget* parentWidget);
static GeneralHandler* instance();
signals:
@@ -59,7 +60,7 @@ private slots:
private:
void connectSignals(General*);
- QList <General*> m_generals;
+ QMap <GeneralFactory*, General*> m_generals;
SongInfo m_songInfo;
uint m_state;
static GeneralHandler* m_instance;
diff --git a/src/ui/configdialog.cpp b/src/ui/configdialog.cpp
index 820e69ada..e014df04f 100644
--- a/src/ui/configdialog.cpp
+++ b/src/ui/configdialog.cpp
@@ -35,6 +35,7 @@
#include <qmmp/effect.h>
#include <qmmpui/generalfactory.h>
#include <qmmpui/general.h>
+#include <qmmpui/generalhandler.h>
#include "skin.h"
@@ -438,7 +439,7 @@ void ConfigDialog::showPluginSettings()
int row = ui.generalPluginTable->currentRow ();
if ( m_generalPluginItems.isEmpty() || row < 0 )
return;
- m_generalPluginItems.at(row)->factory()->showSettings ( this );
+ GeneralHandler::instance()->showSettings(m_generalPluginItems.at(row)->factory(), this);
break;
}
}
diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp
index b6ec78534..e8ce0b3bd 100644
--- a/src/ui/mainwindow.cpp
+++ b/src/ui/mainwindow.cpp
@@ -575,7 +575,6 @@ void MainWindow::showSettings()
m_playlist->readSettings();
TextScroller::getPointer()->readSettings();
m_core->updateConfig();
- m_generalHandler->updateConfig();
m_visMenu->updateActions();
}
delete m_confDialog;
diff --git a/src/ui/pluginitem.cpp b/src/ui/pluginitem.cpp
index 4e0b1fd3d..490c46b0d 100644
--- a/src/ui/pluginitem.cpp
+++ b/src/ui/pluginitem.cpp
@@ -29,6 +29,7 @@
#include <qmmp/soundcore.h>
#include <qmmpui/generalfactory.h>
#include <qmmpui/general.h>
+#include <qmmpui/generalhandler.h>
#include "pluginitem.h"
@@ -146,7 +147,7 @@ GeneralPluginItem::~GeneralPluginItem()
void GeneralPluginItem::select(bool on)
{
- General::setEnabled(m_factory, on);
+ GeneralHandler::instance()->setEnabled(m_factory, on);
}
bool GeneralPluginItem::isSelected()