File indexing completed on 2024-05-05 16:46:16

0001 /*
0002     SPDX-FileCopyrightText: 2011 Martin Heide <martin.heide@gmx.net>
0003     SPDX-FileCopyrightText: 2011 Julien Desgats <julien.desgats@gmail.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "qmakebuilddirchooserdialog.h"
0009 
0010 #include <debug.h>
0011 #include "qmakebuilddirchooser.h"
0012 #include "qmakeconfig.h"
0013 
0014 #include <QDialogButtonBox>
0015 #include <KLocalizedString>
0016 
0017 #include <interfaces/iproject.h>
0018 
0019 QMakeBuildDirChooserDialog::QMakeBuildDirChooserDialog(KDevelop::IProject* project, QWidget* parent)
0020     : QDialog(parent)
0021 {
0022     setWindowTitle(i18nc("@title:window", "Configure a Build Directory"));
0023 
0024     auto mainWidget = new QWidget(this);
0025     auto mainLayout = new QVBoxLayout;
0026     setLayout(mainLayout);
0027     mainLayout->addWidget(mainWidget);
0028 
0029     m_chooserUi = new QMakeBuildDirChooser(project);
0030     connect(m_chooserUi, &QMakeBuildDirChooser::changed, this, &QMakeBuildDirChooserDialog::validate);
0031     mainLayout->addWidget(m_chooserUi);
0032 
0033     m_buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
0034     m_buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
0035     connect(m_buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
0036     connect(m_buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
0037     mainLayout->addWidget(m_buttonBox);
0038 
0039     loadConfig();
0040     // save; like this, we can be sure to have a qmake executable and build path set
0041     //(even if user clicks Cancel)
0042     saveConfig();
0043 
0044     validate();
0045 }
0046 
0047 QMakeBuildDirChooserDialog::~QMakeBuildDirChooserDialog()
0048 {
0049 }
0050 
0051 void QMakeBuildDirChooserDialog::loadConfig()
0052 {
0053     m_chooserUi->loadConfig();
0054 }
0055 
0056 void QMakeBuildDirChooserDialog::saveConfig()
0057 {
0058     // store this builds config
0059     m_chooserUi->saveConfig();
0060 
0061     // also save as current values
0062     KConfigGroup config(m_chooserUi->project()->projectConfiguration(), QMakeConfig::CONFIG_GROUP);
0063     m_chooserUi->saveConfig(config);
0064     config.writeEntry(QMakeConfig::BUILD_FOLDER, buildDir());
0065 }
0066 
0067 QString QMakeBuildDirChooserDialog::buildDir() const
0068 {
0069     return m_chooserUi->buildDir();
0070 }
0071 
0072 void QMakeBuildDirChooserDialog::accept()
0073 {
0074     if (m_chooserUi->validate()) {
0075         QDialog::accept();
0076         saveConfig();
0077     }
0078 }
0079 
0080 void QMakeBuildDirChooserDialog::validate()
0081 {
0082     m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(m_chooserUi->validate());
0083 }
0084 
0085 #include "moc_qmakebuilddirchooserdialog.cpp"