diff --git a/debian/control b/debian/control index 1041c26e..7d994575 100644 --- a/debian/control +++ b/debian/control @@ -18,6 +18,7 @@ Build-Depends: debhelper (>=9), libkf5networkmanagerqt-dev (>= 5.36.0), libnm-dev, libcap-dev, + libukcc-dev, Standards-Version: 4.5.0 Rules-Requires-Root: no Homepage: https://github.com/ukui/kylin-nm diff --git a/plugins/component/InfoButton/infobutton.cpp b/plugins/component/InfoButton/infobutton.cpp new file mode 100644 index 00000000..e434c0fb --- /dev/null +++ b/plugins/component/InfoButton/infobutton.cpp @@ -0,0 +1,105 @@ +#include "infobutton.h" +#include +#include +#include +#include + +#define BUTTON_SIZE 36,36 +#define ICON_SIZE 16,16 +#define BACKGROUND_COLOR QColor(0,0,0,0) +#define FOREGROUND_COLOR_NORMAL qApp->palette().text().color() +#define FOREGROUND_COLOR_HOVER QColor(55,144,250,255) +#define FOREGROUND_COLOR_PRESS QColor(36,109,212,255) +#define OUTER_PATH 8,8,16,16 +#define INNER_PATH 9,9,14,14 +#define TEXT_POS 14,5,16,16,0 + +#define BUTTON_SIZE 36,36 + +#define THEME_SCHAME "org.ukui.style" +#define COLOR_THEME "styleName" + +InfoButton::InfoButton(QWidget *parent) : QPushButton(parent) +{ + this->setFixedSize(BUTTON_SIZE); + initUI(); + const QByteArray style_id(THEME_SCHAME); + if (QGSettings::isSchemaInstalled(style_id)) { + m_styleGsettings = new QGSettings(style_id); + connect(m_styleGsettings, &QGSettings::changed, this, &InfoButton::onGSettingChaned); + } else { + qDebug() << "Gsettings interface \"org.ukui.style\" is not exist!"; + } +} + +void InfoButton::initUI() +{ + this->setFixedSize(BUTTON_SIZE); + m_backgroundColor = BACKGROUND_COLOR; + m_foregroundColor = FOREGROUND_COLOR_NORMAL; +} + +void InfoButton::onGSettingChaned(const QString &key) +{ + if (key == COLOR_THEME) { + m_foregroundColor = FOREGROUND_COLOR_NORMAL; + this->repaint(); + } +} + +void InfoButton::paintEvent(QPaintEvent *event) +{ + QPalette pal = this->palette(); + pal.setColor(QPalette::Base, m_backgroundColor); + pal.setColor(QPalette::Text, m_foregroundColor); + + QPainterPath cPath; + cPath.addRect(0, 0, ICON_SIZE); + cPath.addEllipse(0, 0, ICON_SIZE); + + QPainterPath outerPath; + outerPath.addEllipse(OUTER_PATH); + + QPainterPath innerPath; + innerPath.addEllipse(INNER_PATH); + outerPath -= innerPath; + + QPainter painter(this); + painter.setRenderHint(QPainter:: Antialiasing, true); //设置渲染,启动反锯齿 + painter.setPen(Qt::NoPen); + + painter.setBrush(pal.color(QPalette::Base)); + painter.drawPath(cPath); + + painter.fillPath(outerPath, pal.color(QPalette::Text)); + painter.setPen(m_foregroundColor); + QFont font("Noto Sans CJK SC", 11, QFont::Normal, false); + painter.setFont(font); + painter.drawText(TEXT_POS, "i"); +} + +void InfoButton::enterEvent(QEvent *event) +{ + m_foregroundColor = FOREGROUND_COLOR_HOVER; + this->repaint(); +} + +void InfoButton::leaveEvent(QEvent *event) +{ + m_foregroundColor = FOREGROUND_COLOR_NORMAL; + this->repaint(); +} + +void InfoButton::mousePressEvent(QMouseEvent *event) +{ + m_foregroundColor = FOREGROUND_COLOR_PRESS; + this->repaint(); + return QPushButton::mousePressEvent(event); +} + +void InfoButton::mouseReleaseEvent(QMouseEvent *event) +{ + m_foregroundColor = FOREGROUND_COLOR_HOVER; + this->repaint(); + return QPushButton::mouseReleaseEvent(event); +} diff --git a/plugins/component/InfoButton/infobutton.h b/plugins/component/InfoButton/infobutton.h new file mode 100644 index 00000000..6376b028 --- /dev/null +++ b/plugins/component/InfoButton/infobutton.h @@ -0,0 +1,35 @@ +#ifndef INFOBUTTON_H +#define INFOBUTTON_H +#include +#include +#include + +class InfoButton : public QPushButton +{ + Q_OBJECT +public: + explicit InfoButton(QWidget * parent = nullptr); + ~InfoButton() = default; + +protected: + void paintEvent(QPaintEvent *event); + void enterEvent(QEvent *event); + void leaveEvent(QEvent *event); + void mousePressEvent(QMouseEvent *event); + void mouseReleaseEvent(QMouseEvent *event); + +private: + void initUI(); + +private: + QColor m_backgroundColor; + QColor m_foregroundColor; + + //监听主题的Gsettings + QGSettings * m_styleGsettings = nullptr; + +private slots: + void onGSettingChaned(const QString &key); +}; + +#endif // INFOBUTTON_H diff --git a/plugins/component/infobutton.pri b/plugins/component/infobutton.pri new file mode 100644 index 00000000..5e84a760 --- /dev/null +++ b/plugins/component/infobutton.pri @@ -0,0 +1,9 @@ +#LIBINTERFACE_NAME = $$qtLibraryTarget(infobutton) + +SOURCES += \ + $$PWD/InfoButton/infobutton.cpp \ + +HEADERS += \ + $$PWD/InfoButton/infobutton.h \ + + diff --git a/plugins/netconnect/drownlabel.cpp b/plugins/netconnect/drownlabel.cpp index 2ef4b22a..196a3be9 100644 --- a/plugins/netconnect/drownlabel.cpp +++ b/plugins/netconnect/drownlabel.cpp @@ -22,9 +22,9 @@ void DrownLabel::setDropDownStatus(bool status) void DrownLabel::loadPixmap(bool isChecked) { if (isChecked) { - setPixmap(QIcon::fromTheme("ukui-up-symbolic", QIcon(":/img/plugins/netconnect/up.svg")).pixmap(ICONSIZE)); + setPixmap(QIcon::fromTheme("ukui-up-symbolic").pixmap(ICONSIZE)); } else { - setPixmap(QIcon::fromTheme("ukui-down-symbolic", QIcon(":/img/plugins/netconnect/down.svg")).pixmap(ICONSIZE)); + setPixmap(QIcon::fromTheme("ukui-down-symbolic").pixmap(ICONSIZE)); } } diff --git a/plugins/netconnect/lanitem.h b/plugins/netconnect/lanitem.h index d81f2255..460612cc 100644 --- a/plugins/netconnect/lanitem.h +++ b/plugins/netconnect/lanitem.h @@ -10,7 +10,7 @@ #include #include #include "fixlabel.h" -#include "infobutton.h" +#include "../component/InfoButton/infobutton.h" class LanItem : public QPushButton { diff --git a/plugins/netconnect/netconnect.cpp b/plugins/netconnect/netconnect.cpp index 18d0b702..75d75ac4 100644 --- a/plugins/netconnect/netconnect.cpp +++ b/plugins/netconnect/netconnect.cpp @@ -170,7 +170,6 @@ void NetConnect::initComponent() { wiredSwitch->blockSignals(true); wiredSwitch->setChecked(true); wiredSwitch->blockSignals(false); - initNet(); qDebug()<<"[Netconnect] org.ukui.kylin-nm.switch is not installed!"; } @@ -182,7 +181,7 @@ void NetConnect::initComponent() { } initNet(); - if (deviceStatusMap.isEmpty() || !m_interface->isValid()) { + if (!wiredSwitch->isChecked() || deviceStatusMap.isEmpty() || !m_interface->isValid()) { hideLayout(ui->availableLayout); } @@ -313,9 +312,7 @@ void NetConnect::initNet() } //再填充每个设备的列表 for (int i = 0; i < deviceList.size(); ++i) { - if (deviceStatusMap[deviceList.at(i)]) { - initNetListFromDevice(deviceList.at(i)); - } + initNetListFromDevice(deviceList.at(i)); } } @@ -343,10 +340,6 @@ void NetConnect::deActiveConnect(QString ssid, QString deviceName, int type) { void NetConnect::initNetListFromDevice(QString deviceName) { qDebug() << "[NetConnect]initNetListFromDevice " << deviceName; - if (!wiredSwitch->isChecked()) { - qDebug() << "[NetConnect]initNetListFromDevice " << deviceName << " switch off"; - return; - } if (!deviceFrameMap.contains(deviceName)) { qDebug() << "[NetConnect]initNetListFromDevice " << deviceName << " not exist"; return; @@ -468,8 +461,11 @@ void NetConnect::addDeviceFrame(QString devName) itemFrame->deviceFrame->deviceSwitch->setChecked(enable); if (enable) { itemFrame->lanItemFrame->show(); + itemFrame->deviceFrame->dropDownLabel->show(); } else { itemFrame->lanItemFrame->hide(); + itemFrame->deviceFrame->dropDownLabel->hide(); + itemFrame->deviceFrame->dropDownLabel->setDropDownStatus(false); } deviceFrameMap.insert(devName, itemFrame); qDebug() << "[NetConnect]deviceFrameMap insert" << devName; @@ -481,20 +477,13 @@ void NetConnect::addDeviceFrame(QString devName) if (checked) { qDebug() << "[NetConnect]set " << devName << "status" << true; itemFrame->lanItemFrame->show(); - initNetListFromDevice(devName); + itemFrame->deviceFrame->dropDownLabel->show(); + itemFrame->deviceFrame->dropDownLabel->setDropDownStatus(true); deviceStatusMap[devName] = true; } else { qDebug() << "[NetConnect]set " << devName << "status" << false; - if (itemFrame->lanItemFrame->layout() != NULL) { - QLayoutItem* item; - while ((item = itemFrame->lanItemFrame->layout()->takeAt(0)) != NULL) { - delete item->widget(); - delete item; - item = nullptr; - } - itemFrame->itemMap.clear(); - } - + itemFrame->lanItemFrame->hide(); + itemFrame->deviceFrame->dropDownLabel->hide(); deviceStatusMap[devName] = false; } }); @@ -514,6 +503,15 @@ void NetConnect::removeDeviceFrame(QString devName) qDebug() << "[NetConnect]removeDeviceFrame " << devName; if (deviceFrameMap.contains(devName)) { ItemFrame *item = deviceFrameMap[devName]; + if (item->lanItemFrame->layout() != NULL) { + QLayoutItem* layoutItem; + while ((layoutItem = item->lanItemFrame->layout()->takeAt(0)) != NULL) { + delete layoutItem->widget(); + delete layoutItem; + layoutItem = nullptr; + } + item->itemMap.clear(); + } delete item; item = nullptr; deviceFrameMap.remove(devName); @@ -560,9 +558,7 @@ void NetConnect::onDeviceStatusChanged() for (int i = 0; i < addList.size(); ++i) { qDebug() << "add a device " << addList.at(i) << "status" << map[addList.at(i)]; addDeviceFrame(addList.at(i)); - if (map[addList.at(i)]) { - initNetListFromDevice(addList.at(i)); - } + initNetListFromDevice(addList.at(i)); } deviceStatusMap = map; if (deviceStatusMap.isEmpty()) { @@ -606,9 +602,6 @@ void NetConnect::onDeviceNameChanged(QString oldName, QString newName, int type) void NetConnect::onLanAdd(QString deviceName, QStringList lanInfo) { qDebug()<<"[NetConnect]onLanAdd "<< deviceName << " " << lanInfo; - if(!wiredSwitch->isChecked()) { - return; - } if (!deviceName.isEmpty() && !deviceStatusMap.contains(deviceName)) { return; @@ -737,10 +730,6 @@ void NetConnect::removeOneLanFrame(ItemFrame *frame, QString deviceName, QString //activeconnect status change void NetConnect::onActiveConnectionChanged(QString deviceName, QString uuid, int status) { - if (!wiredSwitch->isChecked()) { - qDebug() << "[NetConnect]onActiveConnectionChanged but wiredSwitch is off"; - return; - } if (uuid.isEmpty()) { qDebug() << "[NetConnect]onActiveConnectionChanged but uuid is empty"; return; @@ -848,6 +837,10 @@ int NetConnect::getInsertPos(QString connName, QString deviceName) auto dbusArg = result.arguments().at(0).value(); QMap> variantList; dbusArg >> variantList; + if (!variantList.contains(deviceName)) { + qDebug() << "[NetConnect] getInsertPos but " << deviceName << "not exist"; + return 0; + } for (int i = 0; i < variantList[deviceName].size(); ++i ) { if (variantList[deviceName].at(i).at(0) == connName) { qDebug() << "pos in kylin-nm is " << i; diff --git a/plugins/netconnect/netconnect.pro b/plugins/netconnect/netconnect.pro index b17f92e4..830854a0 100644 --- a/plugins/netconnect/netconnect.pro +++ b/plugins/netconnect/netconnect.pro @@ -3,6 +3,7 @@ TEMPLATE = lib CONFIG += plugin include(../component/switchbutton.pri) +include(../component/infobutton.pri) TARGET = $$qtLibraryTarget(netconnect) DESTDIR = ../.. diff --git a/plugins/wlanconnect/drownlabel.cpp b/plugins/wlanconnect/drownlabel.cpp index 80a1a0aa..dac4364d 100644 --- a/plugins/wlanconnect/drownlabel.cpp +++ b/plugins/wlanconnect/drownlabel.cpp @@ -26,12 +26,12 @@ void DrownLabel::loadPixmap(bool isChecked) if (QIcon::fromTheme("ukui-up-symbolic").isNull()) { qDebug() << "ukui-up-symbolic is missing"; } - setPixmap(QIcon::fromTheme("ukui-up-symbolic", QIcon(":/img/plugins/netconnect/up.svg")).pixmap(ICONSIZE)); + setPixmap(QIcon::fromTheme("ukui-up-symbolic").pixmap(ICONSIZE)); } else { if (QIcon::fromTheme("ukui-down-symbolic").isNull()) { qDebug() << "ukui-down-symbolic is missing"; } - setPixmap(QIcon::fromTheme("ukui-down-symbolic", QIcon(":/img/plugins/netconnect/down.svg")).pixmap(ICONSIZE)); + setPixmap(QIcon::fromTheme("ukui-down-symbolic").pixmap(ICONSIZE)); } } diff --git a/plugins/wlanconnect/wlanconnect.cpp b/plugins/wlanconnect/wlanconnect.cpp index a64c2cc0..33081797 100644 --- a/plugins/wlanconnect/wlanconnect.cpp +++ b/plugins/wlanconnect/wlanconnect.cpp @@ -214,6 +214,7 @@ void WlanConnect::initComponent() { //网卡name处理 connect(m_interface, SIGNAL(deviceNameChanged(QString, QString, int)), this, SLOT(onDeviceNameChanged(QString, QString, int)), Qt::QueuedConnection); + connect(m_interface, SIGNAL(timeToUpdate()), this, SLOT(updateList()), Qt::QueuedConnection); //高级设置 connect(ui->detailBtn, &QPushButton::clicked, this, [=](bool checked) { Q_UNUSED(checked) @@ -226,9 +227,9 @@ void WlanConnect::initComponent() { connect(m_scanTimer, &QTimer::timeout, this, &WlanConnect::reScan, Qt::QueuedConnection); reScan(); - m_updateTimer = new QTimer(this); - m_updateTimer->start(UPDATETIMER); - connect(m_scanTimer, &QTimer::timeout, this, &WlanConnect::updateList, Qt::QueuedConnection); +// m_updateTimer = new QTimer(this); +// m_updateTimer->start(UPDATETIMER); + } void WlanConnect::reScan() @@ -241,7 +242,7 @@ void WlanConnect::reScan() } } -//定时5秒更新列表顺序 +//更新列表顺序 void WlanConnect::updateList() { if (!wifiSwtch->isChecked()) { @@ -300,6 +301,19 @@ void WlanConnect::resortWifiList(ItemFrame *frame, QVector list) } } else { qDebug() << " no active connection when resort"; + if (!frame->uuid.isEmpty()) { + QMap::iterator itemIter; + for (itemIter = frame->itemMap.begin(); itemIter != frame->itemMap.end(); itemIter++) { + if (itemIter.value()->uuid == frame->uuid ) { + WlanItem * item= nullptr; + item = itemIter.value(); + qDebug() << "a active connect missing when resort"; + itemIter.value()->uuid.clear(); + itemActiveConnectionStatusChanged(item, DEACTIVATED); + break; + } + } + } frame->uuid.clear(); } @@ -469,7 +483,7 @@ void WlanConnect::onActiveConnectionChanged(QString deviceName, QString ssid, QS } WlanItem * item= nullptr; //device ssid 有可能均为空 - if (deviceName.isEmpty() && ssid.isEmpty()) { + if (deviceName.isEmpty() || ssid.isEmpty()) { if (status == ACTIVATING || status == ACTIVATED) { return; } @@ -490,9 +504,6 @@ void WlanConnect::onActiveConnectionChanged(QString deviceName, QString ssid, QS } } } else { - if (deviceName.isEmpty() || ssid.isEmpty()) { - return; - } if (!deviceFrameMap.contains(deviceName)) { return; } @@ -834,6 +845,15 @@ void WlanConnect::removeDeviceFrame(QString devName) qDebug() << "[WlanConnect]removeDeviceFrame " << devName; if (deviceFrameMap.contains(devName)) { ItemFrame *item = deviceFrameMap[devName]; + if (item->lanItemFrame->layout() != NULL) { + QLayoutItem* layoutItem; + while ((layoutItem = item->lanItemFrame->layout()->takeAt(0)) != NULL) { + delete layoutItem->widget(); + delete layoutItem; + item = nullptr; + } + item->itemMap.clear(); + } delete item; item = nullptr; deviceFrameMap.remove(devName); diff --git a/plugins/wlanconnect/wlanconnect.h b/plugins/wlanconnect/wlanconnect.h index a9acacdc..5aa0f41a 100644 --- a/plugins/wlanconnect/wlanconnect.h +++ b/plugins/wlanconnect/wlanconnect.h @@ -141,7 +141,7 @@ private: // DeviceWlanlistInfo deviceWlanlistInfo; QTimer * m_scanTimer = nullptr; - QTimer * m_updateTimer = nullptr; +// QTimer * m_updateTimer = nullptr; private: SwitchButton *wifiSwtch; bool mFirstLoad; diff --git a/plugins/wlanconnect/wlanconnect.pro b/plugins/wlanconnect/wlanconnect.pro index f3155a6e..e9ef921e 100644 --- a/plugins/wlanconnect/wlanconnect.pro +++ b/plugins/wlanconnect/wlanconnect.pro @@ -3,6 +3,7 @@ TEMPLATE = lib CONFIG += plugin include(../component/switchbutton.pri) +include(../component/infobutton.pri) TARGET = $$qtLibraryTarget(wlanconnect) DESTDIR = ../.. diff --git a/plugins/wlanconnect/wlanitem.h b/plugins/wlanconnect/wlanitem.h index 974e22a0..3dbdc2d9 100644 --- a/plugins/wlanconnect/wlanitem.h +++ b/plugins/wlanconnect/wlanitem.h @@ -10,7 +10,7 @@ #include #include #include "fixlabel.h" -#include "infobutton.h" +#include "../component/InfoButton/infobutton.h" class WlanItem : public QPushButton { diff --git a/src/backend/dbusadaptor.h b/src/backend/dbusadaptor.h index 57f2c180..613aecfa 100644 --- a/src/backend/dbusadaptor.h +++ b/src/backend/dbusadaptor.h @@ -108,6 +108,8 @@ Q_SIGNALS: // SIGNALS void signalStrengthChange(QString devName, QString ssid, int strength); //安全性变化 void secuTypeChange(QString devName, QString ssid, QString secuType); + //列表排序 + void timeToUpdate(); }; #endif diff --git a/src/frontend/mainwindow.cpp b/src/frontend/mainwindow.cpp index 433124a9..eb6e5222 100644 --- a/src/frontend/mainwindow.cpp +++ b/src/frontend/mainwindow.cpp @@ -17,6 +17,9 @@ #define THEME_SCHAME "org.ukui.style" #define COLOR_THEME "styleName" +#define LAN_PAGE_INDEX 0 +#define WLAN_PAGE_INDEX 1 + #include #include @@ -216,6 +219,8 @@ void MainWindow::initDbusConnnect() connect(m_wlanWidget, &WlanPage::hotspotActivated, this, &MainWindow::hotspotActivated); connect(m_wlanWidget, &WlanPage::secuTypeChange, this, &MainWindow::secuTypeChange); connect(m_wlanWidget, &WlanPage::signalStrengthChange, this, &MainWindow::signalStrengthChange); + connect(m_wlanWidget, &WlanPage::timeToUpdate , this, &MainWindow::timeToUpdate); + connect(m_wlanWidget, &WlanPage::showMainWindow, this, &MainWindow::onShowByWlanPage); } /** @@ -339,9 +344,9 @@ void MainWindow::showControlCenter() { QProcess process; if (!m_lanWidget->lanIsConnected() && m_wlanWidget->wlanIsConnected()){ - process.startDetached("ukui-control-center --wlanconnect"); + process.startDetached("ukui-control-center -m wlanconnect"); } else { - process.startDetached("ukui-control-center --wiredconnect"); + process.startDetached("ukui-control-center -m netconnect"); } } @@ -422,6 +427,19 @@ void MainWindow::onWlanConnectStatusToChangeTrayIcon(int state) } } +void MainWindow::onShowByWlanPage() +{ + m_centralWidget->setCurrentIndex(WLAN_PAGE_INDEX); + + if(QApplication::activeWindow() != this) { + this->resetWindowPosition(); + this->showNormal(); + this->raise(); + this->activateWindow(); + emit this->mainWindowVisibleChanged(true); + } +} + /** * @brief MainWindow::keyPressEvent 按esc键关闭主界面 * @param event diff --git a/src/frontend/mainwindow.h b/src/frontend/mainwindow.h index edc19079..ea651dfa 100644 --- a/src/frontend/mainwindow.h +++ b/src/frontend/mainwindow.h @@ -79,6 +79,8 @@ signals: //安全性变化 void secuTypeChange(QString devName, QString ssid, QString secuType); void mainWindowVisibleChanged(const bool &visible); + //列表排序 + void timeToUpdate(); public slots: protected: @@ -133,6 +135,7 @@ private slots: void onSetTrayIconLoading(); void onLanConnectStatusToChangeTrayIcon(int state); void onWlanConnectStatusToChangeTrayIcon(int state); + void onShowByWlanPage(); }; #endif // MAINWINDOW_H diff --git a/src/frontend/tab-pages/lanpage.cpp b/src/frontend/tab-pages/lanpage.cpp index 846b2800..e19897ab 100644 --- a/src/frontend/tab-pages/lanpage.cpp +++ b/src/frontend/tab-pages/lanpage.cpp @@ -1103,7 +1103,12 @@ bool LanPage::eventFilter(QObject *watched, QEvent *event) void LanPage::activateWired(const QString& devName, const QString& connUuid) { qDebug() << "[LanPage] activateWired" << devName << connUuid; - m_wiredConnectOperation->activateConnection(connUuid, devName); + if (!m_deviceResource->wiredDeviceCarriered(devName)) { + qDebug() << LOG_FLAG << devName << "is not carried, so can not activate connection"; + this->showDesktopNotify(tr("Wired Device not carried")); + } else { + m_wiredConnectOperation->activateConnection(connUuid, devName); + } } void LanPage::deactivateWired(const QString& devName, const QString& connUuid) diff --git a/src/frontend/tab-pages/wlanpage.cpp b/src/frontend/tab-pages/wlanpage.cpp index 6151a26f..989ff3df 100644 --- a/src/frontend/tab-pages/wlanpage.cpp +++ b/src/frontend/tab-pages/wlanpage.cpp @@ -170,6 +170,7 @@ void WlanPage::initTimer() m_refreshIconTimer = new QTimer(this); connect(m_refreshIconTimer, &QTimer::timeout, this, &WlanPage::onRefreshIconTimer); + m_refreshIconTimer->start(ICON_REFRESH_INTERVAL); } /** @@ -227,7 +228,7 @@ void WlanPage::initDeviceCombox() } connect(m_deviceComboBox, QOverload::of(&QComboBox::currentIndexChanged), - this, &WlanPage::onDeviceComboxIndexChanged); + this, &WlanPage::onDeviceComboxIndexChanged, Qt::DirectConnection); return; } @@ -927,6 +928,7 @@ void WlanPage::onItemHeightChanged(const bool isExpanded, const QString &ssid) void WlanPage::onDeviceComboxIndexChanged(int currentIndex) { + qDebug() << "onDeviceComboxIndexChanged"; if (!m_deviceComboBox || currentIndex < 0) { return; } @@ -993,7 +995,14 @@ void WlanPage::onWifiEnabledChanged(bool isWifiOn) } void WlanPage::onRefreshIconTimer() -{ +{ + emit timeToUpdate(); + + if(!this->isVisible()) { + return; + } + qDebug() << "onRefreshIconTimer"; + if (m_expandedItem) { qDebug()<< LOG_FLAG << "Has expanded item and forbid refresh wifi strength" << Q_FUNC_INFO << __LINE__; return; @@ -1180,31 +1189,31 @@ void WlanPage::activateWirelessConnection(const QString& devName, const QString& return; } - if (wirelessNetItem.m_isConfigured) { - m_wirelessConnectOpreation->activeWirelessConnect(devName, wirelessNetItem.m_connectUuid); - } else { - //todo: 显示界面输入密码 (无需密码的wifi?) -# if 0 - if (devName != m_currentDevice) { - //todo + if (devName != m_currentDevice) { + int index = m_deviceComboBox->findText(devName); + if (index >= 0) { + m_deviceComboBox->setCurrentIndex(index); } else { - QListWidgetItem *p_listWidgetItem = nullptr; - WlanListItem *p_wlanItem = nullptr; - - if (m_wirelessNetItemMap.contains(ssid)) { - p_listWidgetItem = m_wirelessNetItemMap.value(ssid); - p_wlanItem = (WlanListItem*)m_inactivatedNetListWidget->itemWidget(p_listWidgetItem); - int row = m_inactivatedNetListWidget->row(p_listWidgetItem); - - // m_inactivatedNetListArea->scrollToItem(p_listWidgetItem, QAbstractItemView::EnsureVisible); - m_inactivatedNetListArea->verticalScrollBar()->setValue((p_listWidgetItem->sizeHint().height()*(row+1)/m_inactivatedNetListWidget->height())*m_inactivatedNetListArea->verticalScrollBar()->maximumHeight()); - - bool a = true; - p_wlanItem->setExpanded(a); - emit showMainWindow(); - } + qDebug() << "[WlanPage]activateWirelessConnection no such " << devName; + return; } -#endif + } + + QListWidgetItem *p_listWidgetItem = nullptr; + WlanListItem *p_wlanItem = nullptr; + + if (m_wirelessNetItemMap.contains(ssid)) { + p_listWidgetItem = m_wirelessNetItemMap.value(ssid); + p_wlanItem = (WlanListItem*)m_inactivatedNetListWidget->itemWidget(p_listWidgetItem); + + m_inactivatedNetListWidget->scrollToItem(p_listWidgetItem, QAbstractItemView::EnsureVisible); + + + QMouseEvent *event = new QMouseEvent(QEvent::MouseButtonPress, QPoint(0,0), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); + QApplication::postEvent(p_wlanItem, event); + emit showMainWindow(); + } else { + qDebug() << "[WlanPage]activateWirelessConnection no such " << ssid << "in" << devName; } return; } @@ -1236,11 +1245,11 @@ void WlanPage::onMainWindowVisibleChanged(const bool &visible) //打开页面时先触发一次扫描,然后定时扫描wifi热点和刷新icon requestScan(); m_scanTimer->start(AP_SCAN_INTERVAL); - m_refreshIconTimer->start(ICON_REFRESH_INTERVAL); +// m_refreshIconTimer->start(ICON_REFRESH_INTERVAL); } else { //界面关闭的时候,停止wifi扫描和刷新 m_scanTimer->stop(); - m_refreshIconTimer->stop(); +// m_refreshIconTimer->stop(); } return; diff --git a/src/frontend/tab-pages/wlanpage.h b/src/frontend/tab-pages/wlanpage.h index 2d273837..7784d224 100644 --- a/src/frontend/tab-pages/wlanpage.h +++ b/src/frontend/tab-pages/wlanpage.h @@ -60,6 +60,9 @@ signals: void secuTypeChange(QString devName, QString ssid, QString secuType); void hiddenWlanClicked(); void wlanConnectChanged(int state); + void timeToUpdate(); + + void showMainWindow(); public slots: void onMainWindowVisibleChanged(const bool &visible);