/****************************************************************************+ −
**+ −
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).+ −
** All rights reserved.+ −
** Contact: Nokia Corporation (qt-info@nokia.com)+ −
**+ −
** This file is part of the examples of the Qt Toolkit.+ −
**+ −
** $QT_BEGIN_LICENSE:LGPL$+ −
** No Commercial Usage+ −
** This file contains pre-release code and may not be distributed.+ −
** You may use this file in accordance with the terms and conditions+ −
** contained in the Technology Preview License Agreement accompanying+ −
** this package.+ −
**+ −
** GNU Lesser General Public License Usage+ −
** Alternatively, this file may be used under the terms of the GNU Lesser+ −
** General Public License version 2.1 as published by the Free Software+ −
** Foundation and appearing in the file LICENSE.LGPL included in the+ −
** packaging of this file. Please review the following information to+ −
** ensure the GNU Lesser General Public License version 2.1 requirements+ −
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.+ −
**+ −
** In addition, as a special exception, Nokia gives you certain additional+ −
** rights. These rights are described in the Nokia Qt LGPL Exception+ −
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.+ −
**+ −
** If you have questions regarding the use of this file, please contact+ −
** Nokia at qt-info@nokia.com.+ −
**+ −
**+ −
**+ −
**+ −
**+ −
**+ −
**+ −
**+ −
** $QT_END_LICENSE$+ −
**+ −
****************************************************************************/+ −
+ −
+ −
#include "interfaces.h"+ −
#include "plugindialog.h"+ −
+ −
#include <QPluginLoader>+ −
#include <QStringList>+ −
#include <QDir>+ −
+ −
#include <QLabel>+ −
#include <QGridLayout>+ −
#include <QPushButton>+ −
#include <QTreeWidget>+ −
#include <QTreeWidgetItem>+ −
#include <QHeaderView>+ −
+ −
PluginDialog::PluginDialog(const QString &path, const QStringList &fileNames,+ −
QWidget *parent) :+ −
QDialog(parent),+ −
label(new QLabel),+ −
treeWidget(new QTreeWidget),+ −
okButton(new QPushButton(tr("OK"))) + −
{+ −
treeWidget->setAlternatingRowColors(false);+ −
treeWidget->setSelectionMode(QAbstractItemView::NoSelection);+ −
treeWidget->setColumnCount(1);+ −
treeWidget->header()->hide();+ −
+ −
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);+ −
}+ −
+ −
//! [0]+ −
void PluginDialog::findPlugins(const QString &path,+ −
const QStringList &fileNames)+ −
{+ −
label->setText(tr("Plug & Paint found the following plugins\n"+ −
"(looked in %1):")+ −
.arg(QDir::toNativeSeparators(path)));+ −
+ −
const 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);+ −
}+ −
}+ −
//! [0]+ −
+ −
//! [1]+ −
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) {+ −
BrushInterface *iBrush = qobject_cast<BrushInterface *>(plugin);+ −
if (iBrush)+ −
addItems(pluginItem, "BrushInterface", iBrush->brushes());+ −
+ −
ShapeInterface *iShape = qobject_cast<ShapeInterface *>(plugin);+ −
if (iShape)+ −
addItems(pluginItem, "ShapeInterface", iShape->shapes());+ −
+ −
FilterInterface *iFilter =+ −
qobject_cast<FilterInterface *>(plugin);+ −
if (iFilter)+ −
addItems(pluginItem, "FilterInterface", iFilter->filters());+ −
}+ −
}+ −
//! [1]+ −
+ −
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);+ −
}+ −
}+ −