swift
pluginselector.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2015 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
4 #include "gui/pluginselector.h"
5 
6 #include <QCheckBox>
7 #include <QHBoxLayout>
8 #include <QLayout>
9 #include <QPushButton>
10 #include <QVBoxLayout>
11 #include <QVariant>
12 #include <Qt>
13 #include <QtGlobal>
14 
15 #include "misc/icons.h"
16 #include "misc/verify.h"
17 
18 namespace swift::gui
19 {
20  CPluginSelector::CPluginSelector(QWidget *parent) : QWidget(parent)
21  {
22  setObjectName("CPluginSelector");
23 
24  QVBoxLayout *layout = new QVBoxLayout;
25  setLayout(layout);
26 
27  connect(m_configButtonMapper, &QSignalMapper::mappedString, this, &CPluginSelector::pluginConfigRequested);
28  }
29 
30  void CPluginSelector::addPlugin(const QString &identifier, const QString &name, bool hasConfig, bool enabled)
31  {
32  // skip if identifier is missing, which should normally not happen
33  SWIFT_VERIFY_X(!identifier.isEmpty(), Q_FUNC_INFO, "Missing identifier");
34  if (identifier.isEmpty()) { return; }
35 
36  QWidget *pw = new QWidget;
37  QHBoxLayout *layout = new QHBoxLayout;
38  layout->setContentsMargins(0, 0, 0, 0);
39  pw->setLayout(layout);
40 
41  QCheckBox *cb = new QCheckBox(name);
42  cb->setObjectName(identifier);
43  cb->setProperty("pluginIdentifier", identifier);
44  connect(cb, &QCheckBox::stateChanged, this, &CPluginSelector::handlePluginStateChange);
45  if (enabled) { cb->setCheckState(Qt::Checked); }
46  else { cb->setCheckState(Qt::Unchecked); }
47 
48  pw->layout()->addWidget(cb);
49 
50  if (hasConfig)
51  {
52  QPushButton *config = new QPushButton(swift::misc::CIcons::wrench16(), "");
53  config->setToolTip("Plugin configuration");
54  m_configButtonMapper->setMapping(config, identifier);
55  connect(config, &QPushButton::clicked, m_configButtonMapper, qOverload<>(&QSignalMapper::map));
56  pw->layout()->addWidget(config);
57  }
58 
59  layout->setStretch(0, 1);
60  layout->setStretch(1, 0);
61 
62  this->layout()->addWidget(pw);
63  }
64 
65  void CPluginSelector::setEnabled(const QString &identifier, bool enabled)
66  {
67  QCheckBox *cb = findChild<QCheckBox *>(identifier);
68  Q_ASSERT(cb);
69  cb->setChecked(enabled);
70  }
71 
72  void CPluginSelector::handlePluginStateChange()
73  {
74  QCheckBox *cb = qobject_cast<QCheckBox *>(sender());
75  Q_ASSERT(cb);
76 
77  bool enabled = cb->checkState() != Qt::Unchecked;
78  Q_ASSERT(cb->property("pluginIdentifier").isValid());
79  const QString identifier = cb->property("pluginIdentifier").toString();
80  Q_ASSERT(!identifier.isEmpty());
81 
82  emit this->pluginStateChanged(identifier, enabled);
83  }
84 } // namespace swift::gui
void addPlugin(const QString &identifier, const QString &name, bool hasConfig=false, bool enabled=true)
Adds the new plugin to the list.
void setEnabled(const QString &identifier, bool enabled)
Enables/disabled the given plugin.
void pluginStateChanged(const QString &identifier, bool enabled)
Emitted when user enables/disables the particular plugin.
CPluginSelector(QWidget *parent=nullptr)
Constructor.
void pluginConfigRequested(const QString &identifier)
Emitted when user clicks the "Settings" button.
static const QPixmap & wrench16()
Wrench.
GUI related classes.
#define SWIFT_VERIFY_X(COND, WHERE, WHAT)
A weaker kind of assert.
Definition: verify.h:26