/** ****************************************************************************** * * @file plugindialog.cpp * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. * Parts by Nokia Corporation (qt-info@nokia.com) Copyright (C) 2009. * @brief * @see The GNU Public License (GPL) Version 3 * @defgroup coreplugin * @{ * *****************************************************************************/ /* * 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "plugindialog.h" #include #include #include #include #include #include #include #include #include #include #include using namespace Core::Internal; PluginDialog::PluginDialog(QWidget *parent) : QDialog(parent), m_view(new ExtensionSystem::PluginView(ExtensionSystem::PluginManager::instance(), this)) { QVBoxLayout *vl = new QVBoxLayout(this); vl->addWidget(m_view); m_detailsButton = new QPushButton(tr("Details"), this); m_errorDetailsButton = new QPushButton(tr("Error Details"), this); m_closeButton = new QPushButton(tr("Close"), this); m_detailsButton->setEnabled(false); m_errorDetailsButton->setEnabled(false); m_closeButton->setEnabled(true); m_closeButton->setDefault(true); QHBoxLayout *hl = new QHBoxLayout; hl->addWidget(m_detailsButton); hl->addWidget(m_errorDetailsButton); hl->addStretch(5); hl->addWidget(m_closeButton); vl->addLayout(hl); resize(650, 400); setWindowTitle(tr("Installed Plugins")); connect(m_view, SIGNAL(currentPluginChanged(ExtensionSystem::PluginSpec*)), this, SLOT(updateButtons())); connect(m_view, SIGNAL(pluginActivated(ExtensionSystem::PluginSpec*)), this, SLOT(openDetails(ExtensionSystem::PluginSpec*))); connect(m_detailsButton, SIGNAL(clicked()), this, SLOT(openDetails())); connect(m_errorDetailsButton, SIGNAL(clicked()), this, SLOT(openErrorDetails())); connect(m_closeButton, SIGNAL(clicked()), this, SLOT(accept())); updateButtons(); } void PluginDialog::updateButtons() { ExtensionSystem::PluginSpec *selectedSpec = m_view->currentPlugin(); if (selectedSpec) { m_detailsButton->setEnabled(true); m_errorDetailsButton->setEnabled(selectedSpec->hasError()); } else { m_detailsButton->setEnabled(false); m_errorDetailsButton->setEnabled(false); } } void PluginDialog::openDetails() { openDetails(m_view->currentPlugin()); } void PluginDialog::openDetails(ExtensionSystem::PluginSpec *spec) { if (!spec) return; QDialog dialog(this); dialog.setWindowTitle(tr("Plugin Details of %1").arg(spec->name())); QVBoxLayout *layout = new QVBoxLayout; dialog.setLayout(layout); ExtensionSystem::PluginDetailsView *details = new ExtensionSystem::PluginDetailsView(&dialog); layout->addWidget(details); details->update(spec); QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Close, Qt::Horizontal, &dialog); layout->addWidget(buttons); connect(buttons, SIGNAL(accepted()), &dialog, SLOT(accept())); connect(buttons, SIGNAL(rejected()), &dialog, SLOT(reject())); dialog.resize(400, 500); dialog.exec(); } void PluginDialog::openErrorDetails() { ExtensionSystem::PluginSpec *spec = m_view->currentPlugin(); if (!spec) return; QDialog dialog(this); dialog.setWindowTitle(tr("Plugin Errors of %1").arg(spec->name())); QVBoxLayout *layout = new QVBoxLayout; dialog.setLayout(layout); ExtensionSystem::PluginErrorView *errors = new ExtensionSystem::PluginErrorView(&dialog); layout->addWidget(errors); errors->update(spec); QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Close, Qt::Horizontal, &dialog); layout->addWidget(buttons); connect(buttons, SIGNAL(accepted()), &dialog, SLOT(accept())); connect(buttons, SIGNAL(rejected()), &dialog, SLOT(reject())); dialog.resize(500, 300); dialog.exec(); }