1 | /**************************************************************************** |
---|
2 | ** |
---|
3 | ** Copyright (C) 2005-2006 Trolltech ASA. All rights reserved. |
---|
4 | ** |
---|
5 | ** This file is part of the example classes of the Qt Toolkit. |
---|
6 | ** |
---|
7 | ** This file may be used under the terms of the GNU General Public |
---|
8 | ** License version 2.0 as published by the Free Software Foundation |
---|
9 | ** and appearing in the file LICENSE.GPL included in the packaging of |
---|
10 | ** this file. Please review the following information to ensure GNU |
---|
11 | ** General Public Licensing requirements will be met: |
---|
12 | ** http://www.trolltech.com/products/qt/opensource.html |
---|
13 | ** |
---|
14 | ** If you are unsure which license is appropriate for your use, please |
---|
15 | ** review the following information: |
---|
16 | ** http://www.trolltech.com/products/qt/licensing.html or contact the |
---|
17 | ** sales department at sales@trolltech.com. |
---|
18 | ** |
---|
19 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
---|
20 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
---|
21 | ** |
---|
22 | ****************************************************************************/ |
---|
23 | |
---|
24 | #include <QtGui> |
---|
25 | |
---|
26 | #include "interfaces.h" |
---|
27 | #include "plugindialog.h" |
---|
28 | |
---|
29 | PluginDialog::PluginDialog(const QString &path, const QStringList &fileNames, |
---|
30 | QWidget *parent) |
---|
31 | : QDialog(parent) |
---|
32 | { |
---|
33 | label = new QLabel; |
---|
34 | |
---|
35 | treeWidget = new QTreeWidget; |
---|
36 | treeWidget->setAlternatingRowColors(false); |
---|
37 | treeWidget->setSelectionMode(QAbstractItemView::NoSelection); |
---|
38 | treeWidget->setColumnCount(1); |
---|
39 | treeWidget->header()->hide(); |
---|
40 | |
---|
41 | okButton = new QPushButton(tr("OK")); |
---|
42 | okButton->setDefault(true); |
---|
43 | |
---|
44 | connect(okButton, SIGNAL(clicked()), this, SLOT(close())); |
---|
45 | |
---|
46 | QGridLayout *mainLayout = new QGridLayout; |
---|
47 | mainLayout->setColumnStretch(0, 1); |
---|
48 | mainLayout->setColumnStretch(2, 1); |
---|
49 | mainLayout->addWidget(label, 0, 0, 1, 3); |
---|
50 | mainLayout->addWidget(treeWidget, 1, 0, 1, 3); |
---|
51 | mainLayout->addWidget(okButton, 2, 1); |
---|
52 | setLayout(mainLayout); |
---|
53 | |
---|
54 | interfaceIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirOpenIcon), |
---|
55 | QIcon::Normal, QIcon::On); |
---|
56 | interfaceIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirClosedIcon), |
---|
57 | QIcon::Normal, QIcon::Off); |
---|
58 | featureIcon.addPixmap(style()->standardPixmap(QStyle::SP_FileIcon)); |
---|
59 | |
---|
60 | setWindowTitle(tr("Plugin Information")); |
---|
61 | findPlugins(path, fileNames); |
---|
62 | } |
---|
63 | |
---|
64 | void PluginDialog::findPlugins(const QString &path, |
---|
65 | const QStringList &fileNames) |
---|
66 | { |
---|
67 | label->setText(tr("ProjDesigner found the following plugins\n" |
---|
68 | "(looked in %1):") |
---|
69 | .arg(QDir::toNativeSeparators(path))); |
---|
70 | |
---|
71 | QDir dir(path); |
---|
72 | |
---|
73 | foreach (QObject *plugin, QPluginLoader::staticInstances()) |
---|
74 | populateTreeWidget(plugin, tr("%1 (Static Plugin)") |
---|
75 | .arg(plugin->metaObject()->className())); |
---|
76 | |
---|
77 | foreach (QString fileName, fileNames) { |
---|
78 | QPluginLoader loader(dir.absoluteFilePath(fileName)); |
---|
79 | QObject *plugin = loader.instance(); |
---|
80 | if (plugin) |
---|
81 | populateTreeWidget(plugin, fileName); |
---|
82 | } |
---|
83 | } |
---|
84 | |
---|
85 | void PluginDialog::populateTreeWidget(QObject *plugin, const QString &text) |
---|
86 | { |
---|
87 | QTreeWidgetItem *pluginItem = new QTreeWidgetItem(treeWidget); |
---|
88 | pluginItem->setText(0, text); |
---|
89 | treeWidget->setItemExpanded(pluginItem, true); |
---|
90 | |
---|
91 | QFont boldFont = pluginItem->font(0); |
---|
92 | boldFont.setBold(true); |
---|
93 | pluginItem->setFont(0, boldFont); |
---|
94 | |
---|
95 | if (plugin) { |
---|
96 | ProjectorInterface *projector_plugin = |
---|
97 | qobject_cast<ProjectorInterface*>(plugin); |
---|
98 | if (projector_plugin) |
---|
99 | addItems(pluginItem, "ProjectorInterface", projector_plugin->projectors()); |
---|
100 | SceneInterface *scene_plugin = |
---|
101 | qobject_cast<SceneInterface*>(plugin); |
---|
102 | if (scene_plugin) |
---|
103 | addItems(pluginItem, "SceneInterface", scene_plugin->scenes()); |
---|
104 | } |
---|
105 | } |
---|
106 | |
---|
107 | void PluginDialog::addItems(QTreeWidgetItem *pluginItem, |
---|
108 | const char *interfaceName, |
---|
109 | const QStringList &features) |
---|
110 | { |
---|
111 | QTreeWidgetItem *interfaceItem = new QTreeWidgetItem(pluginItem); |
---|
112 | interfaceItem->setText(0, interfaceName); |
---|
113 | interfaceItem->setIcon(0, interfaceIcon); |
---|
114 | |
---|
115 | foreach (QString feature, features) { |
---|
116 | if (feature.endsWith("...")) |
---|
117 | feature.chop(3); |
---|
118 | QTreeWidgetItem *featureItem = new QTreeWidgetItem(interfaceItem); |
---|
119 | featureItem->setText(0, feature); |
---|
120 | featureItem->setIcon(0, featureIcon); |
---|
121 | } |
---|
122 | } |
---|