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

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 "mintro/mesonoptions.h"
0010 
0011 #include <QWidget>
0012 
0013 namespace Ui
0014 {
0015 class MesonOptionBaseView;
0016 }
0017 
0018 class QCheckBox;
0019 class QComboBox;
0020 class QLineEdit;
0021 class QPushButton;
0022 class QSpinBox;
0023 
0024 class MesonOptionBaseView : public QWidget
0025 {
0026     Q_OBJECT
0027 
0028 public:
0029     explicit MesonOptionBaseView(MesonOptionPtr option, QWidget* parent);
0030     virtual ~MesonOptionBaseView();
0031 
0032     int nameWidth();
0033     void setMinNameWidth(int width);
0034 
0035     virtual MesonOptionBase* option() = 0;
0036     virtual void updateInput() = 0;
0037 
0038     void setInputWidget(QWidget* input);
0039 
0040     static std::shared_ptr<MesonOptionBaseView> fromOption(MesonOptionPtr option, QWidget* parent);
0041 
0042 protected:
0043     void setChanged(bool changed);
0044 
0045 public Q_SLOTS:
0046     void reset();
0047 
0048 Q_SIGNALS:
0049     void configChanged();
0050 
0051 private:
0052     Ui::MesonOptionBaseView* m_ui = nullptr;
0053 };
0054 
0055 class MesonOptionArrayView : public MesonOptionBaseView
0056 {
0057     Q_OBJECT
0058 
0059 public:
0060     MesonOptionArrayView(MesonOptionPtr option, QWidget* parent);
0061 
0062     MesonOptionBase* option() override;
0063     void updateInput() override;
0064 
0065 private:
0066     std::shared_ptr<MesonOptionArray> m_option;
0067     QPushButton* m_input = nullptr;
0068 };
0069 
0070 class MesonOptionBoolView : public MesonOptionBaseView
0071 {
0072     Q_OBJECT
0073 
0074 public:
0075     MesonOptionBoolView(MesonOptionPtr option, QWidget* parent);
0076 
0077     MesonOptionBase* option() override;
0078     void updateInput() override;
0079 
0080 public Q_SLOTS:
0081     void updated();
0082 
0083 private:
0084     std::shared_ptr<MesonOptionBool> m_option;
0085     QCheckBox* m_input = nullptr;
0086 };
0087 
0088 class MesonOptionComboView : public MesonOptionBaseView
0089 {
0090     Q_OBJECT
0091 
0092 public:
0093     MesonOptionComboView(MesonOptionPtr option, QWidget* parent);
0094 
0095     MesonOptionBase* option() override;
0096     void updateInput() override;
0097 
0098 public Q_SLOTS:
0099     void updated();
0100 
0101 private:
0102     std::shared_ptr<MesonOptionCombo> m_option;
0103     QComboBox* m_input = nullptr;
0104 };
0105 
0106 class MesonOptionIntegerView : public MesonOptionBaseView
0107 {
0108     Q_OBJECT
0109 
0110 public:
0111     MesonOptionIntegerView(MesonOptionPtr option, QWidget* parent);
0112 
0113     MesonOptionBase* option() override;
0114     void updateInput() override;
0115 
0116 public Q_SLOTS:
0117     void updated();
0118 
0119 private:
0120     std::shared_ptr<MesonOptionInteger> m_option;
0121     QSpinBox* m_input = nullptr;
0122 };
0123 
0124 class MesonOptionStringView : public MesonOptionBaseView
0125 {
0126     Q_OBJECT
0127 
0128 public:
0129     MesonOptionStringView(MesonOptionPtr option, QWidget* parent);
0130 
0131     MesonOptionBase* option() override;
0132     void updateInput() override;
0133 
0134 public Q_SLOTS:
0135     void updated();
0136 
0137 private:
0138     std::shared_ptr<MesonOptionString> m_option;
0139     QLineEdit* m_input = nullptr;
0140 };