Index: sources/device/DeviceView.cpp =================================================================== diff -u -r6e18f1d24b8cc3d84d26f46f36f73deb34e54371 -rabb959f145f8af64bab3b8f24314bf0ba8f3bb0e --- sources/device/DeviceView.cpp (.../DeviceView.cpp) (revision 6e18f1d24b8cc3d84d26f46f36f73deb34e54371) +++ sources/device/DeviceView.cpp (.../DeviceView.cpp) (revision abb959f145f8af64bab3b8f24314bf0ba8f3bb0e) @@ -25,7 +25,7 @@ #include "encryption.h" #include "MWifiNetwork.h" -VIEW_DEF_CLASS_EX(VDevice, QAbstractListModel) +VIEW_DEF_CLASS(VDevice) void VDevice::initConnections() { @@ -34,6 +34,15 @@ this , SLOT( onPOSTOSVersionData(QString))); connect(&_DeviceController , SIGNAL(didWiFiIP(QString, bool)), this , SLOT( onWiFiIP(QString, bool))); + + _wifiModel.setRoleNames({ { eRole_WifiMacAddress , "wifiMacAddress" }, + { eRole_WifiSsid , "wifiSsid" }, + { eRole_WifiSecurityTypes , "wifiSecurityTypes" }, + { eRole_WifiSignalLevel , "wifiSignalLevel" }, + { eRole_WifiSupported , "wifiSupported" }, + { eRole_WifiConnected , "wifiConnected" }, + }); + _wifiModel.clear(); } // ================================================================================================== @@ -264,7 +273,7 @@ void VDevice::wifiListRequest(const QStringList &) { status( "" ); wifiList({}); - dataClear(); + _wifiModel.clear(); wifiListEnabled(false); DeviceWifiListRequestData data ; emit didAttributeRequest( data ); @@ -310,6 +319,7 @@ eRSN_FLAGS , eIN_USE , }; + enum ValueUnit_Enum { eValue , eUnit , @@ -417,87 +427,33 @@ } } - _dataList.clear(); + QList> connected; + QList> supported; + QList> unsupported; + for (const auto &ssid: qAsConst(ssidInfoList)) { - DataModel data; - data.mWifiMacAddress = ssid.mBSSID; - data.mWifiSSID = ssid.mSSID; - data.mWifiSecurityTypes = ssid.mSECURITY; - data.mWifiSignalLevel = ssid.mSIGNAL_Max; - data.mWifiSupported = ssid.mSupported; - data.mWifiConnected = ssid.mInUse ; + bool inUse = ssid.mSSID == _ssid; + QHash vData; + vData[eRole_WifiMacAddress ] = ssid.mBSSID ; + vData[eRole_WifiSsid ] = ssid.mSSID ; + vData[eRole_WifiSecurityTypes ] = ssid.mSECURITY ; + vData[eRole_WifiSignalLevel ] = ssid.mSIGNAL_Max ; + vData[eRole_WifiSupported ] = ssid.mSupported ; + vData[eRole_WifiConnected ] = inUse ; - dataAppend( data, ssid.mInUse, ssid.mSupported); + if (inUse) { connected.append(vData); } + else if (ssid.mSupported) { supported.append(vData); } + else { unsupported.append(vData);} } -} -void View::VDevice::dataAppend(const DataModel &vData, bool vFirst, bool vSecond) { - beginInsertRows(QModelIndex(), rowCount(), rowCount()); - if ( vFirst && _dataList.count() >= 0 ) { _dataList.insert(0, vData); goto lOut; } - if ( vSecond && _dataList.count() >= 1 ) { _dataList.insert(1, vData); goto lOut; } + _wifiModel.clear(); - _dataList.append( vData); -lOut: - endInsertRows(); + // sort wifi list from top to bottom (Connected, Supported, Not Supported) + for (const auto &row : connected) { _wifiModel.appendRow(row); } + for (const auto &row : supported) { _wifiModel.appendRow(row); } + for (const auto &row : unsupported) { _wifiModel.appendRow(row); } } -void View::VDevice::dataClear() { - beginRemoveRows(QModelIndex(), 0, rowCount()); - _dataList.clear(); - endRemoveRows(); -} - -QVariant View::VDevice::data(const QModelIndex &vIndex, int vRole) const { - if (! vIndex.isValid() || vIndex.row() >= _dataList.count()) - return QVariant(); - - DataModel dataList = _dataList[vIndex.row()]; - - switch (vRole) { - // ----- WiFi - case eRole_WifiMacAddress : return dataList.mWifiMacAddress ; - case eRole_WifiSsid : return dataList.mWifiSSID ; - case eRole_WifiSecurityTypes : return dataList.mWifiSecurityTypes ; - case eRole_WifiSignalLevel : return dataList.mWifiSignalLevel ; - case eRole_WifiSupported : return dataList.mWifiSupported ; - case eRole_WifiConnected : return dataList.mWifiConnected ; - - // ----- Bluetooth - case eRole_BLE_UNUSED : return ""; ; - } - - return QString("Wifi %1").arg(vIndex.row()); -} - -bool View::VDevice::setData(const QModelIndex &vIndex, const QVariant& vValue, int vRole) { - if (! vIndex.isValid() || vIndex.row() >= _dataList.count()) { - return false; - } - - DataModel &dataItem = _dataList[vIndex.row()]; - - switch (vRole) { - case eRole_WifiConnected: { - if (dataItem.mWifiConnected != vValue.toBool()) { - dataItem.mWifiConnected = vValue.toBool(); - } - break; - } - default: - return false; - } - - // explicitly emit a dataChanged signal to notify anybody bound to this property (vRole) - emit dataChanged(vIndex, vIndex, QVector(1, vRole)); - return true; -} - -QModelIndex View::VDevice::index(int vRow, int vColumn, const QModelIndex &vParent) const { - return hasIndex(vRow, vColumn, vParent) - ? createIndex(vRow, vColumn) - : QModelIndex(); -} - // ================================================= WifiInfo void VDevice::doInitWifiInfo() { wifiInfoRequest({}); @@ -573,8 +529,8 @@ } void VDevice::updateWifiList() { - for (int row = 0; row < rowCount(); row++) { - setData(index(row,0), _dataList[row].mWifiSSID == ssid(), eRole_WifiConnected); + for (int row = 0; row < _wifiModel.rowCount(); row++) { + _wifiModel.updateData(row, eRole_WifiConnected, _wifiModel.data(_wifiModel.index(row, 0), eRole_WifiSsid).toString() == _ssid); } }