diff options
Diffstat (limited to 'lib/interfaces/tdevgenericfactory.h')
-rw-r--r-- | lib/interfaces/tdevgenericfactory.h | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/lib/interfaces/tdevgenericfactory.h b/lib/interfaces/tdevgenericfactory.h new file mode 100644 index 00000000..7fdbdb28 --- /dev/null +++ b/lib/interfaces/tdevgenericfactory.h @@ -0,0 +1,91 @@ +/* This file is part of the KDE project + * Copyright (C) 2003 Harald Fernengel <harry@kdevelop.org> + * Copyright (C) 2004 Alexander Dymo <adymo@kdevelop.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 <kgenericfactory.h> +#include <tdeaboutdata.h> + +/** +@file tdevgenericfactory.h +KDevelop generic plugin factory. +*/ + +/** +This class provides a generic implementation of a KLibFactory for +use with TDevelop plugins. +Usually it is convenient to use K_EXPORT_COMPONENT_FACTORY macro +to create factories for TDevelop plugins. For example, for DummyPlugin +the factory can be created (in dummyplugin.cpp file) as: +@code +typedef TDevGenericFactory<DummyPlugin> DummyPluginFactory; +K_EXPORT_COMPONENT_FACTORY(libtdevdummyplugin, DummyPluginFactory( data ) ) +@endcode +Data should be a const static object. This way it complies with the requirements +for data objecs of TDevGenericFactory constructor. + +<b>Important:</b><br> +There is no need to create @ref TDEAboutData objects. It is more useful to create +a static const @ref TDevPluginInfo object which can be used also in the constructor +of a plugin. + +For example, dummyplugin.cpp file could contain: +@code +#include <tdevplugininfo.h> + +static const TDevPluginInfo data("KDevDummyPlugin"); +typedef TDevGenericFactory<DummyPlugin> DummyPluginFactory; +K_EXPORT_COMPONENT_FACTORY(libtdevdummyplugin, DummyPluginFactory( data ) ) + +DummyPlugin::DummyPlugin(TQObject *parent, const char *name, const TQStringList & ) + :TDevPlugin(&data, parent, name) +{ +} +@endcode + +In the example above the duplication of information is avoided as same @ref TDevPluginInfo +objects are used for plugin and for plugin factory. This is possible because @ref TDevPluginInfo +class has an operator to cast @ref TDevPluginInfo to @ref TDEAboutData. +*/ +template <class T, class ParentType = TQObject> +class TDevGenericFactory: public KGenericFactory<T, ParentType> +{ +public: + /**Constructor. + @param data A reference to TDEAboutData with an information about the plugin. + Data should have: + - plugin name as an application name; + - untranslated plugin generic name as a product name; + - license type number. + . + data object should live as long as factory lives.*/ + TDevGenericFactory(TDEAboutData *data) + :KGenericFactory<T, ParentType>(data->appName()), aboutData(data) + { + } + + /**Creates an instance.*/ + TDEInstance *createInstance() + { + return new TDEInstance(aboutData); + } + +private: + TDEAboutData *aboutData; + +}; + |