1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
//##########################################################################
//# #
//# CLOUDCOMPARE #
//# #
//# 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; version 2 of the License. #
//# #
//# This program 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 General Public License for more details. #
//# #
//# COPYRIGHT: EDF R&D / TELECOM ParisTech (ENST-TSI) #
//# #
//##########################################################################
#ifndef CC_PLUGIN_INTERFACE_HEADER
#define CC_PLUGIN_INTERFACE_HEADER
//Qt
#include <QIcon>
#include <QList>
#include <QObject>
#include <QPair>
#include <QString>
//Qt version
#include <qglobal.h>
class ccExternalFactory;
class ccCommandLineInterface;
//! Plugin type
enum CC_PLUGIN_TYPE { CC_STD_PLUGIN = 1,
CC_GL_FILTER_PLUGIN = 2,
CC_IO_FILTER_PLUGIN = 4,
};
//! Standard CC plugin interface
/** Version 3.1
**/
class ccPluginInterface
{
public:
// Contact represents a person and is used for authors and maintainer lists
struct Contact {
QString name;
QString email;
};
typedef QList<Contact> ContactList;
// Reference represents a journal article or online post about the plugin where
// the user can find more information.
struct Reference {
QString article;
QString url;
};
typedef QList<Reference> ReferenceList;
public:
//! Virtual destructor
virtual ~ccPluginInterface() = default;
//! Returns plugin type (standard or OpenGL filter)
virtual CC_PLUGIN_TYPE getType() const = 0;
//! Is this plugin a core plugin?
virtual bool isCore() const = 0;
//! Returns (short) name (for menu entry, etc.)
virtual QString getName() const = 0;
//! Returns long name/description (for tooltip, etc.)
virtual QString getDescription() const = 0;
//! Returns icon
/** Should be reimplemented if necessary
**/
virtual QIcon getIcon() const { return QIcon(); }
//! Returns a list of references (articles and websites) for the plugin
//! This is optional.
//! See qDummyPlugin for a real example.
//! Added in v3.1 of the plugin interface.
virtual ReferenceList getReferences() const { return ReferenceList{}; }
//! Returns a list of the authors' names and email addresses
//! This is optional.
//! See qDummyPlugin for a real example.
//! Added in v3.1 of the plugin interface.
virtual ContactList getAuthors() const { return ContactList{}; }
//! Returns a list of the maintainers' names and email addresses
//! This is optional.
//! See qDummyPlugin for a real example.
//! Added in v3.1 of the plugin interface.
virtual ContactList getMaintainers() const { return ContactList{}; }
//! Starts the plugin
/** Should be reimplemented if necessary.
Used when 'starting' a plugin from the command line
(to start a background service, a thread, etc.)
**/
virtual bool start() { return true; }
//! Stops the plugin
/** Should be reimplemented if necessary.
Used to stop a plugin previously started (see ccPluginInterface::start).
**/
virtual void stop() { }
//! Returns the plugin's custom object factory (if any)
/** Plugins may provide a factory to build custom objects.
This allows qCC_db to properly code and decode the custom
objects stream in BIN files. Custom objects must inherit the
ccCustomHObject or ccCustomLeafObject interfaces.
**/
virtual ccExternalFactory* getCustomObjectsFactory() const { return nullptr; }
//! Optional: registers commands (for the command line mode)
/** Does nothing by default.
\warning: don't use keywords that are already used by the main application or other plugins!
(use a unique prefix for all commands if possible)
**/
virtual void registerCommands(ccCommandLineInterface* cmd) {}
};
Q_DECLARE_METATYPE(const ccPluginInterface *);
Q_DECLARE_INTERFACE(ccPluginInterface, "edf.rd.CloudCompare.ccPluginInterface/3.1")
#endif //CC_PLUGIN_INTERFACE_HEADER
|