1 /***************************************************************************
2 * This file is part of KWorship. *
3 * Copyright 2008 James Hogan <james@albanarts.com> *
5 * KWorship is free software: you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation, either version 2 of the License, or *
8 * (at your option) any later version. *
10 * KWorship is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with KWorship. If not, write to the Free Software Foundation, *
17 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
18 ***************************************************************************/
21 * @file KwPluginManager.cpp
22 * @brief Manages KWorship plugins.
23 * @author James Hogan <james@albanarts.com>
26 #include "KwPluginManager.h"
29 #include <KServiceTypeTrader>
30 #include <KXmlGuiWindow>
31 #include <KXMLGUIFactory>
34 * Constructors + destructor
37 /// Primary constructor.
38 KwPluginManager::KwPluginManager()
45 KwPluginManager::~KwPluginManager()
47 foreach (KwPlugin
* plugin
, m_plugins
)
55 * Plugin loading and unloading
58 /// Set the main window.
59 void KwPluginManager::setMainWindow(KXmlGuiWindow
* mainWindow
)
61 m_mainWindow
= mainWindow
;
64 /// Directly load a plugin.
65 bool KwPluginManager::loadPlugin(KwPlugin
* plugin
)
67 const QString
& id
= plugin
->id();
68 Q_ASSERT(!plugin
->isLoaded());
69 if (!m_plugins
.contains(id
))
71 m_plugins
[id
] = plugin
;
74 m_mainWindow
->guiFactory()->addClient(plugin
);
82 /// Setup config dialog to include the plugin.
83 void KwPluginManager::setupConfigDialog(KConfigDialog
* dialog
)
85 foreach (KwPlugin
* plugin
, m_plugins
)
87 plugin
->setupConfigDialog(dialog
);
93 void KwPluginManager::loadPlugins()
95 KService::List offers
= KServiceTypeTrader::self()->query("KWorship/Plugin");
97 foreach (KService::Ptr service
, offers
)
99 qDebug() << "Found KWorship plugin: " << service
->desktopEntryName();
101 KwPlugin
* plugin
= service
->createInstance
<KwPlugin
>(this, QVariantList(), &err
);
104 bool loaded
= loadPlugin(plugin
);
107 qDebug() << " Loaded successfully";
111 qDebug() << " Could not be initialised";
116 qDebug() << " Could not be loaded: " << err
;