1
/** ===========================================================
4
* This file is a part of kipi-plugins project
5
* <a href="http://www.digikam.org">http://www.digikam.org</a>
8
* @brief kipi host test application using KDE XML-GUI technology
10
* @author Copyright (C) 2012 by Victor Dodon
11
* <a href="mailto:dodonvictor at gmail dot com">dodonvictor at gmail dot com</a>
13
* This program is free software; you can redistribute it
14
* and/or modify it under the terms of the GNU General
15
* Public License as published by the Free Software Foundation;
16
* either version 2, or (at your option) any later version.
18
* This program is distributed in the hope that it will be useful,
19
* but WITHOUT ANY WARRANTY; without even the implied warranty of
20
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
* GNU General Public License for more details.
23
* ============================================================ */
25
#include "kipitestpluginloader.moc"
34
#include <kapplication.h>
35
#include <kactioncategory.h>
36
#include <kactioncollection.h>
39
#include <kxmlguiclient.h>
40
#include <kxmlguifactory.h>
44
#include "kipiinterface.h"
45
#include "kipitestmainwindow.h"
50
class KipiTestPluginLoader::KipiTestPluginLoaderPriv
55
KipiTestPluginLoaderPriv()
58
kipipluginsActionCollection = 0;
63
PluginLoader* kipiPluginLoader;
64
KipiInterface* kipiInterface;
67
KActionCollection* kipipluginsActionCollection;
68
QMap<int, KActionCategory*> kipiCategoryMap;
71
// -- Static values -------------------------------
73
KipiTestPluginLoader* KipiTestPluginLoader::m_instance = 0;
75
// -----------------------------------------------
77
KipiTestPluginLoader::KipiTestPluginLoader(KXmlGuiWindow* const parent, KipiInterface *const interface)
78
: QObject(parent), d(new KipiTestPluginLoaderPriv)
81
d->kipiInterface = interface;
87
KipiTestPluginLoader::~KipiTestPluginLoader()
93
KipiTestPluginLoader* KipiTestPluginLoader::instance()
98
KActionCollection* KipiTestPluginLoader::pluginsActionCollection() const
100
return d->kipipluginsActionCollection;
103
QList<PluginLoader::Info*> KipiTestPluginLoader::pluginList()
105
return d->kipiPluginLoader->pluginList();
108
QList<QAction*> KipiTestPluginLoader::kipiActionsByCategory(Category cat) const
110
KActionCategory* category = d->kipiCategoryMap[cat];
114
return category->actions();
117
return QList<QAction*>();
120
void KipiTestPluginLoader::loadPlugins()
122
d->kipipluginsActionCollection = new KActionCollection(d->app, KGlobal::mainComponent());
126
// List of obsoletes plugins to not load
128
// Comment the following two lines if you want to load the HelloWorld and
129
// the KXMLHelloWorld plugins for testing purposes
130
//ignores.append("HelloWorld");
131
//ignores.append("KXMLHelloWorld");
133
ignores.append("KameraKlient");
135
// These plugins have been renamed with 0.2.0-rc1
136
ignores.append("Facebook Exporter");
137
ignores.append("SmugMug Exporter");
138
ignores.append("SlideShow");
139
ignores.append("PrintWizard");
140
ignores.append("SimpleViewer");
141
ignores.append("KioExport");
143
d->kipiPluginLoader = new PluginLoader(d->app);
144
d->kipiPluginLoader->setInterface(d->kipiInterface);
145
d->kipiPluginLoader->setIgnoredPluginsList(ignores);
146
d->kipiPluginLoader->init();
148
connect(d->kipiPluginLoader, SIGNAL(replug()),
149
this, SLOT(slotKipiPluginsPlug()));
151
d->kipiPluginLoader->loadPlugins();
154
void KipiTestPluginLoader::slotKipiPluginsPlug()
156
d->kipiCategoryMap.clear();
157
d->kipipluginsActionCollection->clear();
159
PluginLoader::PluginList list = d->kipiPluginLoader->pluginList();
162
for (PluginLoader::PluginList::ConstIterator it = list.constBegin() ; it != list.constEnd() ; ++it)
164
Plugin* plugin = (*it)->plugin();
166
if (!plugin || !(*it)->shouldLoad())
171
d->app->guiFactory()->removeClient(plugin);
174
QStringList disabledActions = d->kipiPluginLoader->disabledPluginActions();
176
for (PluginLoader::PluginList::ConstIterator it = list.constBegin() ; it != list.constEnd() ; ++it)
178
Plugin* plugin = (*it)->plugin();
180
if (!plugin || !(*it)->shouldLoad())
186
plugin->setup(d->app);
189
foreach(KAction* const action, plugin->actions())
191
QString actionName(action->objectName());
192
Category cat = plugin->category(action);
194
if (cat == InvalidCategory)
196
kWarning() << "Plugin action '" << actionName << "' has invalid category!";
200
if (!disabledActions.contains(actionName))
202
KActionCategory* category = d->kipiCategoryMap[cat];
206
category = new KActionCategory(categoryName(cat), d->kipipluginsActionCollection);
207
d->kipiCategoryMap.insert(cat, category);
210
category->addAction(actionName, qobject_cast<QAction*>(action));
214
kDebug() << "Plugin '" << actionName << "' is disabled.";
219
for (PluginLoader::PluginList::ConstIterator it = list.constBegin() ; it != list.constEnd() ; ++it)
221
Plugin* plugin = (*it)->plugin();
223
if (!plugin || !(*it)->shouldLoad())
228
d->app->guiFactory()->addClient(plugin);
231
// load KIPI actions settings
232
d->kipipluginsActionCollection->readSettings();
235
void KipiTestPluginLoader::checkEmptyCategory(Category cat)
237
KActionCategory* category = d->kipiCategoryMap[cat];
241
// QAction* action = new QAction(i18n("No tool available"), d->app);
242
QString actionName = "emptyCategory" + categoryShortName(cat);
243
KAction* action = d->app->actionCollection()->addAction(actionName);
244
action->setEnabled(false);
245
category = new KActionCategory(categoryName(cat), d->kipipluginsActionCollection);
246
d->kipiCategoryMap.insert(cat, category);
250
QString KipiTestPluginLoader::categoryName(Category cat) const
257
res = i18n("Export Tools");
261
res = i18n("Import Tools");
265
res = i18n("Images Tools");
269
res = i18n("Miscellaneous Tools");
273
res = i18n("Batch Tools");
276
case CollectionsPlugin:
277
res = i18n("Albums Tools");
281
res = i18n("Unknown Tools");
288
QString KipiTestPluginLoader::categoryShortName(Category cat) const
295
res = i18n("Export");
299
res = i18n("Import");
310
case CollectionsPlugin:
311
res = i18n("Collenctions");
315
res = i18n("Unknown");
322
} // namespace KXMLKipiCmd