/*! * * Copyright (c) 2021-2025 Diality Inc. - All Rights Reserved. * \copyright * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * \file VNetworkModel.h * \author (last) Behrouz NematiPour * \date (last) 08-Dec-2023 * \author (original) Behrouz NematiPour * \date (original) 11-May-2021 * */ #pragma once // Qt #include #include // Project #include "main.h" #include "VView.h" #include "MWifiNetwork.h" // forward declarations class tst_views; namespace View { /*! * \brief The VNetworkModel class * Interface between QML and the networks * \details Exposes networks to QML and provides an interface to connect and disconnect from those networks. * References: https://doc.qt.io/qt-5.12/qtquick-modelviewsdata-cppmodels.html * */ class VNetworkModel : public QAbstractListModel { Q_OBJECT int _interval = 1000; const char *_devEth = "eth0" ; // default for the device QString _devWlan = "wlan0"; // default for the device PROPERTY(bool , isIdle , true ) PROPERTY(bool , scanInProgress , false) PROPERTY(QString , status , "") PROPERTY(QString , ipAddress , "") PROPERTY(QString , gateway , "") PROPERTY(QString , subnetMask , "") PROPERTY(QString , dns , "") PROPERTY(QString , ssid , "") PROPERTY(QString , macAddress , "") PROPERTY(QString , ethernetIP , "") PROPERTY(QString , wirelessIP , "") public: // Note: VIEW_DEC_CLASS(VNetworkModel) requires QObject as the parent, so it's necessary to define it here // Otherwise a VIEW_DEC_CLASS macro could allow specifying the parent class with QObject as the default explicit VNetworkModel(QAbstractListModel *parent = nullptr); enum NetworkDataRole { MacAddressRole = Qt::UserRole + 1 , SSIDRole , SecurityTypesRole , StatusRole , SignalLevelRole , NetworkSupportedRole , }; void addNetwork (const WifiNetworkData &network); int rowCount (const QModelIndex &parent = QModelIndex() ) const override; QVariant data (const QModelIndex &index, int role = Qt::DisplayRole ) const override; void removeAllRows(); signals: void didScan(); void didJoinNetwork(const WifiNetworkData, const QString); void didDisconnectNetwork(const WifiNetworkData); void didRequestIPSettings(); // set IP addresses void didRequestSetIPAddress(const QString); void didRequestSetGateway(const QString); void didRequestSetSubnetMask(const QString); void didRequestSetDNS(const QString); public slots: void doInit(); void doScan(); bool doCheckIfConnected(const QString &vMacAddress); void doJoinNetwork(const QString &vMacAddress, const QString &vPassword); void doDisconnectNetwork(const QString &vMacAddress); void doRequestIPSettings(); // static IP address assignment void doSetIPAddress(const QString &vIPAddress); void doSetGateway(const QString &vGateway); void doSetSubnetMask(const QString &vSubnetMask); void doSetDNS(const QString &vDNS); protected: void timerEvent(QTimerEvent *event) override; QHash roleNames() const override; private: void initConnections(); void clearSelectedNetwork(); QString checkDevNet(const char *vDevNet, const QString &vMessage); void checkEthernet(); void checkWireless(); QList _networks; private slots: void onAddNetwork(const WifiNetworkData &vNetwork); void onScanStatusChanged(const bool &vScanning); void onStatusChanged(const QString &vNewStatus); void onConnectToNetwork(const WifiNetworkData &vNetwork); void onDisconnectNetwork(const WifiNetworkData &vNetwork); // static IP address assignment confirmation void onSetStaticIPAddressSuccess(); void onSetGatewaySuccess(); void onSetSubnetMaskSuccess(); void onSetDNSSuccess(); }; }