29 #include "libqutim_version.h"
31 #include <QtCore/QtPlugin>
32 #include <QtCore/QObject>
33 #include <QtCore/QSharedDataPointer>
35 #define PLUGIN_VERSION(major, minor, secminor, patch) QUTIM_MAKE_VERSION(major, minor, secminor, patch)
37 namespace qutim_sdk_0_3
53 Q_DECLARE_FLAGS(Capabilities, Capability)
56 const LocalizedString &description = LocalizedString(),
62 PluginInfo &addAuthor(const QString &ocsUsername);
63 PluginInfo &addAuthor(const LocalizedString &name, const LocalizedString &task,
64 const QString &email = QString(), const QString &web = QString());
65 PluginInfo &setName(const LocalizedString &name);
66 PluginInfo &setDescription(const LocalizedString &description);
67 PluginInfo &setIcon(const ExtensionIcon &icon);
69 Capabilities capabilities() const;
70 PluginInfo &setCapabilities(Capabilities capabilities);
72 LocalizedString name() const;
73 LocalizedString description() const;
74 quint32 version() const;
75 ExtensionIcon icon() const;
77 QString fileName()
const;
79 QSharedDataPointer<PluginInfoData> d;
81 typedef PluginInfoData Data;
86 class CommandArgumentPrivate;
98 Q_DECLARE_FLAGS(Types,
Type)
100 CommandArgument(const QString &name, const QString &desc = QString(), Types types = NoValue,
int group = -1);
105 QString name() const;
106 QString description() const;
109 void setAliases(const QStringList &aliases);
110 void addAlias(const QStringList &alias);
111 QStringList aliases() const;
114 QSharedPointer<CommandArgumentPrivate> d;
120 virtual ~CommandArgumentsHandler();
122 virtual QStringList commands() = 0;
123 virtual QList<CommandArgument> commandOptions(
const QString &name) = 0;
127 typedef void ( *ModuleInit)();
141 Q_DECLARE_FLAGS(Capabilities, Capability)
146 virtual
void init() = 0;
147 virtual
bool load() = 0;
148 virtual
bool unload() = 0;
152 const QString &email = QString(), const QString &web = QString());
153 void addAuthor(const QString &ocsUsername);
156 void setCapabilities(Capabilities capabilities);
158 const
ObjectGenerator *generator, ExtensionIcon icon = ExtensionIcon());
161 ExtensionIcon icon = ExtensionIcon())
163 template<
typename T,
typename I0>
167 template<
typename T,
typename I0,
typename I1>
173 QScopedPointer<PluginPrivate> p;
183 virtual QList<Plugin*> loadPlugins() = 0;
189 Q_DECLARE_OPERATORS_FOR_FLAGS(qutim_sdk_0_3::PluginInfo::Capabilities)
190 Q_DECLARE_OPERATORS_FOR_FLAGS(qutim_sdk_0_3::
Plugin::Capabilities)
192 #ifdef QUTIM_STATIC_PLUGIN
194 # define QUTIM_DEBUG_ID_CONVERT_HELPER(A) 0x ## A ## ULL
195 # define QUTIM_DEBUG_ID_CONVERT(A) QUTIM_DEBUG_ID_CONVERT_HELPER(A)
196 # define QUTIM_PLUGIN_INSTANCE_BODY(IMPLEMENTATION) \
198 static QT_PREPEND_NAMESPACE(QPointer)<QT_PREPEND_NAMESPACE(QObject)> _instance; \
200 _instance = new IMPLEMENTATION; \
201 debugAddPluginId(QUTIM_DEBUG_ID_CONVERT(QUTIM_PLUGIN_ID), &IMPLEMENTATION::staticMetaObject);\
205 # define QUTIM_EXPORT_PLUGIN_HELPER(PluginInstance, Class) \
206 QT_PREPEND_NAMESPACE(QObject) \
208 QUTIM_PLUGIN_INSTANCE_BODY(Class)
209 # undef QUTIM_DEBUG_ID_CONVERT_HELPER
210 # undef QUTIM_DEBUG_ID_CONVERT
212 # define QUTIM_EXPORT_PLUGIN(Class) \
213 QUTIM_EXPORT_PLUGIN_HELPER(QUTIM_PLUGIN_INSTANCE_BODY, Class)
214 # define QUTIM_EXPORT_PLUGIN2(Plugin,Class) \
215 QUTIM_EXPORT_PLUGIN(Class)
217 # define QUTIM_EXPORT_STRING_HELPER(ID) #ID
218 # define QUTIM_EXPORT_STRING(ID) QUTIM_EXPORT_STRING_HELPER(ID)
219 # define QUTIM_EXPORT_PLUGIN2(Plugin,Class) \
220 Q_EXPORT_PLUGIN2(Plugin,Class) \
221 static const char *qutim_plugin_verification_data = \
222 "pattern=""QUTIM_PLUGIN_VERIFICATION_DATA""\n" \
223 "debugid=" QUTIM_EXPORT_STRING(QUTIM_PLUGIN_ID)"\n" \
224 "libqutim=" QUTIM_VERSION_STRING"\0"; \
225 Q_EXTERN_C Q_DECL_EXPORT \
226 const char * Q_STANDARD_CALL qutim_plugin_query_verification_data() \
227 { return qutim_plugin_verification_data; }
229 #define QUTIM_EXPORT_PLUGIN(Plugin) \
230 QUTIM_EXPORT_PLUGIN2(Plugin, Plugin)
233 Q_DECLARE_INTERFACE(qutim_sdk_0_3::CommandArgumentsHandler, "org.qutim.CommandArgumentsHandler")