mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-31 21:15:33 +08:00
100 lines
3.4 KiB
C++
100 lines
3.4 KiB
C++
/* Copyright (C) 2015
|
|
* swift project Community / Contributors
|
|
*
|
|
* This file is part of swift Project. It is subject to the license terms in the LICENSE file found in the top-level
|
|
* directory of this distribution. No part of swift project, including this file, may be copied, modified, propagated,
|
|
* or distributed except according to the terms contained in the LICENSE file.
|
|
*/
|
|
|
|
#include "blackgui/pluginselector.h"
|
|
#include "blackmisc/verify.h"
|
|
|
|
#include <QCheckBox>
|
|
#include <QHBoxLayout>
|
|
#include <QLayout>
|
|
#include <QPushButton>
|
|
#include <QVBoxLayout>
|
|
#include <QVariant>
|
|
#include <Qt>
|
|
#include <QtGlobal>
|
|
|
|
namespace BlackGui
|
|
{
|
|
CPluginSelector::CPluginSelector(QWidget *parent) : QWidget(parent)
|
|
{
|
|
setObjectName("CPluginSelector");
|
|
|
|
QVBoxLayout *layout = new QVBoxLayout;
|
|
setLayout(layout);
|
|
|
|
connect(m_detailsButtonMapper, qOverload<const QString &>(&QSignalMapper::mapped), this, &CPluginSelector::pluginDetailsRequested);
|
|
connect(m_configButtonMapper, qOverload<const QString &>(&QSignalMapper::mapped), this, &CPluginSelector::pluginConfigRequested);
|
|
}
|
|
|
|
void CPluginSelector::addPlugin(const QString &identifier, const QString &name, bool hasConfig, bool enabled)
|
|
{
|
|
// skip if identifier is missing, which should normally not happen
|
|
BLACK_VERIFY_X(!identifier.isEmpty(), Q_FUNC_INFO, "Missing identifier");
|
|
if (identifier.isEmpty()) { return; }
|
|
|
|
QWidget *pw = new QWidget;
|
|
QHBoxLayout *layout = new QHBoxLayout;
|
|
layout->setContentsMargins(0, 0, 0, 0);
|
|
pw->setLayout(layout);
|
|
|
|
QCheckBox *cb = new QCheckBox(name);
|
|
cb->setObjectName(identifier);
|
|
cb->setProperty("pluginIdentifier", identifier);
|
|
connect(cb, &QCheckBox::stateChanged, this, &CPluginSelector::handlePluginStateChange);
|
|
if (enabled)
|
|
{
|
|
cb->setCheckState(Qt::Checked);
|
|
}
|
|
else
|
|
{
|
|
cb->setCheckState(Qt::Unchecked);
|
|
}
|
|
|
|
pw->layout()->addWidget(cb);
|
|
|
|
if (hasConfig)
|
|
{
|
|
QPushButton *config = new QPushButton("...");
|
|
m_configButtonMapper->setMapping(config, identifier);
|
|
connect(config, &QPushButton::clicked, m_configButtonMapper, qOverload<>(&QSignalMapper::map));
|
|
pw->layout()->addWidget(config);
|
|
}
|
|
|
|
QPushButton *details = new QPushButton("?");
|
|
m_detailsButtonMapper->setMapping(details, identifier);
|
|
connect(details, &QPushButton::clicked, m_detailsButtonMapper, qOverload<>(&QSignalMapper::map));
|
|
pw->layout()->addWidget(details);
|
|
|
|
layout->setStretch(0, 1);
|
|
layout->setStretch(1, 0);
|
|
layout->setStretch(2, 0);
|
|
|
|
this->layout()->addWidget(pw);
|
|
}
|
|
|
|
void CPluginSelector::setEnabled(const QString &identifier, bool enabled)
|
|
{
|
|
QCheckBox *cb = findChild<QCheckBox *>(identifier);
|
|
Q_ASSERT(cb);
|
|
cb->setChecked(enabled);
|
|
}
|
|
|
|
void CPluginSelector::handlePluginStateChange()
|
|
{
|
|
QCheckBox *cb = qobject_cast<QCheckBox *>(sender());
|
|
Q_ASSERT(cb);
|
|
|
|
bool enabled = cb->checkState() != Qt::Unchecked;
|
|
Q_ASSERT(cb->property("pluginIdentifier").isValid());
|
|
const QString identifier = cb->property("pluginIdentifier").toString();
|
|
Q_ASSERT(!identifier.isEmpty());
|
|
|
|
emit this->pluginStateChanged(identifier, enabled);
|
|
}
|
|
} // ns
|