/**************************************************************************** * MeshLab o o * * A versatile mesh processing toolbox o o * * _ O _ * * Copyright(C) 2005-2021 \/)\/ * * Visual Computing Lab /\/| * * ISTI - Italian National Research Council | * * \ * * All rights reserved. * * * * 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. * * * * 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 (http://www.gnu.org/licenses/gpl.txt) * * for more details. * * * ****************************************************************************/ #ifndef MESHLAB_PLUGIN_MANAGER_H #define MESHLAB_PLUGIN_MANAGER_H #include "interfaces/filter_plugin_interface.h" #include "interfaces/iomesh_plugin_interface.h" #include "interfaces/ioraster_plugin_interface.h" #include "interfaces/render_plugin_interface.h" #include "interfaces/decorate_plugin_interface.h" #include "interfaces/edit_plugin_interface.h" #include #include #include /** \brief This class provides the basic tools for managing all the plugins. It is used by both meshlab and meshlab server. */ class PluginManager { public: PluginManager(); ~PluginManager(); /** Iterators (definitions can be found in plugin_manager_iterators.h) **/ class PluginRangeIterator; class FilterPluginRangeIterator; class IOMeshPluginIterator; class IORasterPluginIterator; class RenderPluginRangeIterator; class DecoratePluginRangeIterator; class EditPluginFactoryRangeIterator; /** Member functions **/ void loadPlugins(); void loadPlugins(const QDir& pluginsDirectory); void loadPlugin(const QString& filename); void enablePlugin(PluginFileInterface* fpi); void disablePlugin(PluginFileInterface* fpi); QString pluginsCode() const; unsigned int size() const; int numberIOPlugins() const; DecoratePluginInterface* getDecoratePlugin(const QString& name); QAction* filterAction(const QString& name); IOMeshPluginInterface* inputMeshPlugin(const QString& inputFormat) const; IOMeshPluginInterface* outputMeshPlugin(const QString& outputFormat) const; IORasterPluginInterface* inputRasterPlugin(const QString inputFormat) const; bool isInputMeshFormatSupported(const QString inputFormat) const; bool isOutputMeshFormatSupported(const QString outputFormat) const; bool isInputRasterFormatSupported(const QString inputFormat) const; QStringList inputMeshFormatList() const; QStringList outputMeshFormatList() const; QStringList inputRasterFormatList() const; QStringList inputMeshFormatListDialog() const; QStringList outputMeshFormatListDialog() const; QStringList inputRasterFormatListDialog() const; PluginFileInterface* operator [](unsigned int i) const; /** Member functions for range iterators **/ PluginRangeIterator pluginIterator(bool iterateAlsoDisabledPlugins = false) const; FilterPluginRangeIterator filterPluginIterator(bool iterateAlsoDisabledPlugins = false) const; IOMeshPluginIterator ioMeshPluginIterator(bool iterateAlsoDisabledPlugins = false) const; IORasterPluginIterator ioRasterPluginIterator(bool iterateAlsoDisabledPlugins = false) const; RenderPluginRangeIterator renderPluginIterator(bool iterateAlsoDisabledPlugins = false) const; DecoratePluginRangeIterator decoratePluginIterator(bool iterateAlsoDisabledPlugins = false) const; EditPluginFactoryRangeIterator editPluginFactoryIterator(bool iterateAlsoDisabledPlugins = false) const; private: QDir pluginsDir; //all plugins (except Edit plugins) std::vector allPlugins; //IOMeshPlugins std::vector ioMeshPlugins; QMap inputMeshFormatToPluginMap; QMap outputMeshFormatToPluginMap; //IORasterPlugins std::vector ioRasterPlugins; QMap inputRasterFormatToPluginMap; //Filter Plugins std::vector filterPlugins; QMap actionFilterMap; //Render Plugins std::vector renderPlugins; //Decorate Plugins std::vector decoratePlugins; //Edit Plugins std::vector editPlugins; void loadFilterPlugin(FilterPluginInterface* iFilter, const QString& fileName); void loadIOMeshPlugin(IOMeshPluginInterface* iIOMesh, const QString& fileName); void loadIORasterPlugin(IORasterPluginInterface* iIORaster, const QString& fileName); void loadDecoratePlugin(DecoratePluginInterface* iDecorate, const QString& fileName); void loadRenderPlugin(RenderPluginInterface* iRender, const QString& fileName); void loadEditPlugin(EditPluginInterfaceFactory* iEditFactory, const QString& fileName); }; #include "plugin_manager_iterators.h" #endif // MESHLAB_PLUGIN_MANAGER_H