diff options
-rw-r--r-- | src/imports/networksettings/plugin.cpp | 9 | ||||
-rw-r--r-- | src/networksettings/connman/qnetworksettingsmanager_p.cpp | 60 | ||||
-rw-r--r-- | src/networksettings/connman/qnetworksettingsmanager_p.h | 5 | ||||
-rw-r--r-- | src/networksettings/connman/qnetworksettingsservice_p.cpp | 1 | ||||
-rw-r--r-- | src/networksettings/qnetworksettings.h | 4 | ||||
-rw-r--r-- | src/networksettings/qnetworksettingsmanager.cpp | 6 | ||||
-rw-r--r-- | src/networksettings/qnetworksettingsmanager.h | 13 | ||||
-rw-r--r-- | src/networksettings/qnetworksettingsservicemodel.h | 2 |
8 files changed, 66 insertions, 34 deletions
diff --git a/src/imports/networksettings/plugin.cpp b/src/imports/networksettings/plugin.cpp index 245e952..c1dac53 100644 --- a/src/imports/networksettings/plugin.cpp +++ b/src/imports/networksettings/plugin.cpp @@ -31,6 +31,8 @@ #include <qnetworksettingsmanager.h> #include <qnetworksettingsservice.h> #include <qnetworksettingsuseragent.h> +#include <qnetworksettingsservicemodel.h> +#include <qnetworksettingsinterfacemodel.h> #include <qqml.h> #include <QQmlEngine> @@ -44,7 +46,7 @@ \brief Provides singleton QML types for controlling network settings. Provides singleton QML types for controlling network settings in an - embedded device. + embedded device.QAbstractItemModel Import the module as follows: @@ -106,7 +108,7 @@ */ /*! - \qmlmethod NetworkService NetworkSettingsManager::getService(string name, int type) + \qmlmethod NetworkService NetworkSettingsManager::service(string name, int type) Returns the service with name \a name and type \a type. @@ -161,5 +163,8 @@ void NetworksettingspluginPlugin::registerTypes(const char *uri) qmlRegisterUncreatableType<QNetworkSettingsState>(uri, 1, 0, "NetworkSettingsState", "Cannot be instantiated directly."); qRegisterMetaType<QNetworkSettingsUserAgent*>("QNetworkSettingsUserAgent*"); + qRegisterMetaType<QNetworkSettingsServiceFilter*>("QNetworkSettingsServiceFilter*"); + qRegisterMetaType<QNetworkSettingsInterfaceModel*>("QNetworkSettingsInterfaceModel*"); + qmlRegisterSingletonType<QNetworkSettingsManager>(uri, 1, 0, "NetworkSettingsManager", &instance<QNetworkSettingsManager>); } diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.cpp b/src/networksettings/connman/qnetworksettingsmanager_p.cpp index 6fecd86..22e8005 100644 --- a/src/networksettings/connman/qnetworksettingsmanager_p.cpp +++ b/src/networksettings/connman/qnetworksettingsmanager_p.cpp @@ -98,25 +98,7 @@ void QNetworkSettingsManagerPrivate::getServicesFinished(QDBusPendingCallWatcher foreach (const ConnmanMapStruct &object, reply.value()) { const QString servicePath = object.objectPath.path(); - QNetworkSettingsService *service = new QNetworkSettingsService(servicePath, this); - m_serviceModel->append(service); - - //Update status property - QString n = qdbus_cast<QString>(object.propertyMap[PropertyName]); - QString t = qdbus_cast<QString>(object.propertyMap[PropertyType]); - QString s = qdbus_cast<QString>(object.propertyMap[PropertyState]); - - QNetworkSettingsType type; - t >> type; - QNetworkSettingsState state; - s >> state; - - foreach (QNetworkSettingsInterface* item, m_interfaceModel.getModel()) { - ConnmanSettingsInterface* technology = qobject_cast<ConnmanSettingsInterface*>(item); - if (technology->name() == n && technology->type() == type.type()) { - technology->setState(state.state()); - } - } + handleNewService(servicePath); } emit q->servicesChanged(); } @@ -161,9 +143,26 @@ void QNetworkSettingsManagerPrivate::onServicesChanged(ConnmanMapStructList chan if (!found) newServices.append(map.objectPath.path()); } + foreach (QString newService, newServices) { - QNetworkSettingsService *service = new QNetworkSettingsService(newService, this); + handleNewService(newService); + } +} + +void QNetworkSettingsManagerPrivate::handleNewService(const QString &servicePath) +{ + Q_Q(QNetworkSettingsManager); + + QNetworkSettingsService *service = new QNetworkSettingsService(servicePath, this); + + if (service->name().length() > 0 && service->type() != QNetworkSettingsType::Unknown) { m_serviceModel->append(service); + emit q->servicesChanged(); + } + else { + //Service name or type not set, wait for update + connect(service, &QNetworkSettingsService::nameChanged, this, &QNetworkSettingsManagerPrivate::serviceReady); + connect(service, &QNetworkSettingsService::typeChanged, this, &QNetworkSettingsManagerPrivate::serviceReady); } } @@ -171,3 +170,24 @@ void QNetworkSettingsManagerPrivate::setUserAgent(QNetworkSettingsUserAgent *age { m_agent = agent; } + +void QNetworkSettingsManagerPrivate::serviceReady() +{ + Q_Q(QNetworkSettingsManager); + + QNetworkSettingsService* service = qobject_cast<QNetworkSettingsService*>(sender()); + if (service->name().length() > 0 && service->type() != QNetworkSettingsType::Unknown) { + service->disconnect(this); + m_serviceModel->append(service); + emit q->servicesChanged(); + + //Update the interface state accordingly + foreach (QNetworkSettingsInterface* item, m_interfaceModel.getModel()) { + ConnmanSettingsInterface* technology = qobject_cast<ConnmanSettingsInterface*>(item); + if (technology->name() == service->name() && technology->type() == service->type()) { + technology->setState(technology->state()); + } + } + + } +} diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.h b/src/networksettings/connman/qnetworksettingsmanager_p.h index 5eb5470..b6e23ab 100644 --- a/src/networksettings/connman/qnetworksettingsmanager_p.h +++ b/src/networksettings/connman/qnetworksettingsmanager_p.h @@ -38,6 +38,7 @@ class NetConnmanManagerInterface; class QNetworkSettingsServiceModel; class QNetworkSettingsServiceFilter; +class QNetworkSettingsService; class QNetworkSettingsManagerPrivate : public QObject { @@ -53,7 +54,9 @@ public slots: void getTechnologiesFinished(QDBusPendingCallWatcher *watcher); void requestInput(const QString& service, const QString& type); void onServicesChanged(ConnmanMapStructList changed, const QList<QDBusObjectPath> &removed); - + void serviceReady(); +private: + void handleNewService(const QString& servicePath); protected: QNetworkSettingsInterfaceModel m_interfaceModel; QNetworkSettingsServiceModel *m_serviceModel; diff --git a/src/networksettings/connman/qnetworksettingsservice_p.cpp b/src/networksettings/connman/qnetworksettingsservice_p.cpp index 8a7b2cf..e8aabff 100644 --- a/src/networksettings/connman/qnetworksettingsservice_p.cpp +++ b/src/networksettings/connman/qnetworksettingsservice_p.cpp @@ -362,6 +362,7 @@ void QNetworkSettingsServicePrivate::updateProperty(const QString& key, const QV else if (key == PropertyType) { QString value = qdbus_cast<QString>(val); value >> m_type; + emit q->typeChanged(); } else if (key == PropertyStrength) { m_wifiConfig.setSignalStrength(val.toInt()); diff --git a/src/networksettings/qnetworksettings.h b/src/networksettings/qnetworksettings.h index da75acd..5323f98 100644 --- a/src/networksettings/qnetworksettings.h +++ b/src/networksettings/qnetworksettings.h @@ -166,12 +166,11 @@ class Q_DECL_EXPORT QNetworkSettingsProxy : public QObject { Q_OBJECT Q_ENUMS(MethodType) -public: Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged) Q_PROPERTY(QAbstractItemModel* servers READ servers NOTIFY serversChanged) Q_PROPERTY(QAbstractItemModel* excludes READ excludes NOTIFY excludesChanged) Q_PROPERTY(MethodType method READ method WRITE setMethod NOTIFY methodChanged) - +public: explicit QNetworkSettingsProxy(QObject *parent = Q_NULLPTR); enum MethodType {Direct, Auto, Manual}; @@ -202,6 +201,7 @@ private: class Q_DECL_EXPORT QNetworkSettingsWireless : public QObject { Q_OBJECT + Q_ENUMS(SecurityFlags) Q_PROPERTY(int signalStrength READ signalStrength WRITE setSignalStrength NOTIFY signalStrengthChanged) Q_PROPERTY(bool hidden READ hidden NOTIFY hiddenChanged) Q_PROPERTY(bool isOutOfRange READ outOfRange WRITE setOutOfRange NOTIFY outOfRangeChanged) diff --git a/src/networksettings/qnetworksettingsmanager.cpp b/src/networksettings/qnetworksettingsmanager.cpp index ceee7ad..caf6057 100644 --- a/src/networksettings/qnetworksettingsmanager.cpp +++ b/src/networksettings/qnetworksettingsmanager.cpp @@ -39,19 +39,19 @@ QNetworkSettingsManager::QNetworkSettingsManager(QObject *parent) : { } -QAbstractItemModel* QNetworkSettingsManager::services() +QNetworkSettingsServiceFilter *QNetworkSettingsManager::services() { Q_D(QNetworkSettingsManager); return d->m_serviceFilter; } -QAbstractItemModel* QNetworkSettingsManager::interfaces() +QNetworkSettingsInterfaceModel *QNetworkSettingsManager::interfaces() { Q_D(QNetworkSettingsManager); return &d->m_interfaceModel; } -QNetworkSettingsService* QNetworkSettingsManager::getService(const QString& name, const int type) +QNetworkSettingsService* QNetworkSettingsManager::service(const QString& name, const int type) { Q_D(QNetworkSettingsManager); diff --git a/src/networksettings/qnetworksettingsmanager.h b/src/networksettings/qnetworksettingsmanager.h index ba34974..86a60c4 100644 --- a/src/networksettings/qnetworksettingsmanager.h +++ b/src/networksettings/qnetworksettingsmanager.h @@ -35,24 +35,27 @@ QT_FORWARD_DECLARE_CLASS(QNetworkSettingsManagerPrivate) QT_FORWARD_DECLARE_CLASS(QNetworkSettingsService) +QT_FORWARD_DECLARE_CLASS(QNetworkSettingsServiceModel) QT_FORWARD_DECLARE_CLASS(QNetworkSettingsUserAgent) +QT_FORWARD_DECLARE_CLASS(QNetworkSettingsServiceFilter) +QT_FORWARD_DECLARE_CLASS(QNetworkSettingsInterfaceModel) class Q_DECL_EXPORT QNetworkSettingsManager : public QObject { Q_OBJECT Q_ENUMS(StateTypes NetworkTypeTypes) - Q_PROPERTY(QAbstractItemModel* services READ services NOTIFY servicesChanged) - Q_PROPERTY(QAbstractItemModel* interfaces READ interfaces NOTIFY interfacesChanged) + Q_PROPERTY(QNetworkSettingsServiceFilter* services READ services NOTIFY servicesChanged) + Q_PROPERTY(QNetworkSettingsInterfaceModel* interfaces READ interfaces NOTIFY interfacesChanged) Q_PROPERTY(QNetworkSettingsUserAgent* userAgent READ userAgent CONSTANT) public: explicit QNetworkSettingsManager(QObject* parent = Q_NULLPTR); - QAbstractItemModel* services(); - QAbstractItemModel* interfaces(); + QNetworkSettingsServiceFilter* services(); + QNetworkSettingsInterfaceModel* interfaces(); void setUserAgent(QNetworkSettingsUserAgent *agent); QNetworkSettingsUserAgent* userAgent(); - Q_INVOKABLE QNetworkSettingsService* getService(const QString& name, const int type); + Q_INVOKABLE QNetworkSettingsService* service(const QString& name, const int type); Q_SIGNALS: void servicesChanged(); diff --git a/src/networksettings/qnetworksettingsservicemodel.h b/src/networksettings/qnetworksettingsservicemodel.h index ab225bd..c158ec4 100644 --- a/src/networksettings/qnetworksettingsservicemodel.h +++ b/src/networksettings/qnetworksettingsservicemodel.h @@ -70,7 +70,7 @@ private: QHash<int, QByteArray> m_roleNames; }; -class QNetworkSettingsServiceFilter : public QSortFilterProxyModel +class Q_DECL_EXPORT QNetworkSettingsServiceFilter : public QSortFilterProxyModel { Q_OBJECT Q_PROPERTY(QNetworkSettingsType::Types type READ type WRITE setType NOTIFY typeChanged) |