File indexing completed on 2024-05-12 04:40:09

0001 /*
0002     SPDX-FileCopyrightText: 2016 Aetf <aetf@unlimitedcodeworks.xyz>
0003 
0004     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006 
0007 #include "lldbconfigpage.h"
0008 #include "ui_lldbconfigpage.h"
0009 
0010 #include "dbgglobal.h"
0011 
0012 #include <util/environmentselectionwidget.h>
0013 
0014 #include <KConfigGroup>
0015 #include <KUrlRequester>
0016 
0017 #include <QComboBox>
0018 #include <QGroupBox>
0019 #include <QLineEdit>
0020 #include <QRegularExpression>
0021 #include <QRegularExpressionValidator>
0022 
0023 using namespace KDevelop;
0024 namespace Config = KDevMI::LLDB::Config;
0025 
0026 LldbConfigPage::LldbConfigPage(QWidget* parent)
0027     : LaunchConfigurationPage(parent)
0028     , ui(new Ui::LldbConfigPage)
0029 {
0030     ui->setupUi(this);
0031     ui->lineDebuggerExec->setMode(KFile::File|KFile::ExistingOnly|KFile::LocalOnly);
0032     ui->lineConfigScript->setMode(KFile::File|KFile::ExistingOnly|KFile::LocalOnly);
0033 
0034     QRegularExpression rx(QStringLiteral(R"([^:]+:\d+)"));
0035     ui->lineRemoteServer->setValidator(new QRegularExpressionValidator(rx, this));
0036 
0037     ui->comboStartWith->setItemData(0, QStringLiteral("ApplicationOutput"));
0038     ui->comboStartWith->setItemData(1, QStringLiteral("GdbConsole"));
0039     ui->comboStartWith->setItemData(2, QStringLiteral("FrameStack"));
0040 
0041     connect(ui->lineDebuggerExec, &KUrlRequester::textChanged, this, &LldbConfigPage::changed);
0042     connect(ui->lineDebuggerArgs, &QLineEdit::textChanged, this, &LldbConfigPage::changed);
0043     connect(ui->comboEnv, &EnvironmentSelectionWidget::currentProfileChanged,
0044             this, &LldbConfigPage::changed);
0045 
0046     connect(ui->lineConfigScript, &KUrlRequester::textChanged, this, &LldbConfigPage::changed);
0047     connect(ui->comboStartWith, QOverload<int>::of(&QComboBox::currentIndexChanged),
0048             this, &LldbConfigPage::changed);
0049 
0050     connect(ui->groupRemote, &QGroupBox::clicked, this, &LldbConfigPage::changed);
0051     connect(ui->lineRemoteServer, &QLineEdit::textChanged, this, &LldbConfigPage::changed);
0052     connect(ui->lineOnDevPath, &QLineEdit::textChanged, this, &LldbConfigPage::changed);
0053 }
0054 
0055 LldbConfigPage::~LldbConfigPage()
0056 {
0057     delete ui;
0058 }
0059 
0060 QIcon LldbConfigPage::icon() const
0061 {
0062     return {};
0063 }
0064 
0065 QString LldbConfigPage::title() const
0066 {
0067     return i18nc("@title:tab", "LLDB Configuration");
0068 }
0069 
0070 void LldbConfigPage::loadFromConfiguration(const KConfigGroup& cfg, KDevelop::IProject *)
0071 {
0072     bool block = blockSignals(true);
0073     ui->lineDebuggerExec->setUrl(cfg.readEntry(Config::LldbExecutableEntry, QUrl()));
0074     ui->lineDebuggerArgs->setText(cfg.readEntry(Config::LldbArgumentsEntry, QString()));
0075     ui->comboEnv->setCurrentProfile(cfg.readEntry(Config::LldbEnvironmentEntry, QString()));
0076     ui->checkInheritSystem->setChecked(cfg.readEntry(Config::LldbInheritSystemEnvEntry, true));
0077     ui->lineConfigScript->setUrl(cfg.readEntry(Config::LldbConfigScriptEntry, QUrl()));
0078     ui->checkBreakOnStart->setChecked(cfg.readEntry(KDevMI::Config::BreakOnStartEntry, false));
0079     ui->comboStartWith->setCurrentIndex(ui->comboStartWith->findData(
0080         cfg.readEntry(KDevMI::Config::StartWithEntry, "ApplicationOutput")));
0081     ui->groupRemote->setChecked(cfg.readEntry(Config::LldbRemoteDebuggingEntry, false));
0082     ui->lineRemoteServer->setText(cfg.readEntry(Config::LldbRemoteServerEntry, QString()));
0083     ui->lineOnDevPath->setText(cfg.readEntry(Config::LldbRemotePathEntry, QString()));
0084     blockSignals(block);
0085 }
0086 
0087 void LldbConfigPage::saveToConfiguration(KConfigGroup cfg, KDevelop::IProject *) const
0088 {
0089     cfg.writeEntry(Config::LldbExecutableEntry, ui->lineDebuggerExec->url());
0090     cfg.writeEntry(Config::LldbArgumentsEntry, ui->lineDebuggerArgs->text());
0091     cfg.writeEntry(Config::LldbEnvironmentEntry, ui->comboEnv->currentProfile());
0092     cfg.writeEntry(Config::LldbInheritSystemEnvEntry, ui->checkInheritSystem->isChecked());
0093     cfg.writeEntry(Config::LldbConfigScriptEntry, ui->lineConfigScript->url());
0094     cfg.writeEntry(KDevMI::Config::BreakOnStartEntry, ui->checkBreakOnStart->isChecked());
0095     cfg.writeEntry(KDevMI::Config::StartWithEntry, ui->comboStartWith->currentData().toString());
0096     cfg.writeEntry(Config::LldbRemoteDebuggingEntry, ui->groupRemote->isChecked());
0097     cfg.writeEntry(Config::LldbRemoteServerEntry, ui->lineRemoteServer->text());
0098     cfg.writeEntry(Config::LldbRemotePathEntry, ui->lineOnDevPath->text());
0099 }
0100 
0101 KDevelop::LaunchConfigurationPage * LldbConfigPageFactory::createWidget(QWidget* parent)
0102 {
0103     return new LldbConfigPage(parent);
0104 }
0105 
0106 #include "moc_lldbconfigpage.cpp"