You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebase/kate/app/katepluginmanager.cpp

222 lines
6.2 KiB

/* 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){;}