mirror of
https://github.com/lucaspalomodevelop/meshlab.git
synced 2026-03-13 16:14:38 +00:00
first mod io formats in plugin manager
This commit is contained in:
parent
8b83e96edb
commit
7ff1faef90
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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)
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user