summaryrefslogtreecommitdiffstats
path: root/kate/app/katepluginmanager.cpp
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commit4aed2c8219774f5d797760606b8489a92ddc5163 (patch)
tree3f8c130f7d269626bf6a9447407ef6c35954426a /kate/app/katepluginmanager.cpp
downloadtdebase-4aed2c8219774f5d797760606b8489a92ddc5163.tar.gz
tdebase-4aed2c8219774f5d797760606b8489a92ddc5163.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kate/app/katepluginmanager.cpp')
-rw-r--r--kate/app/katepluginmanager.cpp221
1 files changed, 221 insertions, 0 deletions
diff --git a/kate/app/katepluginmanager.cpp b/kate/app/katepluginmanager.cpp
new file mode 100644
index 000000000..e3390e6a2
--- /dev/null
+++ b/kate/app/katepluginmanager.cpp
@@ -0,0 +1,221 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001 Christoph Cullmann <cullmann@kde.org>
+ Copyright (C) 2001 Joseph Wenninger <jowenn@kde.org>
+ Copyright (C) 2001 Anders Lund <anders.lund@lund.tdcadsl.dk>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "katepluginmanager.h"
+#include "katepluginmanager.moc"
+
+#include "kateapp.h"
+#include "katemainwindow.h"
+
+#include "../interfaces/application.h"
+
+#include <kconfig.h>
+#include <qstringlist.h>
+#include <kmessagebox.h>
+#include <kdebug.h>
+#include <qfile.h>
+
+KatePluginManager::KatePluginManager(QObject *parent) : QObject (parent)
+{
+ m_pluginManager = new Kate::PluginManager (this);
+ setupPluginList ();
+
+ loadConfig ();
+ loadAllEnabledPlugins ();
+}
+
+KatePluginManager::~KatePluginManager()
+{
+ // first write config
+ writeConfig ();
+
+ // than unload the plugins
+ unloadAllPlugins ();
+}
+
+KatePluginManager *KatePluginManager::self()
+{
+ return KateApp::self()->pluginManager ();
+}
+
+void KatePluginManager::setupPluginList ()
+{
+ QValueList<KService::Ptr> traderList= KTrader::self()->query("Kate/Plugin", "(not ('Kate/ProjectPlugin' in ServiceTypes)) and (not ('Kate/InitPlugin' in ServiceTypes))");
+
+ for(KTrader::OfferList::Iterator it(traderList.begin()); it != traderList.end(); ++it)
+ {
+ KService::Ptr ptr = (*it);
+
+ QString pVersion = ptr->property("X-Kate-Version").toString();
+
+// if ((pVersion >= "2.5") && (pVersion <= KateApp::kateVersion(false)))
+ if (pVersion == "2.5")
+ {
+ KatePluginInfo info;
+
+ info.load = false;
+ info.service = ptr;
+ info.plugin = 0L;
+
+ m_pluginList.push_back (info);
+ }
+ }
+}
+
+void KatePluginManager::loadConfig ()
+{
+ KateApp::self()->config()->setGroup("Kate Plugins");
+
+ for (unsigned int i=0; i < m_pluginList.size(); ++i)
+ m_pluginList[i].load = KateApp::self()->config()->readBoolEntry (m_pluginList[i].service->library(), false) ||
+ KateApp::self()->config()->readBoolEntry (m_pluginList[i].service->property("X-Kate-PluginName").toString(),false);
+}
+
+void KatePluginManager::writeConfig ()
+{
+ KateApp::self()->config()->setGroup("Kate Plugins");
+
+ for (unsigned int i=0; i < m_pluginList.size(); ++i)
+ {
+ QString saveName=m_pluginList[i].service->property("X-Kate-PluginName").toString();
+
+ if (saveName.isEmpty())
+ saveName = m_pluginList[i].service->library();
+
+ KateApp::self()->config()->writeEntry (saveName, m_pluginList[i].load);
+ }
+}
+
+void KatePluginManager::loadAllEnabledPlugins ()
+{
+ for (unsigned int i=0; i < m_pluginList.size(); ++i)
+ {
+ if (m_pluginList[i].load)
+ loadPlugin (&m_pluginList[i]);
+ else
+ unloadPlugin (&m_pluginList[i]);
+ }
+}
+
+void KatePluginManager::unloadAllPlugins ()
+{
+ for (unsigned int i=0; i < m_pluginList.size(); ++i)
+ {
+ if (m_pluginList[i].plugin)
+ unloadPlugin (&m_pluginList[i]);
+ }
+}
+
+void KatePluginManager::enableAllPluginsGUI (KateMainWindow *win)
+{
+ for (unsigned int i=0; i < m_pluginList.size(); ++i)
+ {
+ if (m_pluginList[i].load)
+ enablePluginGUI (&m_pluginList[i], win);
+ }
+}
+
+void KatePluginManager::disableAllPluginsGUI (KateMainWindow *win)
+{
+ for (unsigned int i=0; i < m_pluginList.size(); ++i)
+ {
+ if (m_pluginList[i].load)
+ disablePluginGUI (&m_pluginList[i], win);
+ }
+}
+
+void KatePluginManager::loadPlugin (KatePluginInfo *item)
+{
+ QString pluginName=item->service->property("X-Kate-PluginName").toString();
+
+ if (pluginName.isEmpty())
+ pluginName=item->service->library();
+
+ item->load = (item->plugin = Kate::createPlugin (QFile::encodeName(item->service->library()), Kate::application(), 0, pluginName));
+}
+
+void KatePluginManager::unloadPlugin (KatePluginInfo *item)
+{
+ disablePluginGUI (item);
+ if (item->plugin) delete item->plugin;
+ item->plugin = 0L;
+ item->load = false;
+}
+
+void KatePluginManager::enablePluginGUI (KatePluginInfo *item, KateMainWindow *win)
+{
+ if (!item->plugin) return;
+ if (!Kate::pluginViewInterface(item->plugin)) return;
+
+ Kate::pluginViewInterface(item->plugin)->addView(win->mainWindow());
+}
+
+void KatePluginManager::enablePluginGUI (KatePluginInfo *item)
+{
+ if (!item->plugin) return;
+ if (!Kate::pluginViewInterface(item->plugin)) return;
+
+ for (uint i=0; i< KateApp::self()->mainWindows(); i++)
+ {
+ Kate::pluginViewInterface(item->plugin)->addView(KateApp::self()->mainWindow(i)->mainWindow());
+ }
+}
+
+void KatePluginManager::disablePluginGUI (KatePluginInfo *item, KateMainWindow *win)
+{
+ if (!item->plugin) return;
+ if (!Kate::pluginViewInterface(item->plugin)) return;
+
+ Kate::pluginViewInterface(item->plugin)->removeView(win->mainWindow());
+}
+
+void KatePluginManager::disablePluginGUI (KatePluginInfo *item)
+{
+ if (!item->plugin) return;
+ if (!Kate::pluginViewInterface(item->plugin)) return;
+
+ for (uint i=0; i< KateApp::self()->mainWindows(); i++)
+ {
+ Kate::pluginViewInterface(item->plugin)->removeView(KateApp::self()->mainWindow(i)->mainWindow());
+ }
+}
+
+Kate::Plugin *KatePluginManager::plugin(const QString &name)
+{
+ for (unsigned int i=0; i < m_pluginList.size(); ++i)
+ {
+ KatePluginInfo *info = &m_pluginList[i];
+ QString pluginName=info->service->property("X-Kate-PluginName").toString();
+ if (pluginName.isEmpty())
+ pluginName=info->service->library();
+ if (pluginName==name)
+ {
+ if (info->plugin)
+ return info->plugin;
+ else
+ break;
+ }
+ }
+ return 0;
+}
+
+bool KatePluginManager::pluginAvailable(const QString &){return false;}
+class Kate::Plugin *KatePluginManager::loadPlugin(const QString &,bool ){return 0;}
+void KatePluginManager::unloadPlugin(const QString &,bool){;}