File indexing completed on 2024-12-01 13:40:32

0001 /*
0002     SPDX-FileCopyrightText: 2016-2018 Jan Grulich <jgrulich@redhat.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #ifndef PLASMA_NM_CREATABLE_CONNECTIONS_MODEL_H
0008 #define PLASMA_NM_CREATABLE_CONNECTIONS_MODEL_H
0009 
0010 #include <NetworkManagerQt/ConnectionSettings>
0011 #include <QAbstractListModel>
0012 
0013 class Q_DECL_EXPORT CreatableConnectionItem : public QObject
0014 {
0015     Q_OBJECT
0016 public:
0017     explicit CreatableConnectionItem(const QString &typeName,
0018                                      const QString &typeSection, // Visible properties
0019                                      const QString &description,
0020                                      const QString &icon, // Visible properties
0021                                      NetworkManager::ConnectionSettings::ConnectionType type, // Properties needed for creating
0022                                      const QString &vpnType = QString(), // Properties needed for creating
0023                                      const QString &specificType = QString(), // Properties needed for creating
0024                                      bool shared = false, // Properties needed for creating
0025                                      QObject *parent = nullptr);
0026     explicit CreatableConnectionItem(QObject *parent = nullptr);
0027     ~CreatableConnectionItem() override;
0028 
0029     NetworkManager::ConnectionSettings::ConnectionType connectionType() const;
0030     void setConnectionType(NetworkManager::ConnectionSettings::ConnectionType type);
0031 
0032     QString description() const;
0033     void setDescription(const QString &description);
0034 
0035     QString icon() const;
0036     void setIcon(const QString &icon);
0037 
0038     QString specificType() const;
0039     void setSpecificType(const QString &specificType);
0040 
0041     bool shared() const;
0042     void setShared(bool shared);
0043 
0044     QString typeName() const;
0045     void setTypeName(const QString &typeName);
0046 
0047     QString typeSection() const;
0048     void setTypeSection(const QString &typeSection);
0049 
0050     QString vpnType() const;
0051     void setVpnType(const QString &vpnType);
0052 
0053 private:
0054     bool m_shared;
0055     NetworkManager::ConnectionSettings::ConnectionType m_connectionType;
0056     QString m_description;
0057     QString m_icon;
0058     QString m_specificType;
0059     QString m_typeName;
0060     QString m_typeSection;
0061     QString m_vpnType;
0062 };
0063 
0064 class Q_DECL_EXPORT CreatableConnectionsModel : public QAbstractListModel
0065 {
0066     Q_OBJECT
0067 public:
0068     explicit CreatableConnectionsModel(QObject *parent = nullptr);
0069     ~CreatableConnectionsModel() override;
0070 
0071     enum ItemRole {
0072         ConnectionDescription = Qt::UserRole + 1,
0073         ConnectionIcon,
0074         ConnectionSpeficType,
0075         ConnectionShared,
0076         ConnectionType,
0077         ConnectionTypeName,
0078         ConnectionTypeSection,
0079         ConnectionVpnType,
0080     };
0081 
0082     int rowCount(const QModelIndex &parent) const override;
0083     QVariant data(const QModelIndex &index, int role) const override;
0084     QHash<int, QByteArray> roleNames() const override;
0085 
0086 private:
0087     void populateModel();
0088     QList<CreatableConnectionItem *> m_list;
0089 };
0090 
0091 #endif // PLASMA_NM_CREATABLE_CONNECTIONS_MODEL_H