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.
240 lines
7.8 KiB
240 lines
7.8 KiB
//
|
|
// C++ Implementation: fxpluginhandler
|
|
//
|
|
// Description:
|
|
//
|
|
//
|
|
// Author: Robert Vogl <voglrobe@lapislazuli>, (C) 2004
|
|
//
|
|
// Copyright: See COPYING file that comes with this distribution
|
|
//
|
|
//
|
|
|
|
// QT includes
|
|
#include <tqdir.h>
|
|
|
|
// KDE includes
|
|
#include <kdebug.h>
|
|
#include <tdeapplication.h>
|
|
#include <ktrader.h>
|
|
#include <klibloader.h>
|
|
#include <kservice.h>
|
|
|
|
// App specific includes
|
|
#include "fxpluginhandler.h"
|
|
#include "ksayit_fxplugin.h"
|
|
#include "ksayit_ttsplugin.h"
|
|
|
|
|
|
FXPluginHandler::FXPluginHandler(TQObject *parent, const char *name, TDEConfig *config)
|
|
: TQObject(parent, name), m_config(config)
|
|
{
|
|
m_mapPluginList.clear();
|
|
m_lstActivePlugins.clear();
|
|
}
|
|
|
|
|
|
FXPluginHandler::~FXPluginHandler()
|
|
{
|
|
TQMap<TQString, fx_struct>::Iterator mit;
|
|
|
|
for (mit=m_mapPluginList.begin(); mit!=m_mapPluginList.end(); ++mit){
|
|
if ( (*mit).p != 0 ){
|
|
delete (*mit).p;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void FXPluginHandler::searchPlugins()
|
|
{
|
|
kdDebug(100200) << "FXPluginHandler::searchPlugins()" << endl;
|
|
|
|
TQStringList sRegistered;
|
|
fx_struct plugin;
|
|
|
|
sRegistered.clear();
|
|
m_mapPluginList.clear();
|
|
|
|
TDETrader::OfferList offers = TDETrader::self()->query("KSayIt/FXPlugin");
|
|
KLibFactory *factory = NULL;
|
|
TQString library = TQString();
|
|
TQString name = TQString();
|
|
|
|
TDETrader::OfferList::Iterator it=offers.begin();
|
|
for ( ;it!=offers.end(); ++it ){
|
|
KService::Ptr ptr = (*it);
|
|
library = ptr->library();
|
|
name = ptr->name();
|
|
factory = KLibLoader::self()->factory( library.latin1() );
|
|
if ( factory ){
|
|
kdDebug(100200) << "FXPluginHandler::searchPlugins(): Plugin factory found." << endl;
|
|
// register found plugin
|
|
if ( !sRegistered.contains( TQString(name) )){
|
|
sRegistered.append( TQString(name) );
|
|
plugin.name = name;
|
|
plugin.library = library;
|
|
plugin.description = TQString();
|
|
plugin.EffectID = 0;
|
|
plugin.p = NULL;
|
|
m_mapPluginList[plugin.name] = plugin; // update Plugin Map
|
|
kdDebug(100200) << "FXPluginHandler::searchPlugins(): " << plugin.name << " registered." << endl;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void FXPluginHandler::readConfiguration()
|
|
{
|
|
kdDebug(100200) << "+++ entering FXPluginHandler::readConfiguration()" << endl;
|
|
|
|
fx_struct plugin;
|
|
TQMap<TQString, fx_struct>::Iterator mit;
|
|
TQStringList::Iterator lit;
|
|
|
|
// unload all plugins and destroy the effect objects
|
|
lit = m_lstActivePlugins.begin();
|
|
while ( lit != m_lstActivePlugins.end() ){
|
|
mit = m_mapPluginList.find( *lit );
|
|
if ( mit!=m_mapPluginList.end() ){
|
|
plugin = *mit;
|
|
if ( (plugin.p != NULL) && (plugin.EffectID == 0) ){
|
|
delete plugin.p;
|
|
plugin.p = NULL;
|
|
m_mapPluginList[plugin.name] = plugin; // update Plugin Map
|
|
lit = m_lstActivePlugins.remove( lit );
|
|
} else {
|
|
lit++;
|
|
}
|
|
}
|
|
}
|
|
|
|
// load active plugins as given in config file
|
|
m_config->setGroup("Effect Stack Configuration");
|
|
TQStringList conf_active = m_config->readListEntry("Activated");
|
|
KLibFactory *factory = NULL;
|
|
|
|
for (lit=conf_active.begin(); lit!=conf_active.end(); ++lit){ // for all in config
|
|
mit = m_mapPluginList.find(*lit);
|
|
if( mit!=m_mapPluginList.end() ){
|
|
// plugin found in list of registered plugins
|
|
plugin = *mit;
|
|
// load plugin
|
|
factory = KLibLoader::self()->factory( (plugin.library).latin1() );
|
|
if ( factory ){
|
|
plugin.p = static_cast<FXPlugin*>( factory->create( (TQObject*)this, (plugin.name).latin1() ) );
|
|
if ( plugin.p ){ // Plugin found
|
|
plugin.p->setApplication( TDEApplication::kApplication() );
|
|
plugin.description = plugin.p->getDescription_KS();
|
|
// append to list of active plugins
|
|
m_lstActivePlugins.append( plugin.name );
|
|
m_mapPluginList[plugin.name] = plugin; // update Plugin Map
|
|
kdDebug(100200) << "FXPluginHandler: FX-Plugin " << plugin.name << " active." << endl;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void FXPluginHandler::showEffectGUI(const TQString &pname)
|
|
{
|
|
kdDebug(100200) << "FXPluginHandler::showEffectGUI(): " << pname << endl;
|
|
|
|
TQMap<TQString, fx_struct>::Iterator mit;
|
|
fx_struct plugin;
|
|
|
|
// find plugin with name==pname in list and show its GUI
|
|
mit = m_mapPluginList.find(pname);
|
|
if ( mit != m_mapPluginList.end() ){
|
|
plugin = *mit;
|
|
if ( plugin.p != NULL ){ // plugin loaded
|
|
plugin.p->showGUI_KS();
|
|
return;
|
|
} else {
|
|
kdDebug(100200) << "Effect not active yet. Loading..." << endl;
|
|
KLibFactory *factory = KLibLoader::self()->factory( (plugin.library).latin1() );
|
|
if ( factory ){
|
|
plugin.p = static_cast<FXPlugin*>( factory->create( (TQObject*)this, (plugin.name).latin1() ) );
|
|
if ( plugin.p ){ // Plugin found
|
|
plugin.p->setApplication( TDEApplication::kApplication() );
|
|
plugin.description = plugin.p->getDescription_KS();
|
|
// append to list of active plugins
|
|
m_lstActivePlugins.append( plugin.name );
|
|
m_mapPluginList[plugin.name] = plugin; // update Plugin Map
|
|
kdDebug(100200) << "FXPluginHandler: FX-Plugin " << plugin.name << " active." << endl;
|
|
plugin.p->showGUI_KS();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void FXPluginHandler::getPlugins(TQStringList &pluginlist)
|
|
{
|
|
// kdDebug(100200) << "FXPluginHandler::getPlugins" << endl;
|
|
|
|
pluginlist.clear();
|
|
TQString sPname;
|
|
|
|
TQMap<TQString, fx_struct>::Iterator mit;
|
|
for (mit=m_mapPluginList.begin(); mit!=m_mapPluginList.end(); ++mit){
|
|
sPname = (*mit).name; //testing
|
|
pluginlist.append( sPname );
|
|
}
|
|
}
|
|
|
|
|
|
void FXPluginHandler::activateEffect(const TQString &pname,
|
|
KArtsServer *server,
|
|
StereoEffectStack *fx_stack)
|
|
{
|
|
kdDebug(100200) << "FXPluginHandler::activateEffect: " << pname << endl;
|
|
|
|
TQMap<TQString, fx_struct>::Iterator mit;
|
|
fx_struct plugin;
|
|
|
|
// find plugin with name==pname
|
|
mit = m_mapPluginList.find(pname);
|
|
if ( mit!=m_mapPluginList.end() ){
|
|
plugin = *mit;
|
|
if ( plugin.p != NULL ){
|
|
plugin.EffectID = plugin.p->activate_KS(server, fx_stack);
|
|
m_mapPluginList[plugin.name] = plugin; // update Plugin Map
|
|
} else {
|
|
kdDebug(100200) << "Effect " << pname << " not found or inactive." << endl;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void FXPluginHandler::deactivateEffects(StereoEffectStack *fx_stack)
|
|
{
|
|
kdDebug(100200) << "FXPluginHandler::deactivateEffects." << endl;
|
|
|
|
TQMap<TQString, fx_struct>::Iterator mit;
|
|
fx_struct plugin;
|
|
|
|
for (mit=m_mapPluginList.begin(); mit!=m_mapPluginList.end(); ++mit){
|
|
if ( mit != m_mapPluginList.end() ){
|
|
plugin = *mit;
|
|
if ( (plugin.EffectID != 0) && (plugin.p != NULL) ){
|
|
// effect active and on stack
|
|
plugin.p->deactivate_KS(fx_stack, plugin.EffectID);
|
|
kdDebug(100200) << plugin.name << " with Effect ID " << plugin.EffectID << " removed." << endl;
|
|
plugin.EffectID = 0;
|
|
m_mapPluginList[plugin.name] = plugin; // update Plugin Map
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#include "fxpluginhandler.moc"
|