DecorateContainer

This commit is contained in:
alemuntoni 2021-03-01 12:25:59 +01:00
parent 300a22176d
commit 5a2bca939c
7 changed files with 141 additions and 34 deletions

View File

@ -18,6 +18,7 @@ endif()
set(HEADERS
globals.h
plugins/containers/generic_container_iterator.h
plugins/containers/decorate_plugin_container.h
plugins/containers/filter_plugin_container.h
plugins/containers/iomesh_plugin_container.h
plugins/containers/ioraster_plugin_container.h
@ -66,6 +67,7 @@ set(HEADERS
set(SOURCES
globals.cpp
plugins/containers/decorate_plugin_container.cpp
plugins/containers/filter_plugin_container.cpp
plugins/containers/iomesh_plugin_container.cpp
plugins/containers/ioraster_plugin_container.cpp

View File

@ -37,6 +37,7 @@ message(MeshLab Version: $$MESHLAB_VERSION)
HEADERS += \
globals.h \
plugins/containers/generic_container_iterator.h \
plugins/containers/decorate_plugin_container.h \
plugins/containers/filter_plugin_container.h \
plugins/containers/iomesh_plugin_container.h \
plugins/containers/ioraster_plugin_container.h \
@ -82,6 +83,7 @@ HEADERS += \
SOURCES += \
globals.cpp \
plugins/containers/decorate_plugin_container.cpp \
plugins/containers/filter_plugin_container.cpp \
plugins/containers/iomesh_plugin_container.cpp \
plugins/containers/ioraster_plugin_container.cpp \

View File

@ -0,0 +1,61 @@
/****************************************************************************
* 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. *
* *
****************************************************************************/
#include "decorate_plugin_container.h"
DecoratePluginContainer::DecoratePluginContainer()
{
}
void DecoratePluginContainer::clear()
{
decoratePlugins.clear();
}
void DecoratePluginContainer::pushFilterPlugin(DecoratePluginInterface* iDecorate)
{
decoratePlugins.push_back(iDecorate);
for(QAction *decoratorAction : iDecorate->actions()) {
iDecorate->initGlobalParameterList(decoratorAction, meshlab::defaultGlobalParameterList());
}
}
void DecoratePluginContainer::eraseFilterPlugin(DecoratePluginInterface* iDecorate)
{
decoratePlugins.erase(std::find(decoratePlugins.begin(), decoratePlugins.end(), iDecorate));
}
DecoratePluginInterface* DecoratePluginContainer::decoratePlugin(const QString& name)
{
for(DecoratePluginInterface *tt : decoratePlugins) {
for( QAction *ac: tt->actions())
if( name == tt->decorationName(ac) ) return tt;
}
return nullptr;
}
DecoratePluginContainer::DecoratePluginRangeIterator DecoratePluginContainer::decoratePluginIterator(bool iterateAlsoDisabledPlugins) const
{
return DecoratePluginRangeIterator(this, iterateAlsoDisabledPlugins);
}

View File

@ -0,0 +1,67 @@
/****************************************************************************
* 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_DECORATE_PLUGIN_CONTAINER_H
#define MESHLAB_DECORATE_PLUGIN_CONTAINER_H
#include "../interfaces/decorate_plugin_interface.h"
#include "generic_container_iterator.h"
/**
* @brief The DecoratePluginContainer class allows to organize
* all the decorate plugins contained in the PluginManager.
*
* Note: plugins are not owned by this container, but by the PluginManager,
* since each plugin can inherit from more than one PluginInterface.
*/
class DecoratePluginContainer
{
public:
class DecoratePluginRangeIterator;
DecoratePluginContainer();
void clear();
void pushFilterPlugin(DecoratePluginInterface* iDecorate);
void eraseFilterPlugin(DecoratePluginInterface* iDecorate);
DecoratePluginInterface* decoratePlugin(const QString& name);
DecoratePluginRangeIterator decoratePluginIterator(bool iterateAlsoDisabledPlugins = false) const;
private:
std::vector<DecoratePluginInterface*> decoratePlugins;
};
class DecoratePluginContainer::DecoratePluginRangeIterator
{
friend class DecoratePluginContainer;
public:
ConstPluginIterator<DecoratePluginInterface> begin() {return ConstPluginIterator<DecoratePluginInterface>(pm->decoratePlugins, pm->decoratePlugins.begin(), b);}
ConstPluginIterator<DecoratePluginInterface> end() {return ConstPluginIterator<DecoratePluginInterface>(pm->decoratePlugins, pm->decoratePlugins.end(), b);}
private:
DecoratePluginRangeIterator(const DecoratePluginContainer* pm, bool iterateAlsoDisabledPlugins = false) : pm(pm), b(iterateAlsoDisabledPlugins) {}
const DecoratePluginContainer* pm;
bool b;
};
#endif // MESHLAB_DECORATE_PLUGIN_CONTAINER_H

View File

@ -278,12 +278,7 @@ int PluginManager::numberIOPlugins() const
// Search among all the decorator plugins the one that contains a decoration with the given name
DecoratePluginInterface *PluginManager::getDecoratePlugin(const QString& name)
{
for(DecoratePluginInterface *tt : decoratePlugins) {
for( QAction *ac: tt->actions())
if( name == tt->decorationName(ac) ) return tt;
}
assert(0);
return 0;
return decoratePlugins.decoratePlugin(name);
}
QAction* PluginManager::filterAction(const QString& name)
@ -381,9 +376,9 @@ PluginManager::RenderPluginRangeIterator PluginManager::renderPluginIterator(boo
return RenderPluginRangeIterator(this, iterateAlsoDisabledPlugins);
}
PluginManager::DecoratePluginRangeIterator PluginManager::decoratePluginIterator(bool iterateAlsoDisabledPlugins) const
DecoratePluginContainer::DecoratePluginRangeIterator PluginManager::decoratePluginIterator(bool iterateAlsoDisabledPlugins) const
{
return DecoratePluginRangeIterator(this, iterateAlsoDisabledPlugins);
return decoratePlugins.decoratePluginIterator(iterateAlsoDisabledPlugins);
}
PluginManager::EditPluginFactoryRangeIterator PluginManager::editPluginFactoryIterator(bool iterateAlsoDisabledPlugins) const
@ -414,10 +409,7 @@ void PluginManager::checkFilterPlugin(FilterPluginInterface* iFilter)
void PluginManager::loadDecoratePlugin(DecoratePluginInterface* iDecorate)
{
decoratePlugins.push_back(iDecorate);
for(QAction *decoratorAction : iDecorate->actions()) {
iDecorate->initGlobalParameterList(decoratorAction, meshlab::defaultGlobalParameterList());
}
decoratePlugins.pushFilterPlugin(iDecorate);
}
void PluginManager::loadRenderPlugin(RenderPluginInterface* iRender)
@ -432,7 +424,7 @@ void PluginManager::loadEditPlugin(EditPluginInterfaceFactory* iEditFactory)
void PluginManager::unloadDecoratePlugin(DecoratePluginInterface* iDecorate)
{
decoratePlugins.erase(std::find(decoratePlugins.begin(), decoratePlugins.end(), iDecorate));
decoratePlugins.eraseFilterPlugin(iDecorate);
}
void PluginManager::unloadRenderPlugin(RenderPluginInterface* iRender)

View File

@ -24,13 +24,10 @@
#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 "containers/decorate_plugin_container.h"
#include "containers/filter_plugin_container.h"
#include "containers/iomesh_plugin_container.h"
#include "containers/ioraster_plugin_container.h"
@ -51,7 +48,6 @@ public:
/** Iterators (definitions can be found in plugin_manager_iterators.h) **/
class PluginRangeIterator;
class RenderPluginRangeIterator;
class DecoratePluginRangeIterator;
class EditPluginFactoryRangeIterator;
/** Member functions **/
@ -95,7 +91,7 @@ public:
IOMeshPluginContainer::IOMeshPluginRangeIterator ioMeshPluginIterator(bool iterateAlsoDisabledPlugins = false) const;
IORasterPluginContainer::IORasterPluginRangeIterator ioRasterPluginIterator(bool iterateAlsoDisabledPlugins = false) const;
RenderPluginRangeIterator renderPluginIterator(bool iterateAlsoDisabledPlugins = false) const;
DecoratePluginRangeIterator decoratePluginIterator(bool iterateAlsoDisabledPlugins = false) const;
DecoratePluginContainer::DecoratePluginRangeIterator decoratePluginIterator(bool iterateAlsoDisabledPlugins = false) const;
EditPluginFactoryRangeIterator editPluginFactoryIterator(bool iterateAlsoDisabledPlugins = false) const;
private:
@ -116,7 +112,8 @@ private:
std::vector<RenderPluginInterface*> renderPlugins;
//Decorate Plugins
std::vector<DecoratePluginInterface*> decoratePlugins;
DecoratePluginContainer decoratePlugins;
//std::vector<DecoratePluginInterface*> decoratePlugins;
//Edit Plugins
std::vector<EditPluginInterfaceFactory*> editPlugins;

View File

@ -43,20 +43,6 @@ private:
bool b;
};
class PluginManager::DecoratePluginRangeIterator
{
friend class PluginManager;
public:
ConstPluginIterator<DecoratePluginInterface> begin() {return ConstPluginIterator<DecoratePluginInterface>(pm->decoratePlugins, pm->decoratePlugins.begin(), b);}
ConstPluginIterator<DecoratePluginInterface> end() {return ConstPluginIterator<DecoratePluginInterface>(pm->decoratePlugins, pm->decoratePlugins.end(), b);}
//std::vector<DecoratePluginInterface*>::const_iterator begin() {return pm->decoratePlugins.begin();}
//std::vector<DecoratePluginInterface*>::const_iterator end() {return pm->decoratePlugins.end();}
private:
DecoratePluginRangeIterator(const PluginManager* pm, bool iterateAlsoDisabledPlugins = false) : pm(pm), b(iterateAlsoDisabledPlugins) {}
const PluginManager* pm;
bool b;
};
class PluginManager::EditPluginFactoryRangeIterator
{
friend class PluginManager;