File indexing completed on 2024-04-28 04:37:17

0001 /*
0002     SPDX-FileCopyrightText: 2010 Milian Wolff <mail@milianw.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "environmentconfigurebutton.h"
0008 
0009 #include <util/environmentselectionwidget.h>
0010 #include "settings/environmentpreferences.h"
0011 
0012 #include <QApplication>
0013 #include <QDialog>
0014 #include <QDialogButtonBox>
0015 #include <QIcon>
0016 #include <QVBoxLayout>
0017 
0018 #include <util/scopeddialog.h>
0019 
0020 #include <KLocalizedString>
0021 
0022 namespace KDevelop {
0023 
0024 class EnvironmentConfigureButtonPrivate
0025 {
0026 public:
0027     explicit EnvironmentConfigureButtonPrivate(EnvironmentConfigureButton* _q)
0028         : q(_q), selectionWidget(nullptr)
0029     {
0030     }
0031 
0032     void showDialog()
0033     {
0034         ScopedDialog<QDialog> dlg(qApp->activeWindow());
0035         QString selected;
0036         if (selectionWidget) {
0037             selected = selectionWidget->effectiveProfileName();
0038         }
0039 
0040         auto prefs = new EnvironmentPreferences(selected, q);
0041 
0042         // TODO: This should be implicit when constructing EnvironmentPreferences
0043         prefs->initConfigManager();
0044 
0045         auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
0046                                      | QDialogButtonBox::Cancel);
0047         QObject::connect(buttonBox, &QDialogButtonBox::accepted, dlg.data(), &QDialog::accept);
0048         QObject::connect(buttonBox, &QDialogButtonBox::rejected, dlg.data(), &QDialog::reject);
0049         auto layout = new QVBoxLayout;
0050         layout->addWidget(prefs);
0051         layout->addWidget(buttonBox);
0052         dlg->setLayout(layout);
0053         dlg->setWindowTitle(prefs->fullName());
0054         dlg->setWindowIcon(prefs->icon());
0055         dlg->resize(800, 600);
0056         if (dlg->exec() == QDialog::Accepted) {
0057             prefs->apply();
0058             emit q->environmentConfigured();
0059         }
0060     }
0061 
0062     EnvironmentConfigureButton* const q;
0063     EnvironmentSelectionWidget *selectionWidget;
0064 };
0065 
0066 EnvironmentConfigureButton::EnvironmentConfigureButton(QWidget* parent)
0067     : QPushButton(parent),
0068       d_ptr(new EnvironmentConfigureButtonPrivate(this))
0069 {
0070     setText(QString());
0071     setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
0072     setIcon(QIcon::fromTheme(QStringLiteral("configure")));
0073     setToolTip(i18nc("@info:tooltip", "Configure environment variables"));
0074 
0075     connect(this, &EnvironmentConfigureButton::clicked,
0076             this, [this] { Q_D(EnvironmentConfigureButton); d->showDialog(); });
0077 }
0078 
0079 EnvironmentConfigureButton::~EnvironmentConfigureButton() = default;
0080 
0081 void EnvironmentConfigureButton::setSelectionWidget(EnvironmentSelectionWidget* widget)
0082 {
0083     Q_D(EnvironmentConfigureButton);
0084 
0085     connect(this, &EnvironmentConfigureButton::environmentConfigured,
0086             widget, &EnvironmentSelectionWidget::reconfigure);
0087     d->selectionWidget = widget;
0088 }
0089 
0090 
0091 }
0092 
0093 #include "moc_environmentconfigurebutton.cpp"