first mod io formats in plugin manager

This commit is contained in:
alemuntoni 2020-11-27 14:24:19 +01:00
parent 8b83e96edb
commit 7ff1faef90
4 changed files with 81 additions and 80 deletions

View File

@ -40,7 +40,7 @@ PluginManager::PluginManager()
PluginManager::~PluginManager()
{
meshIOPlug.clear();
ioMeshPlugins.clear();
meshFilterPlug.clear();
meshRenderPlug.clear();
meshDecoratePlug.clear();
@ -120,11 +120,17 @@ void PluginManager::loadPlugins(RichParameterList& defaultGlobal, const QDir& pl
meshFilterPlug.push_back(iFilter);
}
}
IOMeshPluginInterface *iIO = qobject_cast<IOMeshPluginInterface *>(plugin);
if (iIO)
IOMeshPluginInterface *iIOMesh = qobject_cast<IOMeshPluginInterface *>(plugin);
if (iIOMesh)
{
iCommon = iIO;
meshIOPlug.push_back(iIO);
iCommon = iIOMesh;
ioMeshPlugins.push_back(iIOMesh);
}
IORasterPluginInterface* iIORaster = qobject_cast<IORasterPluginInterface*>(plugin);
if (iIORaster){
iCommon = iIORaster;
ioRasterPlugins.push_back(iIORaster);
}
DecoratePluginInterface *iDecorator = qobject_cast<DecoratePluginInterface *>(plugin);
@ -163,12 +169,12 @@ void PluginManager::loadPlugins(RichParameterList& defaultGlobal, const QDir& pl
else
qDebug() << loader.errorString();
}
knownIOFormats();
fillKnownIOFormats();
}
int PluginManager::numberIOPlugins() const
{
return meshIOPlug.size();
return ioMeshPlugins.size();
}
// Search among all the decorator plugins the one that contains a decoration with the given name
@ -272,58 +278,51 @@ QString PluginManager::getDefaultPluginDirPath()
void PluginManager::knownIOFormats()
void PluginManager::fillKnownIOFormats()
{
for (int inpOut = 0; inpOut < 2; ++inpOut)
{
QStringList* formatFilters = NULL;
QString allKnownFormatsFilter = QObject::tr("All known formats (");
for (QVector<IOMeshPluginInterface*>::iterator itIOPlugin = meshIOPlug.begin(); itIOPlugin != meshIOPlug.end(); ++itIOPlugin)
{
IOMeshPluginInterface* pMeshIOPlugin = *itIOPlugin;
QList<FileFormat> format;
QMap<QString, IOMeshPluginInterface*>* map = NULL;
if (inpOut == int(IMPORT))
{
map = &allKnowInputFormats;
formatFilters = &inpFilters;
format = pMeshIOPlugin->importFormats();
}
else
{
map = &allKnowOutputFormats;
formatFilters = &outFilters;
format = pMeshIOPlugin->exportFormats();
}
for (QList<FileFormat>::iterator itf = format.begin(); itf != format.end(); ++itf)
{
FileFormat currentFormat = *itf;
QString currentFilterEntry = currentFormat.description + " (";
//a particular file format could be associated with more than one file extension
QStringListIterator itExtension(currentFormat.extensions);
while (itExtension.hasNext())
{
QString currentExtension = itExtension.next().toLower();
if (!map->contains(currentExtension))
{
map->insert(currentExtension, pMeshIOPlugin);
allKnownFormatsFilter.append(QObject::tr(" *."));
allKnownFormatsFilter.append(currentExtension);
}
currentFilterEntry.append(QObject::tr(" *."));
currentFilterEntry.append(currentExtension);
}
currentFilterEntry.append(')');
formatFilters->append(currentFilterEntry);
}
}
allKnownFormatsFilter.append(')');
if (formatFilters != NULL)
formatFilters->push_front(allKnownFormatsFilter);
QString allKnownFormatsFilter = QObject::tr("All known formats (");
for (IOMeshPluginInterface* pMeshIOPlugin: ioMeshPlugins) {
allKnownFormatsFilter += addPluginFormats(allKnowInputMeshFormats, inpMeshFilters, pMeshIOPlugin, pMeshIOPlugin->importFormats());
}
allKnownFormatsFilter.append(')');
inpMeshFilters.push_front(allKnownFormatsFilter);
for (IOMeshPluginInterface* pMeshIOPlugin: ioMeshPlugins) {
allKnownFormatsFilter += addPluginFormats(allKnowOutputFormats, outFilters, pMeshIOPlugin, pMeshIOPlugin->exportFormats());
}
}
QString PluginManager::addPluginFormats(
QMap<QString, IOMeshPluginInterface*>& map,
QStringList& formatFilters,
IOMeshPluginInterface* pMeshIOPlugin,
const QList<FileFormat>& format)
{
QString allKnownFormatsFilter;
for (QList<FileFormat>::const_iterator itf = format.begin(); itf != format.end(); ++itf)
{
FileFormat currentFormat = *itf;
QString currentFilterEntry = currentFormat.description + " (";
//a particular file format could be associated with more than one file extension
QStringListIterator itExtension(currentFormat.extensions);
while (itExtension.hasNext())
{
QString currentExtension = itExtension.next().toLower();
if (!map.contains(currentExtension))
{
map.insert(currentExtension, pMeshIOPlugin);
allKnownFormatsFilter.append(QObject::tr(" *."));
allKnownFormatsFilter.append(currentExtension);
}
currentFilterEntry.append(QObject::tr(" *."));
currentFilterEntry.append(currentExtension);
}
currentFilterEntry.append(')');
formatFilters.append(currentFilterEntry);
}
return allKnownFormatsFilter;
}
QString PluginManager::osIndependentPluginName(const QString& plname)

View File

@ -26,6 +26,7 @@
#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"
@ -65,12 +66,14 @@ public:
QMap<QString, QAction*> actionFilterMap;
QMap<QString, FilterPluginInterface*> stringFilterMap;
QMap<QString,IOMeshPluginInterface*> allKnowInputFormats;
QMap<QString,IOMeshPluginInterface*> allKnowInputMeshFormats;
QMap<QString,IOMeshPluginInterface*> allKnowOutputFormats;
QStringList inpFilters;
QMap<QString, IORasterPluginInterface*> allKnownInputRasterFormats;
QStringList inpMeshFilters;
QStringList inpRasterFilters;
QStringList outFilters;
QVector<IOMeshPluginInterface*> meshIOPlug;
QVector<FilterPluginInterface*> meshFilterPlug;
QVector<RenderPluginInterface*> meshRenderPlug;
QVector<DecoratePluginInterface*> meshDecoratePlug;
@ -85,10 +88,17 @@ public:
static QString osIndependentPluginName(const QString& plname);
private:
QVector<IOMeshPluginInterface*> ioMeshPlugins;
QVector<IORasterPluginInterface*> ioRasterPlugins;
QDir pluginsDir;
void knownIOFormats();
void fillKnownIOFormats();
QString addPluginFormats(
QMap<QString, IOMeshPluginInterface*>& map,
QStringList& formatFilters,
IOMeshPluginInterface* pMeshIOPlugin,
const QList<FileFormat>& format);
};
#endif // PLUGINMANAGER_H

View File

@ -473,10 +473,8 @@ void MainWindow::createToolBars()
decoratorToolBar = addToolBar("Decorator");
foreach(DecoratePluginInterface *iDecorate, PM.meshDecoratePlugins())
{
foreach(QAction *decorateAction, iDecorate->actions())
{
for(DecoratePluginInterface *iDecorate: PM.meshDecoratePlugins()) {
for(QAction *decorateAction: iDecorate->actions()) {
if (!decorateAction->icon().isNull())
decoratorToolBar->addAction(decorateAction);
}
@ -484,12 +482,9 @@ void MainWindow::createToolBars()
editToolBar = addToolBar(tr("Edit"));
editToolBar->addAction(suspendEditModeAct);
foreach(EditPluginInterfaceFactory *iEditFactory, PM.meshEditFactoryPlugins())
{
foreach(QAction* editAction, iEditFactory->actions())
{
if (!editAction->icon().isNull())
{
for(EditPluginInterfaceFactory *iEditFactory: PM.meshEditFactoryPlugins()) {
for(QAction* editAction: iEditFactory->actions()){
if (!editAction->icon().isNull()) {
editToolBar->addAction(editAction);
}
else qDebug() << "action was null";
@ -500,12 +495,9 @@ void MainWindow::createToolBars()
filterToolBar = addToolBar(tr("Filter"));
filterToolBar->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
foreach(FilterPluginInterface *iFilter, PM.meshFilterPlugins())
{
foreach(QAction* filterAction, iFilter->actions())
{
if (!filterAction->icon().isNull())
{
for(FilterPluginInterface *iFilter: PM.meshFilterPlugins()) {
for(QAction* filterAction: iFilter->actions()) {
if (!filterAction->icon().isNull()) {
// tooltip = iFilter->filterInfo(filterAction) + "<br>" + getDecoratedFileName(filterAction->data().toString());
if (filterAction->priority() != QAction::LowPriority)
filterToolBar->addAction(filterAction);

View File

@ -2283,7 +2283,7 @@ bool MainWindow::importMesh(QString fileName,bool isareload)
//PM.LoadFormats(suffixList, allKnownFormats,PluginManager::IMPORT);
QStringList fileNameList;
if (fileName.isEmpty())
fileNameList = QFileDialog::getOpenFileNames(this,tr("Import Mesh"), lastUsedDirectory.path(), PM.inpFilters.join(";;"));
fileNameList = QFileDialog::getOpenFileNames(this,tr("Import Mesh"), lastUsedDirectory.path(), PM.inpMeshFilters.join(";;"));
else
fileNameList.push_back(fileName);
@ -2302,7 +2302,7 @@ bool MainWindow::importMesh(QString fileName,bool isareload)
{
QFileInfo fi(fileName);
QString extension = fi.suffix();
IOMeshPluginInterface *pCurrentIOPlugin = PM.allKnowInputFormats[extension.toLower()];
IOMeshPluginInterface *pCurrentIOPlugin = PM.allKnowInputMeshFormats[extension.toLower()];
//pCurrentIOPlugin->setLog(gla->log);
if (pCurrentIOPlugin == NULL)
{
@ -2398,7 +2398,7 @@ bool MainWindow::loadMeshWithStandardParams(QString& fullPath, MeshModel* mm, co
mm->Clear();
QFileInfo fi(fullPath);
QString extension = fi.suffix();
IOMeshPluginInterface *pCurrentIOPlugin = PM.allKnowInputFormats[extension.toLower()];
IOMeshPluginInterface *pCurrentIOPlugin = PM.allKnowInputMeshFormats[extension.toLower()];
if(pCurrentIOPlugin != NULL)
{