diff --git a/src/backend/dbus-interface/kylinactiveconnectresource.cpp b/src/backend/dbus-interface/kylinactiveconnectresource.cpp index df31ff31..3c94b975 100644 --- a/src/backend/dbus-interface/kylinactiveconnectresource.cpp +++ b/src/backend/dbus-interface/kylinactiveconnectresource.cpp @@ -560,3 +560,23 @@ bool KyActiveConnectResourse::isActiveConnection(QString uuid, QStringList &devN } } } + +QString KyActiveConnectResourse::getDeviceOfActivateConnect(QString conUuid) +{ + QString deviceName = ""; + + NetworkManager::ActiveConnection::Ptr activeConnectPtr = + m_networkResourceInstance->getActiveConnect(conUuid); + + if (nullptr == activeConnectPtr) { + qWarning()<< "[KyActiveConnectResourse]" <<"it can not find connect "<< conUuid; + return deviceName; + } + + QStringList interfaces = activeConnectPtr->devices(); + QString ifaceUni = interfaces.at(0); + NetworkManager::Device:: Ptr devicePtr = + m_networkResourceInstance->findDeviceUni(ifaceUni); + deviceName = devicePtr->interfaceName(); + return deviceName; +} diff --git a/src/backend/dbus-interface/kylinactiveconnectresource.h b/src/backend/dbus-interface/kylinactiveconnectresource.h index 93225d1b..4a291167 100644 --- a/src/backend/dbus-interface/kylinactiveconnectresource.h +++ b/src/backend/dbus-interface/kylinactiveconnectresource.h @@ -37,6 +37,8 @@ public: bool isActiveConnection(QString uuid, QStringList &devName); + QString getDeviceOfActivateConnect(QString conUuid); + private: void getActiveConnectIp(NetworkManager::ActiveConnection::Ptr activeConnectPtr, QString &ipv4Address, diff --git a/src/backend/dbus-interface/kylinapconnectitem.cpp b/src/backend/dbus-interface/kylinapconnectitem.cpp index 2a94b4aa..d7e4ea2e 100644 --- a/src/backend/dbus-interface/kylinapconnectitem.cpp +++ b/src/backend/dbus-interface/kylinapconnectitem.cpp @@ -7,6 +7,7 @@ KyApConnectItem::KyApConnectItem(QObject *parent) : QObject(parent) m_connectUuid = ""; m_ifaceName = ""; m_password = ""; + m_band = ""; m_isActivated = false; } diff --git a/src/backend/dbus-interface/kylinapconnectitem.h b/src/backend/dbus-interface/kylinapconnectitem.h index 9ead7b6d..76569b06 100644 --- a/src/backend/dbus-interface/kylinapconnectitem.h +++ b/src/backend/dbus-interface/kylinapconnectitem.h @@ -16,7 +16,9 @@ public: QString m_connectUuid; QString m_ifaceName; QString m_password; + QString m_band; bool m_isActivated; + }; #endif // KYLINAPCONNECTITEM_H diff --git a/src/backend/dbus-interface/kylinconnectoperation.cpp b/src/backend/dbus-interface/kylinconnectoperation.cpp index 4701df6b..7c4b1eeb 100644 --- a/src/backend/dbus-interface/kylinconnectoperation.cpp +++ b/src/backend/dbus-interface/kylinconnectoperation.cpp @@ -211,6 +211,7 @@ void KyConnectOperation::deactivateConnection(const QString activeConnectName, c NetworkManager::ActiveConnection::Ptr activateConnectPtr = nullptr; qDebug()<<"deactivetate connect name"<getActiveConnect(activeConnectUuid); if (nullptr == activateConnectPtr) { QString errorMessage = tr("it can not find the activate connect") diff --git a/src/backend/dbus-interface/kylinconnectresource.cpp b/src/backend/dbus-interface/kylinconnectresource.cpp index 3b0b95ae..026a512d 100644 --- a/src/backend/dbus-interface/kylinconnectresource.cpp +++ b/src/backend/dbus-interface/kylinconnectresource.cpp @@ -8,6 +8,25 @@ #include #include +const QString str2GBand = "2.4Ghz"; +const QString str5GBand = "5Ghz"; + +static bool subLanListSort(const KyConnectItem* info1, const KyConnectItem* info2) +{ + QString name1 = info1->m_connectName; + QString name2 = info2->m_connectName; + bool result = true; + if (QString::compare(name1, name2, Qt::CaseInsensitive) > 0) { + result = false; + } + return result; +} + +static void lanListSort(QList &list) +{ + qSort(list.begin(), list.end(), subLanListSort); +} + KyConnectResourse::KyConnectResourse(QObject *parent) : QObject(parent) { m_networkResourceInstance = KyNetworkResourceManager::getInstance(); @@ -152,6 +171,9 @@ void KyConnectResourse::getConnectionList(QString deviceName, connectPtr = nullptr; } + if (connectItemList.size() > 1) { + lanListSort(connectItemList); + } return; } @@ -530,6 +552,11 @@ KyApConnectItem *KyConnectResourse::getApConnectItem(NetworkManager::Connection: KyApConnectItem *apConnectItem = new KyApConnectItem(); apConnectItem->m_connectName = connectPtr->name(); apConnectItem->m_connectUuid = connectPtr->uuid(); + if (wirelessSetting->band() == NetworkManager::WirelessSetting::FrequencyBand::A) { + apConnectItem->m_band = str2GBand; + } else if (wirelessSetting->band() == NetworkManager::WirelessSetting::FrequencyBand::Bg) { + apConnectItem->m_band = str5GBand; + } apConnectItem->m_ifaceName = settingPtr->interfaceName(); apConnectItem->m_isActivated = m_networkResourceInstance->isActiveConnection(connectPtr->uuid()); diff --git a/src/backend/dbus-interface/kylinnetworkdeviceresource.cpp b/src/backend/dbus-interface/kylinnetworkdeviceresource.cpp index c41dd93f..c95b7ec9 100644 --- a/src/backend/dbus-interface/kylinnetworkdeviceresource.cpp +++ b/src/backend/dbus-interface/kylinnetworkdeviceresource.cpp @@ -202,6 +202,33 @@ void KyNetworkDeviceResourse::getDeviceActiveAPInfo(const QString devName, QStri } } +int KyNetworkDeviceResourse::getWirelessDeviceCapability(const QString deviceName) +{ + NetworkManager::Device::Ptr connectDevice = + m_networkResourceInstance->findDeviceInterface(deviceName); + if (connectDevice->isValid() + && NetworkManager::Device::Type::Wifi == connectDevice->type()) { + NetworkManager::WirelessDevice *wirelessDevicePtr = + qobject_cast(connectDevice.data()); + + int cap = 0; + if (wirelessDevicePtr->wirelessCapabilities() & NetworkManager::WirelessDevice::ApCap) { + cap = cap | 0x01; + } + if (wirelessDevicePtr->wirelessCapabilities() & NetworkManager::WirelessDevice::Freq2Ghz) { + cap = cap | 0x02; + } + if (wirelessDevicePtr->wirelessCapabilities() & NetworkManager::WirelessDevice::Freq5Ghz) { + cap = cap | 0x04; + } + return cap; + } else { + qWarning()<<"[KyNetworkDeviceResourse]"<setSsid(apSsid.toUtf8()); wirelessSetting->setMode(NetworkManager::WirelessSetting::NetworkMode::Ap); wirelessSetting->setSecurity("802-11-wireless-security"); + if (wirelessBand == WIFI_BAND_2_4GHZ) { + wirelessSetting->setBand(NetworkManager::WirelessSetting::FrequencyBand::Bg); + } else if (wirelessBand == WIFI_BAND_5GHZ) { + wirelessSetting->setBand(NetworkManager::WirelessSetting::FrequencyBand::A); + } else { + qWarning()<<"[KyWirelessConnectOperation] the band type undefined"<setBand(NetworkManager::WirelessSetting::FrequencyBand::Automatic); + } + NetworkManager::WirelessSecuritySetting::Ptr wirelessSecuritySetting = connectionSettings->setting(NetworkManager::Setting::WirelessSecurity).dynamicCast(); @@ -726,7 +738,9 @@ NetworkManager::ConnectionSettings::Ptr void KyWirelessConnectOperation::updateWirelessApSetting( NetworkManager::Connection::Ptr apConnectPtr, - const QString apName, const QString apPassword, const QString apDevice) + const QString apName, const QString apPassword, + const QString apDevice, const QString wirelessBand) + { NetworkManager::ConnectionSettings::Ptr apConnectSettingPtr = apConnectPtr->settings(); apConnectSettingPtr->setId(apName); @@ -737,6 +751,15 @@ void KyWirelessConnectOperation::updateWirelessApSetting( = apConnectSettingPtr->setting(NetworkManager::Setting::Wireless).dynamicCast(); wirelessSetting->setInitialized(true); wirelessSetting->setSsid(apName.toUtf8()); + if (wirelessBand == WIFI_BAND_2_4GHZ) { + wirelessSetting->setBand(NetworkManager::WirelessSetting::FrequencyBand::Bg); + } else if (wirelessBand == WIFI_BAND_5GHZ) { + wirelessSetting->setBand(NetworkManager::WirelessSetting::FrequencyBand::A); + } else { + qWarning()<<"[KyWirelessConnectOperation] the band type undefined"<setBand(NetworkManager::WirelessSetting::FrequencyBand::Automatic); + } + NetworkManager::WirelessSecuritySetting::Ptr wirelessSecuritySetting = apConnectSettingPtr->setting(NetworkManager::Setting::WirelessSecurity).dynamicCast(); @@ -752,8 +775,11 @@ void KyWirelessConnectOperation::updateWirelessApSetting( } void KyWirelessConnectOperation::activeWirelessAp(const QString apUuid, const QString apName, - const QString apPassword, const QString apDevice) + const QString apPassword, const QString apDevice, + const QString wirelessBand) + { + qDebug() << "activeWirelessAp]" << apUuid << apName << apPassword << apDevice << wirelessBand; //1、检查连接是否存在 NetworkManager::Connection::Ptr connectPtr = m_networkResourceInstance->getConnect(apUuid); if (nullptr == connectPtr) { @@ -768,7 +794,7 @@ void KyWirelessConnectOperation::activeWirelessAp(const QString apUuid, const QS QString deviceIdentifier = devicePtr->uni(); NetworkManager::ConnectionSettings::Ptr apConnectSettingPtr = - createWirelessApSetting(apName, apPassword, apDevice); + createWirelessApSetting(apName, apPassword, apDevice, wirelessBand); QString specificObject = ""; QDBusPendingCallWatcher * watcher; watcher = new QDBusPendingCallWatcher{NetworkManager::addAndActivateConnection(apConnectSettingPtr->toMap(), deviceIdentifier, specificObject), this}; @@ -781,7 +807,7 @@ void KyWirelessConnectOperation::activeWirelessAp(const QString apUuid, const QS watcher->deleteLater(); }); } else { - updateWirelessApSetting(connectPtr, apName, apPassword, apDevice); + updateWirelessApSetting(connectPtr, apName, apPassword, apDevice, wirelessBand); QTimer::singleShot(500, this, [=](){ activateApConnectionByUuid(apUuid, apDevice); }); diff --git a/src/backend/dbus-interface/kywirelessconnectoperation.h b/src/backend/dbus-interface/kywirelessconnectoperation.h index d160edb9..9a481b56 100644 --- a/src/backend/dbus-interface/kywirelessconnectoperation.h +++ b/src/backend/dbus-interface/kywirelessconnectoperation.h @@ -9,7 +9,10 @@ #include "kyenterpricesettinginfo.h" const QByteArray GSETTINGS_SCHEMA = "org.ukui.kylin-nm.switch"; -const QString WIRELESS_SWITCH = "wirelessswitch"; +const QString WIRELESS_SWITCH = "wirelessswitch"; + +const QString WIFI_BAND_2_4GHZ = "2.4Ghz"; +const QString WIFI_BAND_5GHZ = "5Ghz"; enum KySecuType { NONE = 0, @@ -105,13 +108,22 @@ public: //申请扫描 void requestWirelessScan(); - void activeWirelessAp(const QString apUuid, const QString apName, const QString apPassword, const QString apDevice); + void activeWirelessAp(const QString apUuid, const QString apName, + const QString apPassword, const QString apDevice, + const QString wirelessBand); void deactiveWirelessAp(const QString apName, const QString apUuid); private: - NetworkManager::ConnectionSettings::Ptr createWirelessApSetting(const QString apSsid, const QString apPassword, const QString apDevice); + NetworkManager::ConnectionSettings::Ptr createWirelessApSetting(const QString apSsid, + const QString apPassword, + const QString apDevice, + const QString wirelessBand); void updateWirelessApSetting(NetworkManager::Connection::Ptr apConnectPtr, - const QString apName, const QString apPassword, const QString apDevice); + const QString apName, + const QString apPassword, + const QString apDevice, + const QString wirelessBand); + diff --git a/src/backend/dbusadaptor.cpp b/src/backend/dbusadaptor.cpp index 58639274..05762e36 100644 --- a/src/backend/dbusadaptor.cpp +++ b/src/backend/dbusadaptor.cpp @@ -30,6 +30,7 @@ DbusAdaptor::DbusAdaptor(MainWindow *parent) { // constructor qDBusRegisterMetaType >(); + qDBusRegisterMetaType >(); qDBusRegisterMetaType >(); qDBusRegisterMetaType >>(); //setAutoRelaySignals(true)后会自动转发mainwindow发出的同名信号,因此不必再额外写一个转发 @@ -175,6 +176,14 @@ QMap DbusAdaptor::getDeviceListAndEnabled(int devType) return map; } +//获取无线设备能力 +QMap DbusAdaptor::getWirelessDeviceCap() +{ + QMap map; + parent()->getWirelessDeviceCap(map); + return map; +} + //唤起属性页 根据网卡类型 参数2 为ssid/uuid void DbusAdaptor::showPropertyWidget(QString devName, QString ssid) { @@ -190,15 +199,15 @@ void DbusAdaptor::showCreateWiredConnectWidget(QString devName) } //开启热点 -void DbusAdaptor::activeWirelessAp(const QString apName, const QString apPassword, const QString apDevice) +void DbusAdaptor::activeWirelessAp(const QString apName, const QString apPassword, const QString band, const QString apDevice) { - parent()->activeWirelessAp(apName, apPassword, apDevice); + parent()->activeWirelessAp(apName, apPassword, band, apDevice); } //断开热点 -void DbusAdaptor::deactiveWirelessAp(const QString apName, const QString apPassword, const QString apDevice) +void DbusAdaptor::deactiveWirelessAp(const QString apName, const QString uuid) { - parent()->deactiveWirelessAp(apName, apPassword, apDevice); + parent()->deactiveWirelessAp(apName, uuid); } //获取热点 @@ -210,6 +219,14 @@ QStringList DbusAdaptor::getStoredApInfo() return list; } +QStringList DbusAdaptor::getApInfoBySsid(QString devName, QString ssid) +{ + QStringList list; + list.clear(); + parent()->getApInfoBySsid(devName, ssid, list); + return list; +} + //扫描 void DbusAdaptor::reScan() diff --git a/src/backend/dbusadaptor.h b/src/backend/dbusadaptor.h index b59e76d1..a96a674e 100644 --- a/src/backend/dbusadaptor.h +++ b/src/backend/dbusadaptor.h @@ -68,16 +68,19 @@ public Q_SLOTS: // METHODS Q_NOREPLY void deActivateConnect(int type, QString devName, QString ssid); //获取设备列表和启用/禁用状态 QMap getDeviceListAndEnabled(int devType); + //获取无线设备能力 + QMap getWirelessDeviceCap(); //唤起属性页 根据网卡类型 参数2 为ssid/uuid Q_NOREPLY void showPropertyWidget(QString devName, QString ssid); //唤起新建有线连接界面 Q_NOREPLY void showCreateWiredConnectWidget(QString devName); //开启热点 - void activeWirelessAp(const QString apName, const QString apPassword, const QString apDevice); + void activeWirelessAp(const QString apName, const QString apPassword, const QString band, const QString apDevice); //断开热点 - void deactiveWirelessAp(const QString apName, const QString apPassword, const QString apDevice); + void deactiveWirelessAp(const QString apName, const QString uuid); //获取热点 QStringList getStoredApInfo(); + QStringList getApInfoBySsid(QString devName, QString ssid); //wifi扫描 void reScan(); Q_SIGNALS: // SIGNALS @@ -99,7 +102,7 @@ Q_SIGNALS: // SIGNALS //热点断开 void hotspotDeactivated(QString devName, QString ssid); //热点连接 - void hotspotActivated(QString devName, QString ssid); + void hotspotActivated(QString devName, QString ssid, QString uuid); //信号强度变化 void signalStrengthChange(QString devName, QString ssid, int strength); diff --git a/src/frontend/mainwindow.cpp b/src/frontend/mainwindow.cpp index c30e8477..c88ad2c4 100644 --- a/src/frontend/mainwindow.cpp +++ b/src/frontend/mainwindow.cpp @@ -420,30 +420,34 @@ void MainWindow::getWiredList(QMap> &map) * @param apPassword * @param apDevice */ -void MainWindow::activeWirelessAp(const QString apName, const QString apPassword, const QString apDevice) +void MainWindow::activeWirelessAp(const QString apName, const QString apPassword, const QString band, const QString apDevice) { - m_wlanWidget->activeWirelessAp(apName, apPassword, apDevice); + m_wlanWidget->activeWirelessAp(apName, apPassword, band, apDevice); } /** * @brief MainWindow::activeWirelessAp 断开热点,供dbus调用 * @param apName */ -void MainWindow::deactiveWirelessAp(const QString apName, const QString apPassword, const QString apDevice) +void MainWindow::deactiveWirelessAp(const QString apName, const QString uuid) { - m_wlanWidget->deactiveWirelessAp(apName, apPassword, apDevice); + m_wlanWidget->deactiveWirelessAp(apName, uuid); } /** * @brief MainWindow::activeWirelessAp 获取热点,供dbus调用 * @param list */ +void MainWindow::getApInfoBySsid(QString devName, QString ssid, QStringList &list) +{ + m_wlanWidget->getApInfoBySsid(devName, ssid, list); +} + void MainWindow::getStoredApInfo(QStringList &list) { m_wlanWidget->getStoredApInfo(list); } - void MainWindow::setWiredDeviceEnable(const QString& devName, bool enable) { m_lanWidget->setWiredDeviceEnable(devName, enable); @@ -485,6 +489,11 @@ void MainWindow::showCreateWiredConnectWidget(const QString devName) netDetail->show(); } +void MainWindow::getWirelessDeviceCap(QMap &map) +{ + m_wlanWidget->getWirelessDeviceCap(map); +} + //有线连接断开 void MainWindow::activateWired(const QString& devName, const QString& connUuid) { diff --git a/src/frontend/mainwindow.h b/src/frontend/mainwindow.h index 65549f70..f67611b9 100644 --- a/src/frontend/mainwindow.h +++ b/src/frontend/mainwindow.h @@ -30,11 +30,12 @@ public: void getWirelessList(QMap > &map); void getWiredList(QMap> &map); //开启热点 - void activeWirelessAp(const QString apName, const QString apPassword, const QString apDevice); + void activeWirelessAp(const QString apName, const QString apPassword, const QString wirelessBand, const QString apDevice); //断开热点 - void deactiveWirelessAp(const QString apName, const QString apPassword, const QString apDevice); + void deactiveWirelessAp(const QString apName, const QString uuid); //获取热点 void getStoredApInfo(QStringList &list); + void getApInfoBySsid(QString devName, QString ssid, QStringList &list); //有线连接断开 void activateWired(const QString& devName, const QString& connUuid); void deactivateWired(const QString& devName, const QString& connUuid); @@ -49,6 +50,8 @@ public: //唤起新建有线连接界面 void showCreateWiredConnectWidget(const QString devName); + void getWirelessDeviceCap(QMap &map); + void rescan(); signals: @@ -68,7 +71,7 @@ signals: void deactivateFailed(QString errorMessage); //热点断开 void hotspotDeactivated(QString devName, QString ssid); - void hotspotActivated(QString devName, QString ssid); + void hotspotActivated(QString devName, QString ssid, QString uuid); //信号强度变化 void signalStrengthChange(QString devName, QString ssid, int strength); //安全性变化 diff --git a/src/frontend/netdetails/detailitem.cpp b/src/frontend/netdetails/detailitem.cpp deleted file mode 100644 index be9001a4..00000000 --- a/src/frontend/netdetails/detailitem.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "detailitem.h" - -DetailItem::DetailItem(QWidget *parent) : QWidget(parent) -{ - -} diff --git a/src/frontend/netdetails/detailitem.h b/src/frontend/netdetails/detailitem.h deleted file mode 100644 index 6e775c6f..00000000 --- a/src/frontend/netdetails/detailitem.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef DETAILITEM_H -#define DETAILITEM_H - -#include - -class DetailItem : public QWidget -{ - Q_OBJECT -public: - explicit DetailItem(QWidget *parent = nullptr); - -signals: - -}; - -#endif // DETAILITEM_H diff --git a/src/frontend/netdetails/detailpage.cpp b/src/frontend/netdetails/detailpage.cpp index 572ea7e3..7b8e45a8 100644 --- a/src/frontend/netdetails/detailpage.cpp +++ b/src/frontend/netdetails/detailpage.cpp @@ -1,5 +1,6 @@ #include "detailpage.h" #include +#include extern void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed); @@ -73,68 +74,78 @@ bool DetailPage::checkIsChanged(const ConInfo info) } } +void DetailPage::addDetailItem(QListWidget *listWidget, DetailWidget *detailWidget) +{ + QListWidgetItem *listWidgetItem = new QListWidgetItem(listWidget); + listWidgetItem->setSizeHint(QSize(listWidget->width(),36)); + listWidgetItem->setFlags(Qt::NoItemFlags); + listWidget->addItem(listWidgetItem); + listWidget->setItemWidget(listWidgetItem, detailWidget); +} + void DetailPage::initUI() { forgetNetBox = new QCheckBox(this); layout = new QVBoxLayout(this); + layout->setContentsMargins(0,0,0,0); - mDetailLayout = new QFormLayout(this); + QWidget *mDetailFrame = new QFrame(this); + mDetailLayout = new QVBoxLayout(mDetailFrame); + mDetailLayout->setContentsMargins(0,0,0,0); + + m_listWidget = new QListWidget(mDetailFrame); + m_listWidget->setFrameShape(QFrame::Shape::NoFrame); + m_listWidget->setBackgroundRole(QPalette::Base); + m_listWidget->setFocusPolicy(Qt::FocusPolicy::NoFocus); + mDetailLayout->addWidget(m_listWidget); mSSID = new QLineEdit(this); mSSID->setAlignment(Qt::AlignRight); if (!isCreate) { - mSSID->setStyleSheet("background:transparent;border-width:0;border-style:outset"); + mSSID->setStyleSheet("background:transparent;border-width:0px;border-style:none"); mSSID->setFocusPolicy(Qt::NoFocus); } else { - mSSID->setStyleSheet("border-width:0;border-style:outset"); +// mSSID->setStyleSheet("border-width:1px;;border-style:solid;border-color:black;border-radius:2px"); + mSSID->setStyleSheet("border-top:0px solid;border-bottom:1px solid;border-left:0px solid;border-right: 0px solid;"); + mSSID->setPlaceholderText(tr("Please input SSID:")); } - QHBoxLayout *mSsidLayout = new QHBoxLayout(this); - mSsidLayout->addStretch(); - mSsidLayout->addWidget(mSSID); + m_ssidWidget = new DetailWidget(qobject_cast(mSSID), m_listWidget); + m_ssidWidget->setKey(tr("SSID:")); - mProtocol = new QLabel(this); - QHBoxLayout *mProtocolLayout = new QHBoxLayout(this); - mProtocolLayout->addStretch(); - mProtocolLayout->addWidget(mProtocol); + mProtocol = new QLabel(this); + m_protocolWidget = new DetailWidget(qobject_cast(mProtocol), m_listWidget); + m_protocolWidget->setKey(tr("Protocol:")); - mSecType = new QLabel(this); - QHBoxLayout *mSecTypeLayout = new QHBoxLayout(this); - mSecTypeLayout->addStretch(); - mSecTypeLayout->addWidget(mSecType); + mSecType = new QLabel(this); + m_secTypeWidget = new DetailWidget(qobject_cast(mSecType)); + m_secTypeWidget->setKey(tr("Security Type:")); - mHz = new QLabel(this); - QHBoxLayout *mHzLayout = new QHBoxLayout(this); - mHzLayout->addStretch(); - mHzLayout->addWidget(mHz); + mHz = new QLabel(this); + m_hzWidget = new DetailWidget(qobject_cast(mHz)); + m_hzWidget->setKey(tr("Hz:")); - mChan = new QLabel(this); - QHBoxLayout *mChanLayout = new QHBoxLayout(this); - mChanLayout->addStretch(); - mChanLayout->addWidget(mChan); + mChan = new QLabel(this); + m_chanelWidget = new DetailWidget(qobject_cast(mChan)); + m_chanelWidget->setKey(tr("Chan:")); mBandWidth = new QLabel(this); - QHBoxLayout *mBandWidthLayout = new QHBoxLayout(this); - mBandWidthLayout->addStretch(); - mBandWidthLayout->addWidget(mBandWidth); + m_bandwidthWidget = new DetailWidget(qobject_cast(mBandWidth), m_listWidget); + m_bandwidthWidget->setKey(tr("BandWidth:")); - mIPV4 = new QLabel(this); - QHBoxLayout *mIPV4Layout = new QHBoxLayout(this); - mIPV4Layout->addStretch(); - mIPV4Layout->addWidget(mIPV4); + mIPV4 = new QLabel(this); + m_ipv4Widget = new DetailWidget(qobject_cast(mIPV4), m_listWidget); + m_ipv4Widget->setKey(tr("IPV4:")); - mIPV4Dns = new QLabel(this); - QHBoxLayout *mIPV4DnsLayout = new QHBoxLayout(this); - mIPV4DnsLayout->addStretch(); - mIPV4DnsLayout->addWidget(mIPV4Dns); + mIPV4Dns = new QLabel(this); + m_ipv4DnsWidget = new DetailWidget(qobject_cast(mIPV4Dns), m_listWidget); + m_ipv4DnsWidget->setKey(tr("IPV4 Dns:")); - mIPV6 = new QLabel(this); - QHBoxLayout *mIPV6Layout = new QHBoxLayout(this); - mIPV6Layout->addStretch(); - mIPV6Layout->addWidget(mIPV6); + mIPV6 = new QLabel(this); + m_ipv6Widget = new DetailWidget(qobject_cast(mIPV6), m_listWidget); + m_ipv6Widget->setKey(tr("IPV6:")); - mMac = new QLabel(this); - QHBoxLayout *mMacLayout = new QHBoxLayout(this); - mMacLayout->addStretch(); - mMacLayout->addWidget(mMac); + mMac = new QLabel(this); + m_macWidget = new DetailWidget(qobject_cast(mMac), m_listWidget); + m_macWidget->setKey(tr("Mac:")); autoConnect = new QLabel(this); @@ -147,23 +158,28 @@ void DetailPage::initUI() { mAutoLayout->addWidget(autoConnect); mAutoLayout->addSpacerItem(horizontalSpacer); - mDetailLayout->addRow(tr("SSID:"), mSsidLayout); - mDetailLayout->addRow(tr("Protocol:"), mProtocolLayout); + this->addDetailItem(m_listWidget, m_ssidWidget); + this->addDetailItem(m_listWidget, m_protocolWidget); if (mIsWlan) { - mDetailLayout->addRow(tr("Security Type:"), mSecTypeLayout); - mDetailLayout->addRow(tr("Hz:"), mHzLayout); - mDetailLayout->addRow(tr("Chan:"), mChanLayout); + this->addDetailItem(m_listWidget, m_secTypeWidget); + this->addDetailItem(m_listWidget, m_hzWidget); + this->addDetailItem(m_listWidget, m_chanelWidget); } - mDetailLayout->addRow(tr("BandWidth:"), mBandWidthLayout); - mDetailLayout->addRow(tr("IPV6:"), mIPV6Layout); - mDetailLayout->addRow(tr("IPV4:"), mIPV4Layout); - mDetailLayout->addRow(tr("IPV4 Dns:"), mIPV4DnsLayout); - mDetailLayout->addRow(tr("Mac:"), mMacLayout); + this->addDetailItem(m_listWidget, m_bandwidthWidget); + this->addDetailItem(m_listWidget, m_ipv6Widget); + this->addDetailItem(m_listWidget, m_ipv4Widget); + this->addDetailItem(m_listWidget, m_ipv4DnsWidget); + this->addDetailItem(m_listWidget, m_macWidget); - layout->addLayout(mDetailLayout); - layout->addStretch(); + QPalette mpal(m_listWidget->palette()); + mpal.setColor(QPalette::Base, qApp->palette().base().color()); + mpal.setColor(QPalette::AlternateBase, qApp->palette().alternateBase().color()); + m_listWidget->setAlternatingRowColors(true); +// m_listWidget->setAutoFillBackground(true); + m_listWidget->setPalette(mpal); + + layout->addWidget(mDetailFrame); layout->addLayout(mAutoLayout); - } void DetailPage::setEnableOfSaveBtn() { diff --git a/src/frontend/netdetails/detailpage.h b/src/frontend/netdetails/detailpage.h index 719e33ce..fa40c35a 100644 --- a/src/frontend/netdetails/detailpage.h +++ b/src/frontend/netdetails/detailpage.h @@ -7,7 +7,10 @@ #include #include #include +#include +#include +#include "detailwidget.h" #include "coninfo.h" class DetailPage : public QFrame @@ -34,8 +37,21 @@ public: private: void initUI(); + void addDetailItem(QListWidget *listWidget, DetailWidget *detailWidget); public: + QListWidget * m_listWidget = nullptr; + DetailWidget * m_ssidWidget = nullptr; + DetailWidget * m_protocolWidget = nullptr; + DetailWidget * m_secTypeWidget = nullptr; + DetailWidget * m_hzWidget = nullptr; + DetailWidget * m_chanelWidget = nullptr; + DetailWidget * m_bandwidthWidget = nullptr; + DetailWidget * m_ipv4Widget = nullptr; + DetailWidget * m_ipv4DnsWidget = nullptr; + DetailWidget * m_ipv6Widget = nullptr; + DetailWidget * m_macWidget = nullptr; + QLineEdit *mSSID; QLabel *mProtocol; QLabel *mSecType; @@ -51,7 +67,7 @@ public: // QWidget *autoFrame; private: QVBoxLayout *layout; - QFormLayout *mDetailLayout; + QVBoxLayout *mDetailLayout; QHBoxLayout *mAutoLayout; QCheckBox *forgetNetBox; bool mIsWlan; diff --git a/src/frontend/netdetails/detailwidget.cpp b/src/frontend/netdetails/detailwidget.cpp new file mode 100644 index 00000000..a045e0ce --- /dev/null +++ b/src/frontend/netdetails/detailwidget.cpp @@ -0,0 +1,32 @@ +#include "detailwidget.h" +#define ITEM_HEIGHT 36 +#define ITEM_MARGINS 18,0,16,0 + +DetailWidget::DetailWidget(QWidget *valueWidget, QWidget *parent) + : m_valueWidget(valueWidget) , QWidget(parent) +{ +// m_valueWidget = valueWidget; + initUI(); +} + +DetailWidget::~DetailWidget() +{ + +} + +void DetailWidget::initUI() +{ + this->setFixedHeight(ITEM_HEIGHT); + m_mainLayout = new QHBoxLayout(this); + m_mainLayout->setContentsMargins(ITEM_MARGINS); + + m_keyLabel = new QLabel(this); + m_mainLayout->addWidget(m_keyLabel); + m_mainLayout->addStretch(); + m_mainLayout->addWidget(m_valueWidget); +} + +void DetailWidget::setKey(const QString &keyLabel) +{ + m_keyLabel->setText(keyLabel); +} diff --git a/src/frontend/netdetails/detailwidget.h b/src/frontend/netdetails/detailwidget.h new file mode 100644 index 00000000..00333bb2 --- /dev/null +++ b/src/frontend/netdetails/detailwidget.h @@ -0,0 +1,27 @@ +#ifndef DetailWidget_H +#define DetailWidget_H + +#include +#include +#include + +class DetailWidget : public QWidget +{ + Q_OBJECT +public: + explicit DetailWidget(QWidget *valueWidget = nullptr, QWidget *parent = nullptr); + ~DetailWidget(); + + void setKey(const QString &keyLabel); + +private: + QHBoxLayout * m_mainLayout = nullptr; + QLabel * m_keyLabel = nullptr; + QWidget * m_valueWidget = nullptr; + + void initUI(); +signals: + +}; + +#endif // DetailWidget_H diff --git a/src/frontend/netdetails/netdetail.cpp b/src/frontend/netdetails/netdetail.cpp index 7f5286c5..8f85ed15 100644 --- a/src/frontend/netdetails/netdetail.cpp +++ b/src/frontend/netdetails/netdetail.cpp @@ -3,8 +3,8 @@ #include "backend/kylinipv6arping.h" #include "xatom/xatom-helper.h" -#define WINDOW_WIDTH 540 -#define WINDOW_HEIGHT 574 +#define WINDOW_WIDTH 520 +#define WINDOW_HEIGHT 590 #define BUTTON_SIZE 30 #define ICON_SIZE 22,22 #define TITLE_LAYOUT_MARGINS 9,9,0,0 @@ -80,6 +80,7 @@ NetDetail::NetDetail(QString interface, QString name, QString uuid, bool isActiv getConInfo(m_info); pagePadding(name,isWlan); + connect(qApp, &QApplication::paletteChanged, this, &NetDetail::onPaletteChanged); isCreateOk = !(m_isCreateNet && !isWlan); isDetailOk = !(m_name.isEmpty()); @@ -97,6 +98,20 @@ NetDetail::~NetDetail() } +void NetDetail::onPaletteChanged() +{ + QPalette pal = qApp->palette(); + pal.setColor(QPalette::Window, qApp->palette().base().color()); + this->setPalette(pal); + + QPalette listwidget_pal(detailPage->m_listWidget->palette()); + listwidget_pal.setColor(QPalette::Base, qApp->palette().base().color()); + listwidget_pal.setColor(QPalette::AlternateBase, qApp->palette().alternateBase().color()); + detailPage->m_listWidget->setAlternatingRowColors(true); + detailPage->m_listWidget->setPalette(listwidget_pal); + +} + void NetDetail::paintEvent(QPaintEvent *event) { return QDialog::paintEvent(event); @@ -233,6 +248,10 @@ void NetDetail::initUI() bottomLayout->addWidget(cancelBtn); bottomLayout->addWidget(confimBtn); + QPalette pal(this->palette()); + pal.setColor(QPalette::Background, qApp->palette().base().color()); + this->setAutoFillBackground(true); + this->setPalette(pal); } void NetDetail::loadPage() diff --git a/src/frontend/netdetails/netdetail.h b/src/frontend/netdetails/netdetail.h index 2ca50cf9..950670af 100644 --- a/src/frontend/netdetails/netdetail.h +++ b/src/frontend/netdetails/netdetail.h @@ -132,5 +132,6 @@ private slots: signals: void detailPageClose(bool on); + void onPaletteChanged(); }; #endif // NETDETAIL_H diff --git a/src/frontend/netdetails/netdetails.pri b/src/frontend/netdetails/netdetails.pri index 206899b9..720a66b8 100644 --- a/src/frontend/netdetails/netdetails.pri +++ b/src/frontend/netdetails/netdetails.pri @@ -5,6 +5,7 @@ HEADERS += \ $$PWD/creatnetpage.h \ $$PWD/customtabstyle.h \ $$PWD/detailpage.h \ + $$PWD/detailwidget.h \ $$PWD/ipv4page.h \ $$PWD/ipv6page.h \ $$PWD/netdetail.h \ @@ -14,6 +15,7 @@ SOURCES += \ $$PWD/creatnetpage.cpp \ $$PWD/customtabstyle.cpp \ $$PWD/detailpage.cpp \ + $$PWD/detailwidget.cpp \ $$PWD/ipv4page.cpp \ $$PWD/ipv6page.cpp \ $$PWD/netdetail.cpp \ diff --git a/src/frontend/tab-pages/lanpage.cpp b/src/frontend/tab-pages/lanpage.cpp index b9ecdc05..55dce961 100644 --- a/src/frontend/tab-pages/lanpage.cpp +++ b/src/frontend/tab-pages/lanpage.cpp @@ -792,12 +792,21 @@ void LanPage::onUpdateLanlist(QString uuid, } else if (state == NetworkManager::ActiveConnection::State::Deactivated) { updateConnectionArea(uuid); m_isLanConnected = false; + } else if (state == NetworkManager::ActiveConnection::State::Activating + || state == NetworkManager::ActiveConnection::State::Deactivating) { + QString devName = m_activeResourse->getDeviceOfActivateConnect(uuid); + if (devName.isEmpty()) { + NetworkManager::ConnectionSettings::ConnectionType type; + m_connectResourse->getInterfaceByUuid(devName, type, uuid); + } + emit lanActiveConnectionStateChanged(devName, uuid, state); } - emit this->lanConnectChanged(); + emit this->lanConnectChanged(); return; } + void LanPage::getWiredList(QMap > &map) { QStringList devlist; diff --git a/src/frontend/tab-pages/wlanpage.cpp b/src/frontend/tab-pages/wlanpage.cpp index 420f2c3f..1db5d3ee 100644 --- a/src/frontend/tab-pages/wlanpage.cpp +++ b/src/frontend/tab-pages/wlanpage.cpp @@ -568,7 +568,7 @@ void WlanPage::onActivatedWlanChanged(QString uuid, NetworkManager::ActiveConnec foreach (auto item, apConnectItemList) { if (item->m_connectUuid == uuid) { qDebug() << "[WlanPage] hotspot Deactivated"; - emit hotspotActivated(item->m_ifaceName, ssid); + emit hotspotActivated(item->m_ifaceName, ssid, uuid); break; } } @@ -703,6 +703,8 @@ void WlanPage::showControlCenter() } void WlanPage::onWifiEnabledChanged(bool isWifiOn) { + qDebug() << "[WlanPage]onWifiEnabledChanged====================================" << isWifiOn; + qDebug() << "realstatus" << m_wirelessConnectOpreation->getWirelessEnabled(); //监听外部命令导致wifi状态变化,更新界面 //应该先检测是否有无线网卡可用,才改变开关状态 m_netDeviceResource->getNetworkDeviceList(NetworkManager::Device::Type::Wifi, m_devList); @@ -828,7 +830,7 @@ void WlanPage::getWirelessList(QMap > &map) } //开启热点 -void WlanPage::activeWirelessAp(const QString apName, const QString apPassword, const QString apDevice) +void WlanPage::activeWirelessAp(const QString apName, const QString apPassword, const QString wirelessBand, const QString apDevice) { QString uuid(""); QList apConnectItemList; @@ -836,29 +838,14 @@ void WlanPage::activeWirelessAp(const QString apName, const QString apPassword, if (!apConnectItemList.isEmpty()) { uuid = apConnectItemList.at(0)->m_connectUuid; } - m_wirelessConnectOpreation->activeWirelessAp(uuid, apName, apPassword, apDevice); + m_wirelessConnectOpreation->activeWirelessAp(uuid, apName, apPassword, apDevice, wirelessBand); } //断开热点 -void WlanPage::deactiveWirelessAp(const QString apName, const QString apPassword, const QString apDevice) +void WlanPage::deactiveWirelessAp(const QString apName, const QString uuid) { - QString uuid(""); - QList apConnectItemList; - m_apConnectResource->getApConnections(apConnectItemList); - if (!apConnectItemList.isEmpty()) { - foreach (auto item, apConnectItemList) { - if (apName == item->m_connectName && apPassword == item->m_password && apDevice == item->m_ifaceName) { - uuid = item->m_connectUuid; - qDebug() << "[WlanPage] deactiveWirelessAp uuid = " << uuid; - break; - } - } - } if (!uuid.isEmpty()) { m_wirelessConnectOpreation->deactiveWirelessAp(apName, uuid); - } else { - qDebug() << "[WlanPage] deactiveWirelessAp can not find apName " << apName; - emit deactivateFailed("Deactivate hotspot failed.Don't exist " + apName); } } @@ -872,6 +859,22 @@ void WlanPage::getStoredApInfo(QStringList &list) list << apConnectItemList.at(0)->m_password; list << apConnectItemList.at(0)->m_ifaceName; list << (apConnectItemList.at(0)->m_isActivated? "true":"false"); + list << apConnectItemList.at(0)->m_connectUuid; + list << apConnectItemList.at(0)->m_band; + } +} + +void WlanPage::getApInfoBySsid(QString devName, QString ssid, QStringList &list) +{ + list.clear(); + QList apConnectItemList; + m_apConnectResource->getApConnections(apConnectItemList); + for (int i = 0; i < apConnectItemList.size(); i++) { + if (apConnectItemList.at(i)->m_connectName == ssid + && apConnectItemList.at(i)->m_ifaceName == devName) { + list << apConnectItemList.at(i)->m_password; + list << apConnectItemList.at(i)->m_band; + } } } @@ -967,3 +970,11 @@ void WlanPage::showDetailPage(QString devName, QString ssid) netDetail->show(); } +void WlanPage::getWirelessDeviceCap(QMap &map) +{ + for (int i = 0; i < m_devList.size(); ++i) { + QString devName = m_devList.at(i); + map.insert(devName, m_netDeviceResource->getWirelessDeviceCapability(devName)); + } +} + diff --git a/src/frontend/tab-pages/wlanpage.h b/src/frontend/tab-pages/wlanpage.h index 1aaacb17..ebebb1f2 100644 --- a/src/frontend/tab-pages/wlanpage.h +++ b/src/frontend/tab-pages/wlanpage.h @@ -31,23 +31,26 @@ public: //for dbus void getWirelessList(QMap > &map); //开启热点 - void activeWirelessAp(const QString apName, const QString apPassword, const QString apDevice); + void activeWirelessAp(const QString apName, const QString apPassword, const QString wirelessBand, const QString apDevice); //断开热点 - void deactiveWirelessAp(const QString apName, const QString apPassword, const QString apDevice); + void deactiveWirelessAp(const QString apName, const QString uuid); //获取热点 void getStoredApInfo(QStringList &list); + void getApInfoBySsid(QString devName, QString ssid, QStringList &list); void activateWireless(const QString& devName, const QString& ssid); void deactivateWireless(const QString& devName, const QString& ssid); void showDetailPage(QString devName, QString uuid); + void getWirelessDeviceCap(QMap &map); + signals: void oneItemExpanded(const QString &ssid); void wlanAdd(QString devName, QStringList info); void wlanRemove(QString devName,QString ssid); void wlanActiveConnectionStateChanged(QString interface, QString ssid, QString uuid, int status); void hotspotDeactivated(QString devName, QString ssid); - void hotspotActivated(QString devName, QString ssid); + void hotspotActivated(QString devName, QString ssid, QString uuid); void signalStrengthChange(QString devName, QString ssid, int strength); void secuTypeChange(QString devName, QString ssid, QString secuType); void hiddenWlanClicked();