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.
214 lines
5.5 KiB
214 lines
5.5 KiB
/***************************************************************************
|
|
* Copyright (C) 2005 by Joris Guisson *
|
|
* joris.guisson@gmail.com *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This program 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 General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program; if not, write to the *
|
|
* Free Software Foundation, Inc., *
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
|
|
***************************************************************************/
|
|
#include <klocale.h>
|
|
#include <kpushbutton.h>
|
|
#include <klistview.h>
|
|
#include <qheader.h>
|
|
#include <kglobal.h>
|
|
#include <kiconloader.h>
|
|
#include <util/constants.h>
|
|
#include "pluginmanager.h"
|
|
#include "pluginmanagerwidget.h"
|
|
#include "pluginmanagerprefpage.h"
|
|
#include "labelview.h"
|
|
|
|
using namespace bt;
|
|
|
|
namespace kt
|
|
{
|
|
|
|
class PluginViewItem : public LabelViewItem
|
|
{
|
|
Plugin* p;
|
|
public:
|
|
PluginViewItem(Plugin* p,LabelView* parent)
|
|
: LabelViewItem(p->getIcon(),p->getGuiName(),p->getDescription(),parent),p(p)
|
|
{
|
|
update();
|
|
}
|
|
|
|
virtual ~PluginViewItem()
|
|
{}
|
|
|
|
virtual void update()
|
|
{
|
|
setTitle("<h3>" + p->getGuiName() + "</h3>");
|
|
setDescription(
|
|
i18n("%1<br>Status: <b>%2</b><br>Author: %3").arg(p->getDescription())
|
|
.arg(p->isLoaded() ? i18n("Loaded") : i18n("Not loaded"))
|
|
.arg(p->getAuthor()));
|
|
}
|
|
|
|
QString pluginName() {return p->getName();}
|
|
};
|
|
|
|
PluginManagerPrefPage::PluginManagerPrefPage(PluginManager* pman)
|
|
: PrefPageInterface(i18n("Plugins"), i18n("Plugin Options"),KGlobal::iconLoader()->loadIcon("ktplugins",KIcon::NoGroup)),pman(pman)
|
|
{
|
|
pmw = 0;
|
|
}
|
|
|
|
|
|
PluginManagerPrefPage::~PluginManagerPrefPage()
|
|
{}
|
|
|
|
bool PluginManagerPrefPage::apply()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
void PluginManagerPrefPage::createWidget(QWidget* parent)
|
|
{
|
|
pmw = new PluginManagerWidget(parent);
|
|
|
|
connect(pmw->load_btn,SIGNAL(clicked()),this,SLOT(onLoad()));
|
|
connect(pmw->unload_btn,SIGNAL(clicked()),this,SLOT(onUnload()));
|
|
connect(pmw->load_all_btn,SIGNAL(clicked()),this,SLOT(onLoadAll()));
|
|
connect(pmw->unload_all_btn,SIGNAL(clicked()),this,SLOT(onUnloadAll()));
|
|
LabelView* lv = pmw->plugin_view;
|
|
connect(lv,SIGNAL(currentChanged(LabelViewItem * )),this,SLOT(onCurrentChanged( LabelViewItem* )));
|
|
}
|
|
|
|
void PluginManagerPrefPage::updatePluginList()
|
|
{
|
|
LabelView* lv = pmw->plugin_view;
|
|
lv->clear();
|
|
// get list of plugins
|
|
QPtrList<Plugin> pl;
|
|
pman->fillPluginList(pl);
|
|
|
|
// Add them all
|
|
QPtrList<Plugin>::iterator i = pl.begin();
|
|
while (i != pl.end())
|
|
{
|
|
Plugin* p = *i;
|
|
lv->addItem(new PluginViewItem(p,lv));
|
|
i++;
|
|
}
|
|
lv->sort();
|
|
}
|
|
|
|
void PluginManagerPrefPage::updateData()
|
|
{
|
|
updateAllButtons();
|
|
}
|
|
|
|
|
|
|
|
void PluginManagerPrefPage::deleteWidget()
|
|
{
|
|
delete pmw;
|
|
pmw = 0;
|
|
}
|
|
|
|
void PluginManagerPrefPage::onCurrentChanged(LabelViewItem* item)
|
|
{
|
|
PluginViewItem* pvi = (PluginViewItem*)item;
|
|
if (!item)
|
|
{
|
|
pmw->load_btn->setEnabled(false);
|
|
pmw->unload_btn->setEnabled(false);
|
|
}
|
|
else
|
|
{
|
|
bool loaded = pman->isLoaded(pvi->pluginName());
|
|
pmw->load_btn->setEnabled(!loaded);
|
|
pmw->unload_btn->setEnabled(loaded);
|
|
}
|
|
}
|
|
|
|
void PluginManagerPrefPage::updateAllButtons()
|
|
{
|
|
Uint32 tot = 0;
|
|
Uint32 loaded = 0;
|
|
// get list of plugins
|
|
QPtrList<Plugin> pl;
|
|
pman->fillPluginList(pl);
|
|
|
|
QPtrList<Plugin>::iterator i = pl.begin();
|
|
while (i != pl.end())
|
|
{
|
|
Plugin* p = *i;
|
|
tot++;
|
|
if (p->isLoaded())
|
|
loaded++;
|
|
i++;
|
|
}
|
|
|
|
if (loaded == tot)
|
|
{
|
|
pmw->load_all_btn->setEnabled(false);
|
|
pmw->unload_all_btn->setEnabled(true);
|
|
}
|
|
else if (loaded < tot && loaded > 0)
|
|
{
|
|
pmw->unload_all_btn->setEnabled(true);
|
|
pmw->load_all_btn->setEnabled(true);
|
|
}
|
|
else
|
|
{
|
|
pmw->unload_all_btn->setEnabled(false);
|
|
pmw->load_all_btn->setEnabled(true);
|
|
}
|
|
onCurrentChanged(pmw->plugin_view->selectedItem());
|
|
}
|
|
|
|
void PluginManagerPrefPage::onLoad()
|
|
{
|
|
LabelView* lv = pmw->plugin_view;
|
|
PluginViewItem* vi = (PluginViewItem*)lv->selectedItem();
|
|
if (vi && !pman->isLoaded(vi->pluginName()))
|
|
{
|
|
pman->load(vi->pluginName());
|
|
vi->update();
|
|
updateAllButtons();
|
|
}
|
|
}
|
|
|
|
void PluginManagerPrefPage::onUnload()
|
|
{
|
|
LabelView* lv = pmw->plugin_view;
|
|
PluginViewItem* vi = (PluginViewItem*)lv->selectedItem();
|
|
if (vi && pman->isLoaded(vi->pluginName()))
|
|
{
|
|
pman->unload(vi->pluginName());
|
|
vi->update();
|
|
updateAllButtons();
|
|
}
|
|
}
|
|
|
|
void PluginManagerPrefPage::onLoadAll()
|
|
{
|
|
pman->loadAll();
|
|
LabelView* lv = pmw->plugin_view;
|
|
lv->update();
|
|
updateAllButtons();
|
|
}
|
|
|
|
void PluginManagerPrefPage::onUnloadAll()
|
|
{
|
|
pman->unloadAll();
|
|
LabelView* lv = pmw->plugin_view;
|
|
lv->update();
|
|
updateAllButtons();
|
|
}
|
|
|
|
}
|