summaryrefslogtreecommitdiffstats
path: root/src/networksettings/qnetworksettingsservicemodel.cpp
diff options
context:
space:
mode:
authorSamuli Piippo <samuli.piippo@qt.io>2016-12-16 15:07:38 +0200
committerSamuli Piippo <samuli.piippo@qt.io>2016-12-16 15:07:38 +0200
commit4f54d9b10ebdd296accfa5526d7c941a03249a50 (patch)
tree80cdb907a68a65775852142a71be553ab0b9a0f4 /src/networksettings/qnetworksettingsservicemodel.cpp
parent48af5733bcd959146ac157a3c4759c8d89ccc465 (diff)
parentc494f7b4debb2d789154c4297c9bee420ac96b2b (diff)
Merge remote-tracking branch 'origin/5.7' into 5.8
* origin/5.7: Rename main project file to match project name Fix compile error in qtdevicesettings Fix QNetworkSettingsManager usage from the C++ Fix Wifi utils connection view Make bluetooth support optional Fix typo Remove unneeded include Use new style signals and slots connection Fix uninitialized variables Fix unused variable warning Fix deprecated QString warning Qt does not name getter functions with 'get' Fix compile errors: declaration of ‘<X>’ shadows a member of 'this' Fix compile error: No Qt keywords allowed in header files Fix compile error: 0 is not allowed for pointer initialization anymore Conflicts: src/bluetoothsettings/bluetoothdevice.h src/bluetoothsettings/bluez/bluetoothdevice_p.h src/bluetoothsettings/discoverymodel.h src/displaysettings/displaysettings.h src/displaysettings/displaysettings_p.h src/localdevice/qlocaldevice.h src/localesettings/localemodel.h src/localesettings/systemlocale.h src/networksettings/connman/qnetworksettingsinterface_p.h src/networksettings/connman/qnetworksettingsservice_p.h src/networksettings/connman/qnetworksettingsuseragent_p.h src/networksettings/qnetworksettings.h src/networksettings/qnetworksettingsaddressmodel.h src/networksettings/qnetworksettingsinterface.h src/networksettings/qnetworksettingsinterfacemodel.h src/networksettings/qnetworksettingsmanager.h src/networksettings/qnetworksettingsservice.h src/networksettings/qnetworksettingsservicemodel.h src/networksettings/qnetworksettingsuseragent.h src/networksettings/wpasupplicant/qnetworksettingsservice_p.h src/timedatesettings/systemtime.h src/timedatesettings/timezonemodel.h Change-Id: I7db3a24e41718e5951ec33336a1a4bd08b33e823
Diffstat (limited to 'src/networksettings/qnetworksettingsservicemodel.cpp')
-rw-r--r--src/networksettings/qnetworksettingsservicemodel.cpp64
1 files changed, 63 insertions, 1 deletions
diff --git a/src/networksettings/qnetworksettingsservicemodel.cpp b/src/networksettings/qnetworksettingsservicemodel.cpp
index 2755eda..ce8ea86 100644
--- a/src/networksettings/qnetworksettingsservicemodel.cpp
+++ b/src/networksettings/qnetworksettingsservicemodel.cpp
@@ -78,6 +78,7 @@ QVariant QNetworkSettingsServiceModel::data(const QModelIndex & index, int role)
void QNetworkSettingsServiceModel::append(QNetworkSettingsService* item)
{
item->setParent(this);
+ connectStateChanges(item);
beginResetModel();
m_items.append(item);
@@ -87,14 +88,24 @@ void QNetworkSettingsServiceModel::append(QNetworkSettingsService* item)
void QNetworkSettingsServiceModel::insert(int row, QNetworkSettingsService* item)
{
item->setParent(this);
-
+ connectStateChanges(item);
beginInsertRows(QModelIndex(), row, row);
m_items.insert(row, item);
endInsertRows();
}
+void QNetworkSettingsServiceModel::connectStateChanges(QNetworkSettingsService* item)
+{
+ connect(item, &QNetworkSettingsService::stateChanged, this, &QNetworkSettingsServiceModel::connectionStatusChanged);
+ QNetworkSettingsWireless* wireless = item->wirelessConfig();
+ if (wireless)
+ connect(wireless, &QNetworkSettingsWireless::signalStrengthChanged, this, &QNetworkSettingsServiceModel::signalStrengthChanged);
+}
+
void QNetworkSettingsServiceModel::remove(int row)
{
+ QNetworkSettingsService* item = m_items.at(row);
+ item->deleteLater();
beginRemoveRows(QModelIndex(), row, row);
m_items.removeAt(row);
endRemoveRows();
@@ -123,6 +134,34 @@ QList<QNetworkSettingsService*> QNetworkSettingsServiceModel::getModel()
return m_items;
}
+void QNetworkSettingsServiceModel::connectionStatusChanged()
+{
+ QNetworkSettingsService *s = qobject_cast<QNetworkSettingsService*>(sender());
+
+ int row = 0;
+ foreach (QNetworkSettingsService* item, m_items) {
+ if (item == s) {
+ updated(row);
+ break;
+ }
+ row++;
+ }
+
+}
+
+void QNetworkSettingsServiceModel::signalStrengthChanged()
+{
+ QNetworkSettingsWireless *s = qobject_cast<QNetworkSettingsWireless*>(sender());
+ int row = 0;
+ foreach (QNetworkSettingsService* item, m_items) {
+ if (item->wirelessConfig() == s) {
+ updated(row);
+ break;
+ }
+ row++;
+ }
+}
+
//Filter model
/*!
@@ -200,3 +239,26 @@ QVariant QNetworkSettingsServiceFilter::itemFromRow(const int row) const
return QVariant::fromValue(QStringLiteral(""));
}
+/*!
+ \qmlmethod int NetworkSettingsServiceFilter::activeRow()
+
+ Returns the connected service index in the model.
+ Returns negative number if no active connection is available.
+*/
+int QNetworkSettingsServiceFilter::activeRow() const
+{
+ QNetworkSettingsServiceModel* model = qobject_cast<QNetworkSettingsServiceModel*>(sourceModel());
+ QList<QNetworkSettingsService*> data = model->getModel();
+ int row = 0;
+ foreach (QNetworkSettingsService* item, data) {
+ if (item->type() == m_type &&
+ (item->state() == QNetworkSettingsState::Ready ||
+ item->state() == QNetworkSettingsState::Online)) {
+ QModelIndex idx = model->index(row, 0);
+ QModelIndex mapped = mapFromSource(idx);
+ return mapped.row();
+ }
+ row++;
+ }
+ return -1;
+}