aboutsummaryrefslogtreecommitdiff
path: root/src/qmmpui
diff options
context:
space:
mode:
Diffstat (limited to 'src/qmmpui')
-rw-r--r--src/qmmpui/generalfactory.h3
-rw-r--r--src/qmmpui/generalhandler.cpp53
-rw-r--r--src/qmmpui/generalhandler.h5
3 files changed, 44 insertions, 17 deletions
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;