/* 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 <tqstringlist.h> #include <kmessagebox.h> #include <kdebug.h> #include <tqfile.h> KatePluginManager::KatePluginManager(TQObject *parent) : TQObject (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 () { TQValueList<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); TQString 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) { TQString 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) { TQString pluginName=item->service->property("X-Kate-PluginName").toString(); if (pluginName.isEmpty()) pluginName=item->service->library(); item->load = (item->plugin = Kate::createPlugin (TQFile::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 TQString &name) { for (unsigned int i=0; i < m_pluginList.size(); ++i) { KatePluginInfo *info = &m_pluginList[i]; TQString 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 TQString &){return false;} class Kate::Plugin *KatePluginManager::loadPlugin(const TQString &,bool ){return 0;} void KatePluginManager::unloadPlugin(const TQString &,bool){;}