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"