Index: sources/device/DeviceView.cpp =================================================================== diff -u -rbf9223700613ced6c377f3e3a7b4de8367c30474 -rb12cc2840bb819c5222bfd3bc2cc5ca6eb4c37fd --- sources/device/DeviceView.cpp (.../DeviceView.cpp) (revision bf9223700613ced6c377f3e3a7b4de8367c30474) +++ sources/device/DeviceView.cpp (.../DeviceView.cpp) (revision b12cc2840bb819c5222bfd3bc2cc5ca6eb4c37fd) @@ -26,7 +26,7 @@ #include "encryption.h" #include "MWifiNetwork.h" -VIEW_DEF_CLASS_EX(VDevice, QAbstractListModel) +VIEW_DEF_CLASS(VDevice) void VDevice::initConnections() { @@ -35,6 +35,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(); } // ================================================================================================== @@ -265,22 +274,22 @@ void VDevice::wifiListRequest(const QStringList &) { status( "" ); wifiList({}); - dataClear(); - wifiListEnabled(false); + _wifiModel.clear(); + isWifiScanning(true); DeviceWifiListRequestData data ; emit didAttributeRequest( data ); } void VDevice::onAttributeResponse(const DeviceWifiListResponseData &vData) { - // DEBUG : qDebug() << " 2 ---------- " << __FUNCTION__ << vData.mMessage << result << vData.mCompleted; + if ( vData.mCompleted ) { if ( vData.mAccepted ) { - wifiListEnabled(true); parseWifiListResult(vData.mWifiList); } else { wifiList({}); } + isWifiScanning(false); } accepted(vData.mAccepted); @@ -311,6 +320,7 @@ eRSN_FLAGS , eIN_USE , }; + enum ValueUnit_Enum { eValue , eUnit , @@ -418,87 +428,33 @@ } } - _dataList.clear(); - for (const auto &ssid: std::as_const(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 ; + QList> connected; + QList> supported; + QList> unsupported; - dataAppend( data, ssid.mInUse, ssid.mSupported); - } -} + for (const auto &ssid: qAsConst(ssidInfoList)) { + 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 ; -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; } - - _dataList.append( vData); -lOut: - endInsertRows(); -} - -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 ""; ; + if (inUse) { connected.append(vData); } + else if (ssid.mSupported) { supported.append(vData); } + else { unsupported.append(vData);} } - return QString("Wifi %1").arg(vIndex.row()); -} + _wifiModel.clear(); -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; + // 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); } } -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({}); @@ -574,8 +530,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); } } @@ -626,6 +582,7 @@ ssid(""); } ipAddress(vData); + wifiError(vWifiError); } // ================================================= Date/Time