mirror of
https://github.com/lucaspalomodevelop/meshlab.git
synced 2026-03-16 17:44:36 +00:00
unload of plugins works!
This commit is contained in:
parent
8aa1ed1cc9
commit
c1249971ee
@ -214,20 +214,48 @@ void PluginManager::loadPlugin(const QString& fileName)
|
||||
allPlugins.push_back(ifp);
|
||||
}
|
||||
|
||||
void PluginManager::enablePlugin(PluginFileInterface* fpi)
|
||||
void PluginManager::unloadPlugin(PluginFileInterface* ifp)
|
||||
{
|
||||
auto it = std::find(allPlugins.begin(), allPlugins.end(), fpi);
|
||||
if (it != allPlugins.end() && !fpi->isEnabled()){
|
||||
fpi->enable();
|
||||
auto it = std::find(allPlugins.begin(), allPlugins.end(), ifp);
|
||||
if (it != allPlugins.end()){
|
||||
MeshLabPluginType type(ifp);
|
||||
if (type.isDecoratePlugin()){
|
||||
unloadDecoratePlugin(dynamic_cast<DecoratePluginInterface *>(ifp));
|
||||
}
|
||||
if (type.isEditPlugin()){
|
||||
unloadEditPlugin(dynamic_cast<EditPluginInterfaceFactory *>(ifp));
|
||||
}
|
||||
if (type.isFilterPlugin()){
|
||||
unloadFilterPlugin(dynamic_cast<FilterPluginInterface *>(ifp));
|
||||
}
|
||||
if (type.isIOMeshPlugin()){
|
||||
unloadIOMeshPlugin(dynamic_cast<IOMeshPluginInterface *>(ifp));
|
||||
}
|
||||
if (type.isIORasterPlugin()){
|
||||
unloadIORasterPlugin(dynamic_cast<IORasterPluginInterface*>(ifp));
|
||||
}
|
||||
if (type.isRenderPlugin()){
|
||||
unloadRenderPlugin(dynamic_cast<RenderPluginInterface *>(ifp));
|
||||
}
|
||||
allPlugins.erase(it);
|
||||
delete ifp;
|
||||
}
|
||||
}
|
||||
|
||||
void PluginManager::enablePlugin(PluginFileInterface* ifp)
|
||||
{
|
||||
auto it = std::find(allPlugins.begin(), allPlugins.end(), ifp);
|
||||
if (it != allPlugins.end() && !ifp->isEnabled()){
|
||||
ifp->enable();
|
||||
//ToDo other checks...
|
||||
}
|
||||
}
|
||||
|
||||
void PluginManager::disablePlugin(PluginFileInterface* fpi)
|
||||
void PluginManager::disablePlugin(PluginFileInterface* ifp)
|
||||
{
|
||||
auto it = std::find(allPlugins.begin(), allPlugins.end(), fpi);
|
||||
if (it != allPlugins.end() && fpi->isEnabled()){
|
||||
fpi->disable();
|
||||
auto it = std::find(allPlugins.begin(), allPlugins.end(), ifp);
|
||||
if (it != allPlugins.end() && ifp->isEnabled()){
|
||||
ifp->disable();
|
||||
//ToDo other checks...
|
||||
}
|
||||
}
|
||||
@ -456,6 +484,54 @@ void PluginManager::loadEditPlugin(EditPluginInterfaceFactory* iEditFactory)
|
||||
editPlugins.push_back(iEditFactory);
|
||||
}
|
||||
|
||||
void PluginManager::unloadFilterPlugin(FilterPluginInterface* iFilter)
|
||||
{
|
||||
for(QAction *filterAction : iFilter->actions()) {
|
||||
actionFilterMap.remove(filterAction->text());
|
||||
}
|
||||
filterPlugins.erase(std::find(filterPlugins.begin(), filterPlugins.end(), iFilter));
|
||||
}
|
||||
|
||||
void PluginManager::unloadIOMeshPlugin(IOMeshPluginInterface* iIOMesh)
|
||||
{
|
||||
ioMeshPlugins.erase(std::find(ioMeshPlugins.begin(), ioMeshPlugins.end(), iIOMesh));
|
||||
for (const FileFormat& ff : iIOMesh->importFormats()){
|
||||
for (QString currentExtension : ff.extensions) {
|
||||
inputMeshFormatToPluginMap.remove(currentExtension.toLower());
|
||||
}
|
||||
}
|
||||
for (const FileFormat& ff : iIOMesh->exportFormats()){
|
||||
for (QString currentExtension : ff.extensions) {
|
||||
outputMeshFormatToPluginMap.remove(currentExtension.toLower());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PluginManager::unloadIORasterPlugin(IORasterPluginInterface* iIORaster)
|
||||
{
|
||||
ioRasterPlugins.erase(std::find(ioRasterPlugins.begin(), ioRasterPlugins.end(), iIORaster));
|
||||
for (const FileFormat& ff : iIORaster->importFormats()){
|
||||
for (QString currentExtension : ff.extensions) {
|
||||
inputRasterFormatToPluginMap.remove(currentExtension.toLower());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PluginManager::unloadDecoratePlugin(DecoratePluginInterface* iDecorate)
|
||||
{
|
||||
decoratePlugins.erase(std::find(decoratePlugins.begin(), decoratePlugins.end(), iDecorate));
|
||||
}
|
||||
|
||||
void PluginManager::unloadRenderPlugin(RenderPluginInterface* iRender)
|
||||
{
|
||||
renderPlugins.erase(std::find(renderPlugins.begin(), renderPlugins.end(), iRender));
|
||||
}
|
||||
|
||||
void PluginManager::unloadEditPlugin(EditPluginInterfaceFactory* iEditFactory)
|
||||
{
|
||||
editPlugins.erase(std::find(editPlugins.begin(), editPlugins.end(), iEditFactory));
|
||||
}
|
||||
|
||||
template<typename RangeIterator>
|
||||
QStringList PluginManager::inputFormatListDialog(RangeIterator iterator)
|
||||
{
|
||||
|
||||
@ -59,9 +59,10 @@ public:
|
||||
void loadPlugins();
|
||||
void loadPlugins(QDir pluginsDirectory);
|
||||
void loadPlugin(const QString& filename);
|
||||
void unloadPlugin(PluginFileInterface* ifp);
|
||||
|
||||
void enablePlugin(PluginFileInterface* fpi);
|
||||
void disablePlugin(PluginFileInterface* fpi);
|
||||
void enablePlugin(PluginFileInterface* ifp);
|
||||
void disablePlugin(PluginFileInterface* ifp);
|
||||
|
||||
QString pluginsCode() const;
|
||||
|
||||
@ -131,6 +132,13 @@ private:
|
||||
void loadRenderPlugin(RenderPluginInterface* iRender);
|
||||
void loadEditPlugin(EditPluginInterfaceFactory* iEditFactory);
|
||||
|
||||
void unloadFilterPlugin(FilterPluginInterface* iFilter);
|
||||
void unloadIOMeshPlugin(IOMeshPluginInterface* iIOMesh);
|
||||
void unloadIORasterPlugin(IORasterPluginInterface* iIORaster);
|
||||
void unloadDecoratePlugin(DecoratePluginInterface* iDecorate);
|
||||
void unloadRenderPlugin(RenderPluginInterface* iRender);
|
||||
void unloadEditPlugin(EditPluginInterfaceFactory* iEditFactory);
|
||||
|
||||
template <typename RangeIterator>
|
||||
static QStringList inputFormatListDialog(RangeIterator iterator);
|
||||
|
||||
|
||||
@ -89,8 +89,12 @@ void PluginInfoDialog::uninstallPluginPushButtonClicked()
|
||||
int nPlug = pb->property("np").toInt();
|
||||
PluginManager& pm = meshlab::pluginManagerInstance();
|
||||
PluginFileInterface* fpi = pm[nPlug];
|
||||
/** TODO **/
|
||||
std::cerr << fpi->pluginName().toStdString() << " deleted!\n";
|
||||
QFileInfo fdel = fpi->pluginFileInfo();
|
||||
pm.unloadPlugin(fpi);
|
||||
QFile::remove(fdel.absoluteFilePath());
|
||||
ui->treeWidget->clear();
|
||||
populateTreeWidget();
|
||||
ui->treeWidget->update();
|
||||
}
|
||||
|
||||
void PluginInfoDialog::on_loadPluginsPushButton_clicked()
|
||||
@ -117,8 +121,6 @@ void PluginInfoDialog::on_loadPluginsPushButton_clicked()
|
||||
QString newFileName = appDir.absolutePath() + "/" +finfo.fileName();
|
||||
QFile::copy(fileName, newFileName);
|
||||
|
||||
std::cerr << "PATH: " << newFileName.toStdString() << "\n";
|
||||
|
||||
pm.loadPlugin(newFileName);
|
||||
loadOk = true;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user