/**************************************************************************** ** ** Copyright (C) 2005-2006 Trolltech ASA. All rights reserved. ** ** This file is part of the example classes of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sales@trolltech.com. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #include #include "interfaces.h" #include "plugindialog.h" PluginDialog::PluginDialog(const QString &path, const QStringList &fileNames, QWidget *parent) : QDialog(parent) { label = new QLabel; treeWidget = new QTreeWidget; treeWidget->setAlternatingRowColors(false); treeWidget->setSelectionMode(QAbstractItemView::NoSelection); treeWidget->setColumnCount(1); treeWidget->header()->hide(); okButton = new QPushButton(tr("OK")); okButton->setDefault(true); connect(okButton, SIGNAL(clicked()), this, SLOT(close())); QGridLayout *mainLayout = new QGridLayout; mainLayout->setColumnStretch(0, 1); mainLayout->setColumnStretch(2, 1); mainLayout->addWidget(label, 0, 0, 1, 3); mainLayout->addWidget(treeWidget, 1, 0, 1, 3); mainLayout->addWidget(okButton, 2, 1); setLayout(mainLayout); interfaceIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirOpenIcon), QIcon::Normal, QIcon::On); interfaceIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirClosedIcon), QIcon::Normal, QIcon::Off); featureIcon.addPixmap(style()->standardPixmap(QStyle::SP_FileIcon)); setWindowTitle(tr("Plugin Information")); findPlugins(path, fileNames); } void PluginDialog::findPlugins(const QString &path, const QStringList &fileNames) { label->setText(tr("ProjDesigner found the following plugins\n" "(looked in %1):") .arg(QDir::toNativeSeparators(path))); QDir dir(path); foreach (QObject *plugin, QPluginLoader::staticInstances()) populateTreeWidget(plugin, tr("%1 (Static Plugin)") .arg(plugin->metaObject()->className())); foreach (QString fileName, fileNames) { QPluginLoader loader(dir.absoluteFilePath(fileName)); QObject *plugin = loader.instance(); if (plugin) populateTreeWidget(plugin, fileName); } } void PluginDialog::populateTreeWidget(QObject *plugin, const QString &text) { QTreeWidgetItem *pluginItem = new QTreeWidgetItem(treeWidget); pluginItem->setText(0, text); treeWidget->setItemExpanded(pluginItem, true); QFont boldFont = pluginItem->font(0); boldFont.setBold(true); pluginItem->setFont(0, boldFont); if (plugin) { ProjectorInterface *projector_plugin = qobject_cast(plugin); if (projector_plugin) addItems(pluginItem, "ProjectorInterface", projector_plugin->projectors()); SceneInterface *scene_plugin = qobject_cast(plugin); if (scene_plugin) addItems(pluginItem, "SceneInterface", scene_plugin->scenes()); } } void PluginDialog::addItems(QTreeWidgetItem *pluginItem, const char *interfaceName, const QStringList &features) { QTreeWidgetItem *interfaceItem = new QTreeWidgetItem(pluginItem); interfaceItem->setText(0, interfaceName); interfaceItem->setIcon(0, interfaceIcon); foreach (QString feature, features) { if (feature.endsWith("...")) feature.chop(3); QTreeWidgetItem *featureItem = new QTreeWidgetItem(interfaceItem); featureItem->setText(0, feature); featureItem->setIcon(0, featureIcon); } }