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.
tderadio/src/pluginmanager-configuration...

172 lines
5.9 KiB

/***************************************************************************
pluginmanager-configuration.cpp - description
-------------------
begin : Thu Sep 30 2004
copyright : (C) 2004 by Martin Witte
email : witte@kawo1.rwth-aachen.de
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
#include "pluginmanager-configuration-ui.h"
#include "include/pluginmanager-configuration.h"
#include "include/tderadioapp.h"
#include "include/pluginmanager.h"
#include <tdelistbox.h>
#include <tdelistview.h>
#include <kpushbutton.h>
#include <kurlrequester.h>
#include <kinputdialog.h>
#include <tqcheckbox.h>
PluginManagerConfiguration::PluginManagerConfiguration(TQWidget *parent, TDERadioApp *app, PluginManager *pm)
: PluginManagerConfigurationUI(parent),
m_Application(app),
m_PluginManager(pm),
m_dirty(true)
{
noticePluginLibrariesChanged();
noticePluginsChanged();
TQObject::connect(btnAddLibrary, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotAddLibrary()));
TQObject::connect(btnRemoveLibrary, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotRemoveLibrary()));
TQObject::connect(btnNewPluginInstance, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotNewPluginInstance()));
TQObject::connect(btnRemovePluginInstance, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotRemovePluginInstance()));
TQObject::connect(cbShowProgressBar, TQ_SIGNAL(toggled(bool)), this, TQ_SLOT(slotSetDirty()));
slotCancel();
}
PluginManagerConfiguration::~PluginManagerConfiguration ()
{
}
void PluginManagerConfiguration::noticePluginLibrariesChanged()
{
listPluginLibraries->clear();
const TQMap<TQString, PluginLibraryInfo> &libs = m_Application->getPluginLibraries();
TQMapConstIterator<TQString,PluginLibraryInfo> end = libs.end();
for (TQMapConstIterator<TQString,PluginLibraryInfo> it = libs.begin(); it != end; ++it) {
listPluginLibraries->insertItem(it.key());
}
listPluginClasses->clear();
const TQMap<TQString, PluginClassInfo> &classes = m_Application->getPluginClasses();
TQMapConstIterator<TQString, PluginClassInfo> end_cls = classes.end();
for (TQMapConstIterator<TQString, PluginClassInfo> it = classes.begin(); it != end_cls; ++it) {
listPluginClasses->insertItem(new TDEListViewItem(listPluginClasses, it.key(), (*it).description));
}
noticePluginsChanged();
}
void PluginManagerConfiguration::noticePluginsChanged()
{
listPluginInstances->clear();
const PluginList &plugins = m_PluginManager->plugins();
const TQMap<TQString, PluginClassInfo> &classes = m_Application->getPluginClasses();
for (PluginIterator it(plugins); it.current(); ++it) {
TQString class_name = it.current()->pluginClassName();
if (classes.contains(class_name)) {
TQString obj_name = it.current()->name();
listPluginInstances->insertItem(new TDEListViewItem(listPluginInstances, class_name, obj_name, classes[class_name].description));
}
}
}
void PluginManagerConfiguration::slotOK()
{
if (m_dirty) {
m_PluginManager->showProgressBar(cbShowProgressBar->isChecked());
m_dirty = false;
}
}
void PluginManagerConfiguration::slotCancel()
{
if (m_dirty) {
cbShowProgressBar->setChecked(m_PluginManager->showsProgressBar());
noticePluginLibrariesChanged();
noticePluginsChanged();
m_dirty = false;
}
}
void PluginManagerConfiguration::slotAddLibrary()
{
slotSetDirty();
TQString url = editPluginLibrary->url();
if (m_Application && url.length())
m_Application->LoadLibrary(url);
}
void PluginManagerConfiguration::slotRemoveLibrary()
{
slotSetDirty();
if (m_Application) {
TQString lib = listPluginLibraries->currentText();
if (lib.length()) {
m_Application->UnloadLibrary(lib);
}
}
}
void PluginManagerConfiguration::slotNewPluginInstance()
{
slotSetDirty();
if (m_Application && m_PluginManager) {
TQListViewItem *item = listPluginClasses->currentItem();
TQString class_name = item ? item->text(0) : TQString();
bool ok = false;
int default_object_id = 1;
while (m_PluginManager->getPluginByName(class_name + TQString::number(default_object_id)))
++default_object_id;
TQString object_name = KInputDialog::getText(i18n("Enter Plugin Instance Name"),
i18n("Instance Name"),
class_name + TQString::number(default_object_id),
&ok);
if (ok && class_name.length() && object_name.length())
m_Application->CreatePlugin(m_PluginManager, class_name, object_name);
}
}
void PluginManagerConfiguration::slotRemovePluginInstance()
{
slotSetDirty();
if (m_Application && m_PluginManager) {
TQListViewItem *item = listPluginInstances->currentItem();
TQString object_name = item ? item->text(1) : TQString();
if (object_name.length())
m_PluginManager->deletePluginByName(object_name);
}
}
void PluginManagerConfiguration::slotSetDirty()
{
m_dirty = true;
}
#include "pluginmanager-configuration.moc"