diff --git a/src/common/pluginmanager.cpp b/src/common/pluginmanager.cpp index c98a66d5b..63dc8eeaa 100644 --- a/src/common/pluginmanager.cpp +++ b/src/common/pluginmanager.cpp @@ -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(plugin); - if (iIO) + IOMeshPluginInterface *iIOMesh = qobject_cast(plugin); + if (iIOMesh) { - iCommon = iIO; - meshIOPlug.push_back(iIO); + iCommon = iIOMesh; + ioMeshPlugins.push_back(iIOMesh); + } + + IORasterPluginInterface* iIORaster = qobject_cast(plugin); + if (iIORaster){ + iCommon = iIORaster; + ioRasterPlugins.push_back(iIORaster); } DecoratePluginInterface *iDecorator = qobject_cast(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::iterator itIOPlugin = meshIOPlug.begin(); itIOPlugin != meshIOPlug.end(); ++itIOPlugin) - { - IOMeshPluginInterface* pMeshIOPlugin = *itIOPlugin; - QList format; - QMap* map = NULL; - if (inpOut == int(IMPORT)) - { - map = &allKnowInputFormats; - formatFilters = &inpFilters; - format = pMeshIOPlugin->importFormats(); - } - else - { - map = &allKnowOutputFormats; - formatFilters = &outFilters; - format = pMeshIOPlugin->exportFormats(); - } - for (QList::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& map, + QStringList& formatFilters, + IOMeshPluginInterface* pMeshIOPlugin, + const QList& format) +{ + QString allKnownFormatsFilter; + for (QList::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) diff --git a/src/common/pluginmanager.h b/src/common/pluginmanager.h index 55183c7a7..3f37fca12 100644 --- a/src/common/pluginmanager.h +++ b/src/common/pluginmanager.h @@ -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 actionFilterMap; QMap stringFilterMap; - QMap allKnowInputFormats; + QMap allKnowInputMeshFormats; QMap allKnowOutputFormats; - QStringList inpFilters; + QMap allKnownInputRasterFormats; + QStringList inpMeshFilters; + QStringList inpRasterFilters; QStringList outFilters; - QVector meshIOPlug; + QVector meshFilterPlug; QVector meshRenderPlug; QVector meshDecoratePlug; @@ -85,10 +88,17 @@ public: static QString osIndependentPluginName(const QString& plname); private: + QVector ioMeshPlugins; + QVector ioRasterPlugins; QDir pluginsDir; - void knownIOFormats(); + void fillKnownIOFormats(); + QString addPluginFormats( + QMap& map, + QStringList& formatFilters, + IOMeshPluginInterface* pMeshIOPlugin, + const QList& format); }; #endif // PLUGINMANAGER_H diff --git a/src/meshlab/mainwindow_Init.cpp b/src/meshlab/mainwindow_Init.cpp index c7821146c..4f2e43326 100644 --- a/src/meshlab/mainwindow_Init.cpp +++ b/src/meshlab/mainwindow_Init.cpp @@ -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) + "
" + getDecoratedFileName(filterAction->data().toString()); if (filterAction->priority() != QAction::LowPriority) filterToolBar->addAction(filterAction); diff --git a/src/meshlab/mainwindow_RunTime.cpp b/src/meshlab/mainwindow_RunTime.cpp index cf3942af1..3f7bd2afb 100644 --- a/src/meshlab/mainwindow_RunTime.cpp +++ b/src/meshlab/mainwindow_RunTime.cpp @@ -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) {