Mercurial > hg > svgui
diff widgets/PluginReviewDialog.cpp @ 1292:41824255ddf2 plugin-path-config
Plugin review dialog
author | Chris Cannam |
---|---|
date | Fri, 25 May 2018 13:39:08 +0100 |
parents | |
children | 6dd15b5c14f9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/widgets/PluginReviewDialog.cpp Fri May 25 13:39:08 2018 +0100 @@ -0,0 +1,140 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Sonic Visualiser + An audio file viewer and annotation editor. + Centre for Digital Music, Queen Mary, University of London. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#include "PluginReviewDialog.h" + +#include <QGridLayout> +#include <QTableWidget> +#include <QDialogButtonBox> +#include <QFileInfo> +#include <QHeaderView> +#include <QDesktopWidget> +#include <QApplication> + +#include "plugin/FeatureExtractionPluginFactory.h" +#include "plugin/RealTimePluginFactory.h" + +PluginReviewDialog::PluginReviewDialog(QWidget *parent) : + QDialog(parent) +{ + setWindowTitle(tr("Plugins Loaded")); + + QGridLayout *layout = new QGridLayout; + setLayout(layout); + + m_table = new QTableWidget; + layout->addWidget(m_table, 0, 1); + + QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Ok); + layout->addWidget(bb, 1, 1); + connect(bb, SIGNAL(accepted()), this, SLOT(accept())); +} + +PluginReviewDialog::~PluginReviewDialog() +{ +} + +void +PluginReviewDialog::populate() +{ + FeatureExtractionPluginFactory *feFactory = + FeatureExtractionPluginFactory::instance(); + QString err; + std::vector<QString> feIds = feFactory->getPluginIdentifiers(err); + + RealTimePluginFactory *dssiFactory = + RealTimePluginFactory::instance("dssi"); + std::vector<QString> dssiIds = dssiFactory->getPluginIdentifiers(); + + RealTimePluginFactory *ladspaFactory = + RealTimePluginFactory::instance("ladspa"); + std::vector<QString> ladspaIds = ladspaFactory->getPluginIdentifiers(); + + m_table->setRowCount(int(feIds.size() + dssiIds.size() + ladspaIds.size())); + m_table->setColumnCount(5); + + QStringList headers; + int typeCol = 0, libCol = 1, nameCol = 2, idCol = 3, dirCol = 4; + headers << tr("Type") << tr("Library") << tr("Name") + << tr("Identifier") << tr("Location"); + m_table->setHorizontalHeaderLabels(headers); + + int row = 0; + + for (QString id: feIds) { + auto staticData = feFactory->getPluginStaticData(id); + m_table->setItem(row, typeCol, new QTableWidgetItem + (tr("Vamp"))); + m_table->setItem(row, idCol, new QTableWidgetItem + (QString::fromStdString(staticData.basic.identifier))); + m_table->setItem(row, nameCol, new QTableWidgetItem + (QString::fromStdString(staticData.basic.name))); + QString path = feFactory->getPluginLibraryPath(id); + m_table->setItem(row, libCol, new QTableWidgetItem + (QFileInfo(path).fileName())); + m_table->setItem(row, dirCol, new QTableWidgetItem + (QFileInfo(path).path())); + row++; + } + + for (QString id: dssiIds) { + auto descriptor = dssiFactory->getPluginDescriptor(id); + if (!descriptor) continue; + m_table->setItem(row, typeCol, new QTableWidgetItem + (tr("DSSI"))); + m_table->setItem(row, idCol, new QTableWidgetItem + (QString::fromStdString(descriptor->label))); + m_table->setItem(row, nameCol, new QTableWidgetItem + (QString::fromStdString(descriptor->name))); + QString path = dssiFactory->getPluginLibraryPath(id); + m_table->setItem(row, libCol, new QTableWidgetItem + (QFileInfo(path).fileName())); + m_table->setItem(row, dirCol, new QTableWidgetItem + (QFileInfo(path).path())); + row++; + } + + for (QString id: ladspaIds) { + auto descriptor = ladspaFactory->getPluginDescriptor(id); + if (!descriptor) continue; + m_table->setItem(row, typeCol, new QTableWidgetItem + (tr("LADSPA"))); + m_table->setItem(row, idCol, new QTableWidgetItem + (QString::fromStdString(descriptor->label))); + m_table->setItem(row, nameCol, new QTableWidgetItem + (QString::fromStdString(descriptor->name))); + QString path = ladspaFactory->getPluginLibraryPath(id); + m_table->setItem(row, libCol, new QTableWidgetItem + (QFileInfo(path).fileName())); + m_table->setItem(row, dirCol, new QTableWidgetItem + (QFileInfo(path).path())); + row++; + } + + m_table->setSortingEnabled(true); + m_table->setSelectionMode(QAbstractItemView::NoSelection); + m_table->resizeColumnsToContents(); + + int twidth = m_table->horizontalHeader()->length(); + int theight = m_table->verticalHeader()->length(); + + QDesktopWidget *desktop = QApplication::desktop(); + QRect available = desktop->availableGeometry(); + + int width = std::min(twidth + 30, (available.width() * 3) / 4); + int height = std::min(theight + 30, (available.height() * 3) / 4); + + resize(width, height); +} +