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.
tdegraphics/kpovmodeler/pmpluginmanager.cpp

116 lines
3.7 KiB

/*
**************************************************************************
description
--------------------
copyright : (C) 2003 by Andreas Zehender
email : zehender@kde.org
**************************************************************************
**************************************************************************
* *
* 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 "pmpluginmanager.h"
#include "pmpart.h"
#include "pmshell.h"
#include "pmfactory.h"
#include "pmdebug.h"
#include <tqmap.h>
#include <tqapplication.h>
#include <tdeparts/plugin.h>
#include <kxmlguifactory.h>
#include <tdeconfig.h>
PMPluginManager* PMPluginManager::s_pInstance = 0;
KStaticDeleter<PMPluginManager> PMPluginManager::s_staticDeleter;
using namespace KParts;
// workaround for protected Plugin::pluginInfos
class PMPluginWorkaround : public Plugin
{
public:
PMPluginWorkaround( ) : Plugin( 0, 0 ) { };
static TQValueList<Plugin::PluginInfo> installedPlugins( const TDEInstance* instance )
{
return pluginInfos( instance );
}
};
PMPluginManager::PMPluginManager( )
{
// find installed plugins
TDEConfigGroup cfgGroup( PMFactory::instance( )->config( ),
"KParts Plugins" );
TQValueList<Plugin::PluginInfo> plugins
= PMPluginWorkaround::installedPlugins( PMFactory::instance( ) );
TQValueList<Plugin::PluginInfo>::ConstIterator pIt = plugins.begin( );
TQValueList<Plugin::PluginInfo>::ConstIterator pEnd = plugins.end( );
for( ; pIt != pEnd; ++pIt )
{
TQDomElement docElem = ( *pIt ).m_document.documentElement( );
TQString name = docElem.attribute( "name" );
TQString description = docElem.attribute( "description" );
if( !description.isEmpty( ) )
description = i18n( description.latin1( ) );
bool enabled = cfgGroup.readBoolEntry( name + "Enabled", false );
m_plugins.append( new PMPluginInfo( name, description, enabled ) );
}
}
PMPluginManager::~PMPluginManager( )
{
m_plugins.setAutoDelete( true );
m_plugins.clear( );
}
PMPluginManager* PMPluginManager::theManager( )
{
if( !s_pInstance )
s_staticDeleter.setObject( s_pInstance, new PMPluginManager( ) );
return s_pInstance;
}
void PMPluginManager::registerPart( PMPart* p )
{
if( !m_parts.containsRef( p ) )
{
m_parts.append( p );
Plugin::loadPlugins( p, p, PMFactory::instance( ), false );
}
}
void PMPluginManager::removePart( PMPart* p )
{
m_parts.removeRef( p );
}
void PMPluginManager::updatePlugins( )
{
TDEConfigGroup cfgGroup( PMFactory::instance( )->config( ),
"KParts Plugins" );
TQPtrListIterator<PMPluginInfo> pit( m_plugins );
for( ; *pit; ++pit )
cfgGroup.writeEntry( ( *pit )->name( ) + "Enabled",
( *pit )->enabled( ) );
cfgGroup.sync( );
TQPtrListIterator<PMPart> it( m_parts );
for( ; *it; ++it )
{
Plugin::loadPlugins( *it, *it, PMFactory::instance( ), false );
PMShell* shell = ( *it )->shell( );
if( shell )
shell->updateGUI( );
// TODO find a solution to update the gui without using the shell
}
}