filterPlugins iterator on plugin manager

This commit is contained in:
alemuntoni 2021-01-26 15:54:11 +01:00
parent ea28dc90e5
commit 3fc6b76fa3
6 changed files with 45 additions and 20 deletions

View File

@ -214,7 +214,7 @@ unsigned int PluginManager::size() const
}
// Search among all the decorator plugins the one that contains a decoration with the given name
DecoratePluginInterface *PluginManager::getDecoratorInterfaceByName(const QString& name)
DecoratePluginInterface *PluginManager::getDecoratePlugin(const QString& name)
{
foreach(DecoratePluginInterface *tt, this->meshDecoratePlugins())
{
@ -230,6 +230,11 @@ PluginManager::PluginRangeIterator PluginManager::pluginIterator()
return PluginRangeIterator(this);
}
PluginManager::FilterPluginRangeIterator PluginManager::filterPluginIterator()
{
return FilterPluginRangeIterator(this);
}
void PluginManager::fillKnownIOFormats()
{
QString allKnownFormatsFilter = QObject::tr("All known formats (");

View File

@ -52,12 +52,8 @@ public:
int numberIOPlugins() const;
unsigned int size() const;
inline QVector<FilterPluginInterface*>& meshFilterPlugins() {return filterPlugins;}
inline QVector<RenderPluginInterface*>& meshRenderPlugins() {return renderPlugins;}
inline QVector<DecoratePluginInterface*>& meshDecoratePlugins() {return decoratePlugins;}
inline QVector<EditPluginInterfaceFactory*>& meshEditFactoryPlugins() {return editPlugins;}
DecoratePluginInterface* getDecoratorInterfaceByName(const QString& name);
DecoratePluginInterface* getDecoratePlugin(const QString& name);
class PluginRangeIterator
{
@ -69,10 +65,28 @@ public:
PluginRangeIterator(PluginManager* pm) : pm(pm) {}
PluginManager* pm;
};
class FilterPluginRangeIterator
{
friend class PluginManager;
public:
QVector<FilterPluginInterface*>::iterator begin() {return pm->filterPlugins.begin();}
QVector<FilterPluginInterface*>::iterator end() {return pm->filterPlugins.end();}
private:
FilterPluginRangeIterator(PluginManager* pm) : pm(pm) {}
PluginManager* pm;
};
PluginRangeIterator pluginIterator();
FilterPluginRangeIterator filterPluginIterator();
static QString osIndependentPluginName(const QString& plname);
/** Old declarations, to be deleted */
inline QVector<RenderPluginInterface*>& meshRenderPlugins() {return renderPlugins;}
inline QVector<DecoratePluginInterface*>& meshDecoratePlugins() {return decoratePlugins;}
inline QVector<EditPluginInterfaceFactory*>& meshEditFactoryPlugins() {return editPlugins;}
QMap<QString, QAction*> actionFilterMap;
QMap<QString, FilterPluginInterface*> stringFilterMap;
@ -83,8 +97,6 @@ public:
QStringList inpRasterFilters;
QStringList outFilters;
QVector<FilterPluginInterface*> filterPlugins;
QVector<RenderPluginInterface*> renderPlugins;
QVector<DecoratePluginInterface*> decoratePlugins;
QVector<EditPluginInterfaceFactory*> editPlugins;
@ -98,6 +110,7 @@ private:
QVector<PluginInterface *> ownerPlug;
QVector<IOMeshPluginInterface*> ioMeshPlugins;
QVector<IORasterPluginInterface*> ioRasterPlugins;
QVector<FilterPluginInterface*> filterPlugins;
QDir pluginsDir;
void fillKnownIOFormats();

View File

@ -1403,7 +1403,7 @@ void GLArea::toggleDecorator(QString name)
void GLArea::updateDecorator(QString name, bool toggle, bool stateToSet)
{
makeCurrent();
DecoratePluginInterface *iDecorateTemp = this->mw()->PM.getDecoratorInterfaceByName(name);
DecoratePluginInterface *iDecorateTemp = this->mw()->PM.getDecoratePlugin(name);
if (!iDecorateTemp) {
this->Logf(GLLogStream::SYSTEM,"Could not get Decorate interface %s", qUtf8Printable(name));
this->Log(GLLogStream::SYSTEM,"Known decorate interfaces:");

View File

@ -238,6 +238,7 @@ private slots:
void wrapSetActiveSubWindow(QWidget* window);
void switchCurrentContainer(QMdiSubWindow *);
void updateFilterToolBar();
void updateGPUMemBar(int,int,int,int);
void updateLog();

View File

@ -497,15 +497,7 @@ void MainWindow::createToolBars()
filterToolBar = addToolBar(tr("Filter"));
filterToolBar->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
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);
} //else qDebug() << "action was null";
}
}
updateFilterToolBar();
QWidget *spacerWidget = new QWidget();
spacerWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
@ -830,8 +822,7 @@ void MainWindow::fillRenderMenu()
qaNone->setCheckable(false);
shadersMenu->addAction(qaNone);
connect(qaNone, SIGNAL(triggered()), this, SLOT(applyRenderMode()));
foreach(RenderPluginInterface *iRender, PM.meshRenderPlugins())
{
for(RenderPluginInterface *iRender: PM.meshRenderPlugins()) {
addToMenu(iRender->actions(), shadersMenu, SLOT(applyRenderMode()));
}
}

View File

@ -1926,6 +1926,21 @@ void MainWindow::documentUpdateRequested()
}
}
void MainWindow::updateFilterToolBar()
{
filterToolBar->clear();
for(FilterPluginInterface *iFilter: PM.filterPluginIterator()) {
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);
} //else qDebug() << "action was null";
}
}
}
void MainWindow::updateGPUMemBar(int nv_allmem, int nv_currentallocated, int ati_free_tex, int ati_free_vbo)
{
#ifdef Q_OS_WIN