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.
tdepim/kontact/interfaces/plugin.cpp

260 lines
5.0 KiB

/*
This file is part of KDE Kontact.
Copyright (c) 2001 Matthias Hoelzer-Kluepfel <mhk@kde.org>
Copyright (c) 2002-2003 Daniel Molkentin <molkentin@kde.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
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 <qobjectlist.h>
#include <dcopclient.h>
#include <kaboutdata.h>
#include <kglobal.h>
#include <kparts/componentfactory.h>
#include <kdebug.h>
#include <kinstance.h>
#include <krun.h>
#include "core.h"
#include "plugin.h"
using namespace Kontact;
class Plugin::Private
{
public:
Kontact::Core *core;
DCOPClient *dcopClient;
QPtrList<KAction> *newActions;
QPtrList<KAction> *syncActions;
QString identifier;
QString title;
QString icon;
QString executableName;
QCString partLibraryName;
bool hasPart;
KParts::ReadOnlyPart *part;
bool disabled;
};
Plugin::Plugin( Kontact::Core *core, QObject *parent, const char *name )
: KXMLGUIClient( core ), QObject( parent, name ), d( new Private )
{
core->factory()->addClient( this );
KGlobal::locale()->insertCatalogue(name);
d->core = core;
d->dcopClient = 0;
d->newActions = new QPtrList<KAction>;
d->syncActions = new QPtrList<KAction>;
d->hasPart = true;
d->part = 0;
d->disabled = false;
}
Plugin::~Plugin()
{
delete d->part;
delete d->dcopClient;
delete d;
}
void Plugin::setIdentifier( const QString &identifier )
{
d->identifier = identifier;
}
QString Plugin::identifier() const
{
return d->identifier;
}
void Plugin::setTitle( const QString &title )
{
d->title = title;
}
QString Plugin::title() const
{
return d->title;
}
void Plugin::setIcon( const QString &icon )
{
d->icon = icon;
}
QString Plugin::icon() const
{
return d->icon;
}
void Plugin::setExecutableName( const QString& bin )
{
d->executableName = bin;
}
QString Plugin::executableName() const
{
return d->executableName;
}
void Plugin::setPartLibraryName( const QCString &libName )
{
d->partLibraryName = libName;
}
KParts::ReadOnlyPart *Plugin::loadPart()
{
return core()->createPart( d->partLibraryName );
}
const KAboutData *Plugin::aboutData()
{
kdDebug(5601) << "Plugin::aboutData(): libname: " << d->partLibraryName << endl;
const KInstance *instance =
KParts::Factory::partInstanceFromLibrary( d->partLibraryName );
if ( instance ) {
return instance->aboutData();
} else {
kdError() << "Plugin::aboutData(): Can't load instance for "
<< title() << endl;
return 0;
}
}
KParts::ReadOnlyPart *Plugin::part()
{
if ( !d->part ) {
d->part = createPart();
if ( d->part ) {
connect( d->part, SIGNAL( destroyed() ), SLOT( partDestroyed() ) );
core()->partLoaded( this, d->part );
}
}
return d->part;
}
QString Plugin::tipFile() const
{
return QString::null;
}
DCOPClient* Plugin::dcopClient() const
{
if ( !d->dcopClient ) {
d->dcopClient = new DCOPClient();
// ### Note: maybe we could use executableName().latin1() instead here.
// But this requires that dcopClient is NOT called by the constructor,
// and is called by some new virtual void init() later on.
d->dcopClient->registerAs( name(), false );
}
return d->dcopClient;
}
void Plugin::insertNewAction( KAction *action )
{
d->newActions->append( action );
}
void Plugin::insertSyncAction( KAction *action )
{
d->syncActions->append( action );
}
QPtrList<KAction> *Plugin::newActions() const
{
return d->newActions;
}
QPtrList<KAction> *Plugin::syncActions() const
{
return d->syncActions;
}
Kontact::Core *Plugin::core() const
{
return d->core;
}
void Plugin::select()
{
}
void Plugin::configUpdated()
{
}
void Plugin::partDestroyed()
{
d->part = 0;
}
void Plugin::slotConfigUpdated()
{
configUpdated();
}
void Plugin::bringToForeground()
{
if (!d->executableName.isEmpty())
KRun::runCommand(d->executableName);
}
bool Kontact::Plugin::showInSideBar() const
{
return d->hasPart;
}
void Kontact::Plugin::setShowInSideBar( bool hasPart )
{
d->hasPart = hasPart;
}
void Kontact::Plugin::setDisabled( bool disabled )
{
d->disabled = disabled;
}
bool Kontact::Plugin::disabled() const
{
return d->disabled;
}
void Kontact::Plugin::loadProfile( const QString& )
{
}
void Kontact::Plugin::saveToProfile( const QString& ) const
{
}
void Plugin::virtual_hook( int, void* ) {
//BASE::virtual_hook( id, data );
}
#include "plugin.moc"
// vim: sw=2 et sts=2 tw=80