File indexing completed on 2024-05-19 15:46:04

0001 /*
0002     SPDX-FileCopyrightText: 2019 Daniel Mensinger <daniel@mensinger-ka.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <QAbstractButton>
0010 #include <QVector>
0011 #include <interfaces/configpage.h>
0012 
0013 #include "mesonrewriterinput.h"
0014 #include "mintro/mesonoptions.h"
0015 
0016 namespace KDevelop
0017 {
0018 class IPlugin;
0019 class IProject;
0020 }
0021 
0022 namespace Ui
0023 {
0024 class MesonRewriterPage;
0025 }
0026 
0027 class MesonRewriterPage : public KDevelop::ConfigPage
0028 {
0029     Q_OBJECT
0030 public:
0031     enum State { START, LOADING, WRITING, READY, ERROR };
0032 
0033 public:
0034     explicit MesonRewriterPage(KDevelop::IPlugin* plugin, KDevelop::IProject* project, QWidget* parent = nullptr);
0035 
0036     QString name() const override;
0037     QString fullName() const override;
0038     QIcon icon() const override;
0039 
0040 public Q_SLOTS:
0041     void apply() override;
0042     void defaults() override;
0043     void reset() override;
0044 
0045     void emitChanged();
0046     void recalculateLengths();
0047     void newOption();
0048 
0049 private:
0050     void setWidgetsDisabled(bool disabled);
0051     void checkStatus();
0052     void setStatus(State s);
0053 
0054     QVector<MesonRewriterInputBase*> constructPojectInputs();
0055     MesonOptContainerPtr constructDefaultOpt(const QString& name, const QString& value);
0056 
0057 private:
0058     KDevelop::IProject* m_project = nullptr;
0059     Ui::MesonRewriterPage* m_ui = nullptr;
0060     bool m_configChanged = false;
0061     State m_state = START;
0062     MesonOptsPtr m_opts = nullptr;
0063 
0064     QVector<MesonRewriterInputBase*> m_projectKwargs;
0065     QVector<MesonOptContainerPtr> m_defaultOpts;
0066 
0067     QStringList m_initialDefaultOpts;
0068 };