/* * * $Id: k3bpluginfactory.h 619556 2007-01-03 17:38:12Z trueg $ * Copyright (C) 2003 Sebastian Trueg * * This file is part of the K3b project. * Copyright (C) 1998-2007 Sebastian Trueg * * 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. * See the file "COPYING" for the exact licensing terms. */ #ifndef _K3B_PLUGIN_FACTORY_H_ #define _K3B_PLUGIN_FACTORY_H_ #include #include #include #include /** * Template based on KGenericFactory. This is just here to avoid using the TQStringList args parameter * in every plugin's constructor. * * Use this as follows: * K_EXPORT_COMPONENT_FACTORY( libk3bartsaudioserver, K3bPluginFactory( "k3bartsaudioserver" ) ) * * See KGenericFactory for more information. */ template class K3bPluginFactory : public KLibFactory { public: K3bPluginFactory( const char* instanceName ) : m_instanceName(instanceName) { s_self = this; m_catalogueInitialized = false; } ~K3bPluginFactory() { if ( s_instance ) TDEGlobal::locale()->removeCatalogue( s_instance->instanceName() ); delete s_instance; s_instance = 0; s_self = 0; } static TDEInstance* instance(); protected: virtual void setupTranslations( void ) { if( instance() ) TDEGlobal::locale()->insertCatalogue( instance()->instanceName() ); } void initializeMessageCatalogue() { if( !m_catalogueInitialized ) { m_catalogueInitialized = true; setupTranslations(); } } virtual TQObject* createObject( TQObject *parent, const char *name, const char*, const TQStringList& ) { initializeMessageCatalogue(); return new T( parent, name ); } private: TQCString m_instanceName; bool m_catalogueInitialized; static TDEInstance* s_instance; static K3bPluginFactory *s_self; }; template TDEInstance* K3bPluginFactory::s_instance = 0; template K3bPluginFactory* K3bPluginFactory::s_self = 0; template TDEInstance* K3bPluginFactory::instance() { if( !s_instance && s_self ) s_instance = new TDEInstance( s_self->m_instanceName ); return s_instance; } #endif