qt/LedOK/device/ctrlnetworkpanel.cpp

1040 lines
43 KiB
C++
Raw Normal View History

2023-04-18 14:14:46 +08:00
#include "ctrlnetworkpanel.h"
#include "base/waitingdlg.h"
#include "globaldefine.h"
#include "tools.h"
#include "gutil/qgui.h"
2023-04-23 17:01:35 +08:00
#include "gutil/qnetwork.h"
2023-04-18 14:14:46 +08:00
#include <QJsonArray>
#include <QMessageBox>
#include <QStackedLayout>
#include <QGridLayout>
CtrlNetworkPanel::CtrlNetworkPanel(QWidget *parent) : QWidget(parent) {
auto vBox = new VBox(this);
lbLanCfg = new QLabel;
2023-04-27 15:06:24 +08:00
auto ftTitle = lbLanCfg->font();
ftTitle.setPixelSize(16);
lbLanCfg->setFont(ftTitle);
2023-04-18 14:14:46 +08:00
lbLanCfg->setAlignment(Qt::AlignCenter);
vBox->addWidget(lbLanCfg);
auto hBox = new HBox(vBox);
hBox->addStretch();
fdDhcp = new QRadioButton;
fdDhcp->setChecked(true);
hBox->addWidget(fdDhcp, 0, Qt::AlignTop);
hBox->addSpacing(30);
auto vBoxSpecifyIp = new VBox(hBox);
vBoxSpecifyIp->setContentsMargins(0, 0, 0, 0);
fdSpecifyIp = new QRadioButton;
vBoxSpecifyIp->addWidget(fdSpecifyIp, 0, Qt::AlignCenter);
auto grp = new QButtonGroup(this);
grp->addButton(fdDhcp);
grp->addButton(fdSpecifyIp);
gBoxSpecifyIp = new QGroupBox;
gBoxSpecifyIp->setMaximumWidth(340);
gBoxSpecifyIp->setVisible(false);
connect(fdSpecifyIp, &QRadioButton::toggled, gBoxSpecifyIp, &QWidget::setVisible);
{
auto vvv = new VBox(gBoxSpecifyIp);
auto hhh = new HBox(vvv);
2023-04-19 14:42:06 +08:00
hhh->addWidget(labelIpAddress = new QLabel);
2023-04-18 14:14:46 +08:00
2023-04-19 14:42:06 +08:00
fdIP = new QLineEdit;
2023-05-05 17:22:54 +08:00
auto ft = fdIP->font();
ft.setFamilies({"Monaco", "Consolas", "Mono-space"});
fdIP->setFont(ft);
fdIP->setInputMask("000.000.000.000");
2023-04-23 14:30:16 +08:00
fdIP->setAlignment(Qt::AlignCenter);
2023-04-18 14:14:46 +08:00
fdIP->setFixedWidth(160);
hhh->addWidget(fdIP);
hhh = new HBox(vvv);
2023-04-19 14:42:06 +08:00
hhh->addWidget(labelMaskAddress = new QLabel);
2023-04-18 14:14:46 +08:00
2023-04-19 14:42:06 +08:00
fdMask = new QLineEdit;
2023-05-05 17:22:54 +08:00
fdMask->setFont(ft);
fdMask->setInputMask("000.000.000.000");
2023-04-23 14:30:16 +08:00
fdMask->setAlignment(Qt::AlignCenter);
2023-04-18 14:14:46 +08:00
fdMask->setFixedWidth(160);
hhh->addWidget(fdMask);
hhh = new HBox(vvv);
2023-04-19 14:42:06 +08:00
hhh->addWidget(labelGateway = new QLabel);
2023-04-18 14:14:46 +08:00
2023-04-19 14:42:06 +08:00
fdGateWay = new QLineEdit;
2023-05-05 17:22:54 +08:00
fdGateWay->setFont(ft);
fdGateWay->setInputMask("000.000.000.000");
2023-04-23 14:30:16 +08:00
fdGateWay->setAlignment(Qt::AlignCenter);
2023-04-18 14:14:46 +08:00
fdGateWay->setFixedWidth(160);
hhh->addWidget(fdGateWay);
hhh = new HBox(vvv);
2023-04-19 14:42:06 +08:00
hhh->addWidget(labelDnsAddress = new QLabel);
2023-04-18 14:14:46 +08:00
2023-04-19 14:42:06 +08:00
fdDns = new QLineEdit;
2023-05-05 17:22:54 +08:00
fdDns->setFont(ft);
fdDns->setInputMask("000.000.000.000");
2023-04-23 14:30:16 +08:00
fdDns->setAlignment(Qt::AlignCenter);
2023-04-18 14:14:46 +08:00
fdDns->setFixedWidth(160);
hhh->addWidget(fdDns);
}
vBoxSpecifyIp->addWidget(gBoxSpecifyIp);
hBox->addStretch();
hBox = new HBox(vBox);
hBox->addStretch();
btnLanSet = new QPushButton;
btnLanSet->setMinimumSize(QSize(60, 30));
btnLanSet->setProperty("ssType", "progManageTool");
connect(btnLanSet, &QPushButton::clicked, this, [this] {
if(gSelCards->isEmpty()) {
QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController"));
return;
}
2023-04-23 14:30:16 +08:00
QString ip = fdIP->text();
QString mask = fdMask->text();
QString gateWay = fdGateWay->text();
QString dns = fdDns->text();
2023-04-18 14:14:46 +08:00
if(fdDhcp->isChecked()) {
2023-04-23 14:30:16 +08:00
if(ip=="...") ip = "0.255.255.255";
if(mask=="...") mask = "0.255.255.255";
if(gateWay=="...") gateWay = "0.255.255.255";
if(dns=="...") dns = "0.255.255.255";
2023-04-18 14:14:46 +08:00
} else {
2023-04-23 14:30:16 +08:00
if(ip=="...") {
2023-04-18 14:14:46 +08:00
QMessageBox::warning(gMainWin, tr("Attention"), tr("Please input IP address!"));
fdIP->setFocus();
return;
}
2023-04-23 14:30:16 +08:00
if(mask=="...") {
2023-04-18 14:14:46 +08:00
QMessageBox::warning(gMainWin, tr("Attention"), tr("Please input Mask address!"));
fdMask->setFocus();
return;
}
2023-04-23 14:30:16 +08:00
if(gateWay=="...") {
2023-04-18 14:14:46 +08:00
QMessageBox::warning(gMainWin, tr("Attention"), tr("Please input Gateway address!"));
fdGateWay->setFocus();
return;
}
2023-04-23 14:30:16 +08:00
if(dns=="...") {
2023-04-18 14:14:46 +08:00
QMessageBox::warning(gMainWin, tr("Attention"), tr("Please input DNS address!"));
fdDns->setFocus();
return;
}
}
QJsonObject json;
json.insert("_id", "SetEthernet");
json.insert("_type", "SetEthernet");
json.insert("dhcp", fdDhcp->isChecked());
json.insert("ip", ip);
json.insert("netMask", mask);
json.insert("gateWay", gateWay);
json.insert("dns", dns);
if(gSelCards->count() == 1) {
auto waitingDlg = new WaitingDlg(this, tr("SetEthernet"));
Def_CtrlReqPre
connect(reply, &QNetworkReply::finished, this, [reply, waitingDlg] {
Def_CtrlSetReqAfter
});
} else {
foreach(auto card, *gSelCards) {
Def_CtrlSetMulti(tr("SetEthernet"))
}
}
});
hBox->addWidget(btnLanSet);
hBox->addSpacing(50);
btnLanGet = new QPushButton;
btnLanGet->setMinimumSize(QSize(60, 30));
btnLanGet->setProperty("ssType", "progManageTool");
connect(btnLanGet, &QPushButton::clicked, this, [this] {
if(gSelCards->isEmpty()) {
QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController"));
return;
}
QJsonObject json;
json.insert("_id", "GetEthernet");
json.insert("_type", "GetEthernet");
if(gSelCards->count() == 1) {
auto waitingDlg = new WaitingDlg(this, tr("GetEthernet"));
Def_CtrlReqPre
connect(reply, &QNetworkReply::finished, this, [this, reply, waitingDlg] {
Def_CtrlSingleGetReply
waitingDlg->success();
if(json["dhcp"].toBool()) {
fdDhcp->setChecked(true);
gBoxSpecifyIp->setVisible(false);
} else {
fdSpecifyIp->setChecked(true);
gBoxSpecifyIp->setVisible(true);
}
fdIP->setText(json["ipAddr"].toString());
fdMask->setText(json["netMask"].toString());
fdGateWay->setText(json["gateWay"].toString());
fdDns->setText(json["dnsAddr"].toString());
});
} else {
foreach(auto card, *gSelCards) {
2023-04-23 17:01:35 +08:00
auto reply = NetReq("http://"+card->m_strCardIp+":2016/settings").timeout(120000).post(json);
2023-04-18 14:14:46 +08:00
auto cardId = card->m_strCardId;
connect(reply, &QNetworkReply::finished, this, [reply, cardId] {
QJsonDocument json;
QString err = checkReplyForJson(reply, &json);
if(err.isEmpty()) err = json["dhcp"].toBool() ? tr("DHCP IP") : tr("STATIC IP");
gFdResInfo->append(cardId+" "+tr("GetEthernet")+" "+err);
gFdResInfo->append(" IP: "+json["ipAddr"].toString());
gFdResInfo->append(" Mask: "+json["netMask"].toString());
gFdResInfo->append(" GateWay: "+json["gateWay"].toString());
gFdResInfo->append(" Dns: "+json["dnsAddr"].toString());
});
}
}
});
hBox->addWidget(btnLanGet);
hBox->addStretch();
auto line = new QFrame;
line->setFrameShape(QFrame::HLine);
line->setFrameShadow(QFrame::Sunken);
vBox->addWidget(line);
label_5 = new QLabel;
2023-04-27 15:06:24 +08:00
label_5->setFont(ftTitle);
2023-04-18 14:14:46 +08:00
label_5->setAlignment(Qt::AlignCenter);
vBox->addWidget(label_5);
hBox = new HBox(vBox);
hBox->addStretch();
auto stackedWifi = new QStackedLayout;
fdIsWifi = new QRadioButton;
connect(fdIsWifi, &QRadioButton::toggled, this, [stackedWifi](bool checked) {
stackedWifi->setCurrentIndex(checked ? 0 : 1);
});
hBox->addWidget(fdIsWifi);
hBox->addSpacing(50);
fdIsHotspot = new QRadioButton;
hBox->addWidget(fdIsHotspot);
hBox->addStretch();
vBox->addLayout(stackedWifi);
{
auto vvv = new VBox(stackedWifi);
hBox = new HBox(vvv);
lbWifiName = new QLabel;
lbWifiName->setMinimumWidth(80);
hBox->addWidget(lbWifiName);
fdWifiName = new QComboBox;
fdWifiName->setEditable(true);
fdWifiName->setMinimumWidth(200);
fdWifiName->setSizeAdjustPolicy(QComboBox::AdjustToContents);
hBox->addWidget(fdWifiName);
btnScan = new QPushButton;
btnScan->setMinimumWidth(60);
btnScan->setProperty("ssType", "progManageTool");
connect(btnScan, &QPushButton::clicked, this, [this] {
if(gSelCards->isEmpty()) {
QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController"));
return;
}
QJsonObject json;
json.insert("_id", "GetWifiList");
json.insert("_type", "GetWifiList");
if(gSelCards->count() == 1) {
auto waitingDlg = new WaitingDlg(this, tr("GetWifiList")+" ...");
Def_CtrlReqPre
connect(reply, &QNetworkReply::finished, this, [this, reply, waitingDlg] {
Def_CtrlSingleGetReply
waitingDlg->success();
auto wifis = json["wifiList"].toArray();
auto cur = fdWifiName->currentText();
fdWifiName->clear();
2023-04-19 14:42:06 +08:00
foreach(QJsonValue wifi, wifis) fdWifiName->addItem(QIcon(":/res/signal-"+QString::number((wifi["signal"].toInt()+19)/20)+".png"), wifi["ssid"].toString());
2023-04-18 14:14:46 +08:00
if(! cur.isEmpty()) fdWifiName->setCurrentText(cur);
});
}
});
hBox->addWidget(btnScan);
hBox->addStretch();
hBox = new HBox(vvv);
lbWifiPassword = new QLabel;
lbWifiPassword->setMinimumWidth(80);
hBox->addWidget(lbWifiPassword);
fdWifiPassword = new QLineEdit;
fdWifiPassword->setFixedWidth(200);
fdWifiPassword->setEchoMode(QLineEdit::PasswordEchoOnEdit);
hBox->addWidget(fdWifiPassword);
hBox->addStretch();
vvv->addStretch();
vvv = new VBox(stackedWifi);
hBox = new HBox(vvv);
lbHotspotName = new QLabel;
lbHotspotName->setMinimumWidth(80);
hBox->addWidget(lbHotspotName);
fdHotspotName = new QLineEdit;
fdHotspotName->setFixedWidth(200);
hBox->addWidget(fdHotspotName);
hBox->addStretch();
hBox = new HBox(vvv);
lbHotspotPassword = new QLabel;
lbHotspotPassword->setMinimumWidth(80);
hBox->addWidget(lbHotspotPassword);
fdHotspotPassword = new QLineEdit;
fdHotspotPassword->setEchoMode(QLineEdit::PasswordEchoOnEdit);
fdHotspotPassword->setFixedWidth(200);
hBox->addWidget(fdHotspotPassword);
hBox->addStretch();
vvv->addStretch();
}
fdIsWifi->setChecked(true);
hBox = new HBox(vBox);
hBox->addStretch();
btnWiFiSet = new QPushButton;
btnWiFiSet->setMinimumSize(QSize(60, 30));
btnWiFiSet->setProperty("ssType", "progManageTool");
connect(btnWiFiSet, &QPushButton::clicked, this, [this] {
if(gSelCards->isEmpty()) {
QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController"));
return;
}
2023-04-23 17:01:35 +08:00
auto isWifi = fdIsWifi->isChecked();
if(isWifi) {
2023-04-25 16:30:58 +08:00
QJsonObject json;
json.insert("_id", "SetSwitchWiFi");
json.insert("_type", "SetSwitchWiFi");
json.insert("enable", true);
QJsonObject json2;
2023-04-23 17:01:35 +08:00
json2.insert("_id", "ConfigurationWiFi");
json2.insert("_type", "ConfigurationWiFi");
json2.insert("ssid", fdWifiName->currentText());
json2.insert("password", fdWifiPassword->text());
2023-04-25 16:30:58 +08:00
if(gSelCards->count() == 1) {
auto waitingDlg = new WaitingDlg(this, tr("ConfigurationWiFi")+" ...");
Def_CtrlReqPre
2023-04-23 17:01:35 +08:00
connect(reply, &QNetworkReply::finished, card, [=] {
QString err = checkReplyForJson(reply);
if(! err.isEmpty()) {
2023-04-25 16:30:58 +08:00
waitingDlg->close();
QMessageBox::critical(gMainWin, tr("Error"), err);
2023-04-23 17:01:35 +08:00
return;
}
auto reply = NetReq("http://"+card->m_strCardIp+":2016/settings").timeout(120000).post(json2);
2023-04-25 16:30:58 +08:00
waitingDlg->connAbort(reply);
connect(reply, &QNetworkReply::finished, card, [reply, waitingDlg] {
Def_CtrlSetReqAfter
});
});
} else {
foreach(auto card, *gSelCards) {
auto reply = NetReq("http://"+card->m_strCardIp+":2016/settings").timeout(120000).post(json);
2023-04-23 17:01:35 +08:00
connect(reply, &QNetworkReply::finished, card, [=] {
QString err = checkReplyForJson(reply);
2023-04-25 16:30:58 +08:00
if(! err.isEmpty()) {
gFdResInfo->append(card->m_strCardId+" "+tr("ConfigurationWiFi")+" "+err);
return;
}
auto reply = NetReq("http://"+card->m_strCardIp+":2016/settings").timeout(120000).post(json2);
connect(reply, &QNetworkReply::finished, card, [=] {
QString err = checkReplyForJson(reply);
gFdResInfo->append(card->m_strCardId+" "+tr("ConfigurationWiFi")+" "+(err.isEmpty()?QCoreApplication::translate("Def","Success"):err));
});
2023-04-23 17:01:35 +08:00
});
2023-04-25 16:30:58 +08:00
}
}
} else {
QJsonObject json;
json.insert("_id", "ConfigurationHotSpot");
json.insert("_type", "ConfigurationHotSpot");
json.insert("apName", fdHotspotName->text());
json.insert("password", fdHotspotPassword->text());
if(gSelCards->count() == 1) {
auto waitingDlg = new WaitingDlg(this, tr("ConfigurationHotSpot")+" ...");
Def_CtrlReqPre
connect(reply, &QNetworkReply::finished, card, [=] {
Def_CtrlSetReqAfter
2023-04-23 17:01:35 +08:00
});
2023-04-25 16:30:58 +08:00
} else {
foreach(auto card, *gSelCards) {
Def_CtrlSetMulti(tr("ConfigurationHotSpot"));
}
2023-04-18 14:14:46 +08:00
}
}
});
hBox->addWidget(btnWiFiSet);
hBox->addSpacing(50);
btnWiFiGet = new QPushButton;
btnWiFiGet->setMinimumSize(QSize(60, 30));
btnWiFiGet->setProperty("ssType", "progManageTool");
connect(btnWiFiGet, &QPushButton::clicked, this, [this] {
if(gSelCards->isEmpty()) {
QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController"));
return;
}
QJsonObject json;
json.insert("_id", "IsPortableHotSpot");
json.insert("_type", "IsPortableHotSpot");
if(gSelCards->count() == 1) {
auto waitingDlg = new WaitingDlg(this, tr("IsPortableHotSpot")+" ...");
Def_CtrlReqPre
connect(reply, &QNetworkReply::finished, this, [this, reply, waitingDlg] {
Def_CtrlSingleGetReply
waitingDlg->success();
fdWifiName->setCurrentText(json["wifi"].toString());
auto hotSpots = json["hotSpots"].toString();
fdHotspotName->setText(hotSpots);
if(hotSpots.isEmpty()) fdIsWifi->setChecked(true);
else fdIsHotspot->setChecked(true);
});
} else {
foreach(auto card, *gSelCards) {
2023-04-23 17:01:35 +08:00
auto reply = NetReq("http://"+card->m_strCardIp+":2016/settings").timeout(120000).post(json);
2023-04-18 14:14:46 +08:00
auto cardId = card->m_strCardId;
connect(reply, &QNetworkReply::finished, this, [reply, cardId] {
QJsonDocument json;
QString err = checkReplyForJson(reply, &json);
if(err.isEmpty()) {
err = tr("success");
auto wifi = json["wifi"].toString();
if(! wifi.isEmpty()) err += " "+tr("WifiName")+":"+wifi;
auto hotSpots = json["hotSpots"].toString();
if(! hotSpots.isEmpty()) err += " "+tr("ApName")+":"+hotSpots;
}
gFdResInfo->append(cardId+" "+tr("IsPortableHotSpot")+" "+err);
});
}
}
});
hBox->addWidget(btnWiFiGet);
hBox->addStretch();
line_3 = new QFrame;
line_3->setFrameShape(QFrame::HLine);
line_3->setFrameShadow(QFrame::Sunken);
vBox->addWidget(line_3);
lbCellularConfig = new QLabel;
2023-04-27 15:06:24 +08:00
lbCellularConfig->setFont(ftTitle);
2023-04-18 14:14:46 +08:00
vBox->addWidget(lbCellularConfig, 0, Qt::AlignHCenter);
hBox = new HBox(vBox);
fdEnableCellular = new QCheckBox;
fdEnableCellular->setChecked(true);
connect(fdEnableCellular, &QCheckBox::toggled, this, [=](bool checked) {
groupApn->setEnabled(checked);
fdMcc->setEnabled(checked);
fdCarrierName->setEnabled(checked);
if(gSelCards->isEmpty()) {
QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController"));
return;
}
QJsonObject json;
json.insert("_id", "SetSwitchSimData");
json.insert("_type", "SetSwitchSimData");
json.insert("enable", checked);
if(gSelCards->count() == 1) {
auto waitingDlg = new WaitingDlg(this, tr("SetSwitchSimData")+" ...");
Def_CtrlReqPre
connect(reply, &QNetworkReply::finished, this, [reply, waitingDlg] {
Def_CtrlSetReqAfter
});
} else {
foreach(auto card, *gSelCards) {
Def_CtrlSetMulti(tr("SetSwitchSimData"))
}
}
});
hBox->addWidget(fdEnableCellular);
btnSIMStatusGet = new QPushButton;
btnSIMStatusGet->setMinimumHeight(30);
btnSIMStatusGet->setProperty("ssType", "progManageTool");
connect(btnSIMStatusGet, &QPushButton::clicked, this, [this] {
if(gSelCards->isEmpty()) {
QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController"));
return;
}
QJsonObject json;
json.insert("_id", "GetSIMStatus");
json.insert("_type", "GetSIMStatus");
if(gSelCards->count() == 1) {
auto waitingDlg = new WaitingDlg(this, tr("GetSIMStatus")+" ...");
Def_CtrlReqPre
connect(reply, &QNetworkReply::finished, this, [this, reply, waitingDlg] {
Def_CtrlSingleGetReply
waitingDlg->close();
QString str4GStatus = tr("状态:");
auto state = json["state"].toInt();
if(state<2) str4GStatus += tr("未知");
else if(state==2) str4GStatus += tr("锁定状态需要用户的PIN码解锁");
else if(state==3) str4GStatus += tr("锁定状态需要用户的PUK码解锁");
else if(state==4) str4GStatus += tr("锁定状态需要网络的PIN码解锁");
else if(state==5) str4GStatus += tr("就绪");
auto imsi = json["imsi"].toString();
if(imsi.isEmpty()) str4GStatus += "\n"+tr("no checked sim card");
else {
str4GStatus += "\nIMSI: "+imsi+"\n";
fdMcc->setCurrentText(imsi.left(3));
str4GStatus += tr("国家码:") + json["countryCode"].toString() + "(" + imsi.left(3) + ")\n";
str4GStatus += tr("号码:") + json["phoneNumber"].toString() + "\n";
str4GStatus += tr("用户:") + json["user"].toString() + "\n";
str4GStatus += tr("信号:");
switch(json["serviceState"].toInt()) {
case 0: str4GStatus+=tr("信号正常")+"\r\n"; break;
case 1: str4GStatus+=tr("不在服务区")+"\r\n"; break;
case 2: str4GStatus+=tr("仅限紧急呼叫")+"\r\n"; break;
case 3: str4GStatus+=tr("射频已经关闭")+"\r\n"; break;
}
str4GStatus += tr("网络:");
switch(json["networkType"].toInt()) {
case 0: str4GStatus+=tr("网络类型未知")+"\r\n"; break;
case 1: str4GStatus+=tr("GPRS网络")+"\r\n"; break;
case 2: str4GStatus+=tr("EDGE网络")+"\r\n"; break;
case 3: str4GStatus+=tr("UMTS网络")+"\r\n"; break;
case 4: str4GStatus+=tr("CDMA网络,IS95A 或 IS95B.")+"\r\n"; break;
case 5: str4GStatus+=tr("EVDO网络, revision 0.")+"\r\n"; break;
case 6: str4GStatus+=tr("EVDO网络, revision A.")+"\r\n"; break;
case 7: str4GStatus+=tr("1xRTT网络")+"\r\n"; break;
case 8: str4GStatus+=tr("HSDPA网络")+"\r\n"; break;
case 9: str4GStatus+=tr("HSUPA网络")+"\r\n"; break;
case 10: str4GStatus+=tr("HSPA网络")+"\r\n"; break;
}
str4GStatus += tr("漫游:") + (json["roaming"].toBool() ? tr("Yes") : tr("No")) + "\n";
str4GStatus += tr("数据连接状态:");
switch(json["dataState"].toInt()) {
case 0: str4GStatus+=tr("断开")+"\r\n"; break;
case 1: str4GStatus+=tr("正在连接")+"\r\n"; break;
case 2: str4GStatus+=tr("已连接")+"\r\n"; break;
case 3: str4GStatus+=tr("暂停")+"\r\n"; break;
}
str4GStatus += tr("数据活动休眠状态:");
switch(json["dataActivity"].toInt()) {
case 0: str4GStatus+=tr("活动,但无数据发送和接收")+"\r\n"; break;
case 1: str4GStatus+=tr("活动,正在接收数据")+"\r\n"; break;
case 2: str4GStatus+=tr("活动,正在发送数据")+"\r\n"; break;
case 3: str4GStatus+=tr("活动,正在接收和发送数据")+"\r\n"; break;
case 4: str4GStatus+=tr("休眠状态")+"\r\n"; break;
}
str4GStatus += tr("信号强度:") + QString::number(json["signalStrength"].toInt())+"\n";
}
QMessageBox::information(gMainWin, tr("Tip"), str4GStatus);
});
}
});
hBox->addWidget(btnSIMStatusGet);
hBox->addStretch();
groupApn = new QGroupBox;
vBox->addWidget(groupApn);
auto vvv = new VBox(groupApn);
lbCheckStatusTip = new QLabel(groupApn);
lbCheckStatusTip->setWordWrap(true);
vvv->addWidget(lbCheckStatusTip);
hBox = new HBox(vvv);
label_2 = new QLabel(groupApn);
hBox->addWidget(label_2);
fdMcc = new QComboBox;
fdMcc->setMinimumWidth(80);
fdMcc->setEditable(true);
connect(fdMcc, (void(QComboBox::*)(int))&QComboBox::currentIndexChanged, this, [=](int index) {
if(index < 1) return;
fdCarrierName->clear();
fdCarrierName->addItem("");
auto apnInfos = fdMcc->itemData(index).toJsonArray();
2023-04-19 14:42:06 +08:00
foreach(QJsonValue apnInfo, apnInfos) fdCarrierName->addItem(apnInfo["carrier"].toString(), apnInfo);
2023-04-18 14:14:46 +08:00
});
hBox->addWidget(fdMcc);
hBox->addWidget(new QLabel("->"));
label_3 = new QLabel(groupApn);
hBox->addWidget(label_3);
fdCarrierName = new QComboBox;
fdCarrierName->setMinimumSize(QSize(200, 0));
fdCarrierName->setEditable(true);
connect(fdCarrierName, (void(QComboBox::*)(int))&QComboBox::currentIndexChanged, this, [=](int index) {
if(index < 1) return;
auto json = fdCarrierName->itemData(index).toJsonObject();
fdCus_Name->setText(json["carrier"].toString());
fdCus_apn->setText(json["apn"].toString());
fdCus_User->setText(json["user"].toString());
fdCus_pwd->setText(json["password"].toString());
fdCus_type->setText(json["type"].toString());
fdCus_server->setText(json["server"].toString());
fdCus_proxy->setText(json["proxy"].toString());
fdCus_port->setText(json["port"].toString());
fdCus_mmsc->setText(json["mmsc"].toString());
fdCus_mmsProxy->setText(json["mmsproxy"].toString());
fdCus_mmsPort->setText(json["mmsport"].toString());
});
hBox->addWidget(fdCarrierName);
hBox->addStretch();
hBox = new HBox(vvv);
hBox->addStretch();
auto grid = new QGridLayout();
hBox->addLayout(grid);
auto label = new QLabel("APN");
label->setAlignment((Qt::Alignment)AlignRight);
grid->addWidget(label, 0, 0);
grid->addWidget(lbCus_Name = new QLabel, 1, 0);
lbCus_Name->setAlignment((Qt::Alignment)AlignRight);
grid->addWidget(lbCus_User = new QLabel, 2, 0);
lbCus_User->setAlignment((Qt::Alignment)AlignRight);
grid->addWidget(lbCus_pwd = new QLabel, 3, 0);
lbCus_pwd->setAlignment((Qt::Alignment)AlignRight);
grid->addWidget(lbCus_type = new QLabel, 4, 0);
lbCus_type->setAlignment((Qt::Alignment)AlignRight);
grid->addWidget(lbCus_server = new QLabel, 5, 0);
lbCus_server->setAlignment((Qt::Alignment)AlignRight);
grid->addWidget(lbCus_port = new QLabel, 0, 2);
lbCus_port->setMinimumWidth(80);
lbCus_port->setAlignment((Qt::Alignment)AlignRight);
grid->addWidget(lbCus_proxy = new QLabel, 1, 2);
lbCus_proxy->setAlignment((Qt::Alignment)AlignRight);
grid->addWidget(label = new QLabel("mmsc"), 2, 2);
label->setAlignment((Qt::Alignment)AlignRight);
grid->addWidget(lbCus_mmsPort = new QLabel, 3, 2);
lbCus_mmsPort->setAlignment((Qt::Alignment)AlignRight);
grid->addWidget(lbCus_mmsProxy = new QLabel, 4, 2);
lbCus_mmsProxy->setAlignment((Qt::Alignment)AlignRight);
fdCus_apn = new QLineEdit;
fdCus_Name = new QLineEdit;
fdCus_User = new QLineEdit;
fdCus_pwd = new QLineEdit;
fdCus_type = new QLineEdit;
fdCus_server = new QLineEdit;
fdCus_port = new QLineEdit;
fdCus_proxy = new QLineEdit;
fdCus_mmsc = new QLineEdit;
fdCus_mmsPort = new QLineEdit;
fdCus_mmsProxy = new QLineEdit;
fdCus_apn->setMinimumWidth(260);
fdCus_port->setMinimumWidth(260);
grid->addWidget(fdCus_apn, 0, 1);
grid->addWidget(fdCus_Name, 1, 1);
grid->addWidget(fdCus_User, 2, 1);
grid->addWidget(fdCus_pwd, 3, 1);
grid->addWidget(fdCus_type, 4, 1);
grid->addWidget(fdCus_server, 5, 1);
grid->addWidget(fdCus_port, 0, 3);
grid->addWidget(fdCus_proxy, 1, 3);
grid->addWidget(fdCus_mmsc, 2, 3);
grid->addWidget(fdCus_mmsPort, 3, 3);
grid->addWidget(fdCus_mmsProxy, 4, 3);
auto hhhh = new HBox;
btnAPNCusSet = new QPushButton;
btnAPNCusSet->setMinimumSize(QSize(60, 30));
btnAPNCusSet->setProperty("ssType", "progManageTool");
connect(btnAPNCusSet, &QPushButton::clicked, this, [=] {
if(gSelCards->isEmpty()) {
QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController"));
return;
}
QJsonObject json;
json.insert("_id", "SetAPN");
json.insert("_type", "SetAPN");
json.insert("carrier", fdCus_Name->text());
json.insert("apn", fdCus_apn->text());
json.insert("user", fdCus_User->text());
json.insert("password", fdCus_pwd->text());
json.insert("type", fdCus_type->text());
json.insert("server", fdCus_server->text());
json.insert("proxy", fdCus_proxy->text());
json.insert("port", fdCus_port->text());
json.insert("mmsc", fdCus_mmsc->text());
json.insert("mmsproxy", fdCus_mmsProxy->text());
json.insert("mmsport", fdCus_mmsPort->text());
if(gSelCards->count() == 1) {
auto waitingDlg = new WaitingDlg(this, tr("SetAPN")+" ...");
Def_CtrlReqPre
connect(reply, &QNetworkReply::finished, this, [=] {
Def_CtrlSetReqAfter
});
} else {
foreach(auto card, *gSelCards) {
Def_CtrlSetMulti(tr("SetAPN"))
}
}
});
hhhh->addWidget(btnAPNCusSet);
hhhh->addStretch();
btnAPNCusGet = new QPushButton;
btnAPNCusGet->setMinimumSize(QSize(60, 30));
btnAPNCusGet->setProperty("ssType", "progManageTool");
connect(btnAPNCusGet, &QPushButton::clicked, this, [=] {
if(gSelCards->isEmpty()) {
QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController"));
return;
}
QJsonObject json;
json.insert("_id", "GetCurrentAPN");
json.insert("_type", "GetCurrentAPN");
if(gSelCards->count() == 1) {
auto waitingDlg = new WaitingDlg(this, tr("GetCurrentAPN")+" ...");
Def_CtrlReqPre
connect(reply, &QNetworkReply::finished, this, [=] {
Def_CtrlSingleGetReply
waitingDlg->success();
fdCus_Name->setText(json["carrier"].toString());
fdCus_apn->setText(json["apn"].toString());
fdCus_User->setText(json["user"].toString());
fdCus_pwd->setText(json["password"].toString());
fdCus_type->setText(json["type"].toString());
fdCus_server->setText(json["server"].toString());
fdCus_proxy->setText(json["proxy"].toString());
fdCus_port->setText(json["port"].toString());
fdCus_mmsc->setText(json["mmsc"].toString());
fdCus_mmsProxy->setText(json["mmsproxy"].toString());
fdCus_mmsPort->setText(json["mmsport"].toString());
});
} else {
foreach(auto card, *gSelCards) {
2023-04-23 17:01:35 +08:00
auto reply = NetReq("http://"+card->m_strCardIp+":2016/settings").timeout(120000).post(json);
2023-04-18 14:14:46 +08:00
auto cardId = card->m_strCardId;
connect(reply, &QNetworkReply::finished, this, [reply, cardId] {
QJsonDocument json;
QString err = checkReplyForJson(reply, &json);
if(err.isEmpty()) {
err = json["apn"].toString();
auto user = json["user"].toString();
if(! user.isEmpty()) err += ", User:"+user+", Password:"+json["password"].toString();
}
gFdResInfo->append(cardId+" "+tr("GetCurrentAPN")+" "+err);
});
}
}
});
hhhh->addWidget(btnAPNCusGet);
grid->addLayout(hhhh, 5, 3);
hBox->addStretch();
vBox->addSpacing(20);
hBox = new HBox(vBox);
hBox->setContentsMargins(-1, 0, 10, -1);
label_10 = new QLabel;
hBox->addWidget(label_10);
fdFightModel = new SwitchControl;
fdFightModel->setMinimumSize(QSize(80, 35));
fdFightModel->setSliderColor(QColor(0, 0, 0),QColor(0, 160, 230));
fdFightModel->setBgColor(QColor(200,200,200),QColor(0,200,0));
fdFightModel->setTextColor(QColor(100,100,100),QColor(0, 160, 230));
fdFightModel->setText(tr("OFF"), tr("ON"));
connect(fdFightModel, &SwitchControl::checkedChanged, this, [=](bool checked) {
if(gSelCards->isEmpty()) {
QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController"));
return;
}
QJsonObject json;
json.insert("_id", "ContrFlightMode");
json.insert("_type", "ContrFlightMode");
json.insert("state", checked);
if(gSelCards->count() == 1) {
auto waitingDlg = new WaitingDlg(this, tr("ContrFlightMode")+" ...");
Def_CtrlReqPre
connect(reply, &QNetworkReply::finished, this, [reply, waitingDlg] {
Def_CtrlSetReqAfter
});
} else {
foreach(auto card, *gSelCards) {
Def_CtrlSetMulti(tr("ContrFlightMode"))
}
}
});
hBox->addWidget(fdFightModel);
btnFlightModelGet = new QPushButton;
btnFlightModelGet->setMinimumSize(QSize(0, 30));
btnFlightModelGet->setProperty("ssType", "progManageTool");
connect(btnFlightModelGet, &QPushButton::clicked, this, [this] {
if(gSelCards->isEmpty()) {
QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController"));
return;
}
QJsonObject json;
json.insert("_id", "GetFlightModeState");
json.insert("_type", "GetFlightModeState");
if(gSelCards->count() == 1) {
auto waitingDlg = new WaitingDlg(this, tr("GetFlightModeState")+" ...");
Def_CtrlReqPre
connect(reply, &QNetworkReply::finished, this, [this, reply, waitingDlg] {
Def_CtrlSingleGetReply
waitingDlg->success();
fdFightModel->setCheckedStatus(json["result"].toBool());
fdFightModel->update();
});
} else {
foreach(auto card, *gSelCards) {
2023-04-23 17:01:35 +08:00
auto reply = NetReq("http://"+card->m_strCardIp+":2016/settings").timeout(120000).post(json);
2023-04-18 14:14:46 +08:00
auto cardId = card->m_strCardId;
connect(reply, &QNetworkReply::finished, this, [reply, cardId] {
QJsonDocument json;
QString err = checkReplyForJson(reply, &json);
if(err.isEmpty()) err = json["result"].toBool() ? "true" : "false";
gFdResInfo->append(cardId+" "+tr("GetFlightModeState")+" "+err);
});
}
}
});
hBox->addWidget(btnFlightModelGet);
hBox->addStretch();
vBox->addStretch();
connect(gDevicePanel, &DevicePanel::sigSelectedDeviceList, this, [this] {
if(isVisible()) init();
});
transUi();
}
void CtrlNetworkPanel::showEvent(QShowEvent *event) {
QWidget::showEvent(event);
init();
}
void CtrlNetworkPanel::init() {
bool isSingle = gSelCards->count()==1;
btnScan->setEnabled(isSingle);
if(! isSingle) return;
auto card = gSelCards->at(0);
QJsonObject json;
json.insert("_id", "GetEthernet");
json.insert("_type", "GetEthernet");
2023-04-23 17:01:35 +08:00
auto reply = NetReq("http://"+card->m_strCardIp+":2016/settings").timeout(120000).post(json);
2023-04-18 14:14:46 +08:00
connect(reply, &QNetworkReply::finished, this, [this, reply] {
QJsonDocument json;
QString err = checkReplyForJson(reply, &json);
if(! err.isEmpty()) return;
if(json["dhcp"].toBool()) {
fdDhcp->setChecked(true);
gBoxSpecifyIp->setVisible(false);
} else {
fdSpecifyIp->setChecked(true);
gBoxSpecifyIp->setVisible(true);
}
fdIP->setText(json["ipAddr"].toString());
fdGateWay->setText(json["gateWay"].toString());
fdMask->setText(json["netMask"].toString());
fdDns->setText(json["dnsAddr"].toString());
});
json = QJsonObject();
json.insert("_id", "GetWifiList");
json.insert("_type", "GetWifiList");
2023-04-23 17:01:35 +08:00
reply = NetReq("http://"+card->m_strCardIp+":2016/settings").timeout(120000).post(json);
2023-04-18 14:14:46 +08:00
connect(reply, &QNetworkReply::finished, this, [=] {
QJsonDocument json;
QString err = checkReplyForJson(reply, &json);
if(! err.isEmpty()) return;
auto wifis = json["wifiList"].toArray();
fdWifiName->clear();
2023-04-19 14:42:06 +08:00
foreach(QJsonValue wifi, wifis) fdWifiName->addItem(QIcon(":/res/signal-"+QString::number((wifi["signal"].toInt()+19)/20)+".png"), wifi["ssid"].toString());
2023-04-18 14:14:46 +08:00
{
QJsonObject json;
json.insert("_id", "IsPortableHotSpot");
json.insert("_type", "IsPortableHotSpot");
2023-04-23 17:01:35 +08:00
auto reply = NetReq("http://"+card->m_strCardIp+":2016/settings").timeout(120000).post(json);
2023-04-18 14:14:46 +08:00
connect(reply, &QNetworkReply::finished, this, [this, reply] {
QJsonDocument json;
QString err = checkReplyForJson(reply, &json);
if(! err.isEmpty()) return;
auto wifi = json["wifi"].toString();
fdWifiName->setCurrentText(wifi);
auto hotSpots = json["hotSpots"].toString();
fdHotspotName->setText(hotSpots);
if(hotSpots.isEmpty()) fdIsWifi->setChecked(true);
else fdIsHotspot->setChecked(true);
});
}
});
json = QJsonObject();
json.insert("_id", "GetSwitchSimData");
json.insert("_type", "GetSwitchSimData");
2023-04-23 17:01:35 +08:00
reply = NetReq("http://"+card->m_strCardIp+":2016/settings").timeout(120000).post(json);
2023-04-18 14:14:46 +08:00
connect(reply, &QNetworkReply::finished, this, [=] {
QJsonDocument json;
QString err = checkReplyForJson(reply, &json);
if(! err.isEmpty()) return;
bool b = json["enable"].toBool();
fdEnableCellular->setChecked(b);
fdMcc->setEnabled(b);
fdCarrierName->setEnabled(b);
});
json = QJsonObject();
json.insert("_id", "GetAPNList");
json.insert("_type", "GetAPNList");
2023-04-23 17:01:35 +08:00
reply = NetReq("http://"+card->m_strCardIp+":2016/settings").timeout(120000).post(json);
2023-04-18 14:14:46 +08:00
connect(reply, &QNetworkReply::finished, this, [=] {
QJsonDocument json;
QString err = checkReplyForJson(reply, &json);
if(! err.isEmpty()) return;
fdMcc->clear();
fdMcc->addItem("");
auto apns = json["apns"].toArray();
2023-04-19 14:42:06 +08:00
foreach(QJsonValue apn, apns) {
2023-04-18 14:14:46 +08:00
QString mcc = apn["mcc"].toString();
for(int i=0; i<fdMcc->count(); i++) if(mcc==fdMcc->itemText(i)) {
auto var = fdMcc->itemData(i);
fdMcc->setItemData(i, QVariant());
((QJsonArray *)var.data())->append(apn);
fdMcc->setItemData(i, var);
goto end;
}
fdMcc->addItem(mcc, QJsonArray{apn});
end:;
}
});
getCurrentAPN(card->m_strCardIp);
json = QJsonObject();
json.insert("_id", "GetFlightModeState");
json.insert("_type", "GetFlightModeState");
2023-04-23 17:01:35 +08:00
reply = NetReq("http://"+card->m_strCardIp+":2016/settings").timeout(120000).post(json);
2023-04-18 14:14:46 +08:00
connect(reply, &QNetworkReply::finished, this, [=] {
QJsonDocument json;
QString err = checkReplyForJson(reply, &json);
if(! err.isEmpty()) return;
fdFightModel->setCheckedStatus(json["result"].toBool());
fdFightModel->update();
});
}
void CtrlNetworkPanel::changeEvent(QEvent *event) {
QWidget::changeEvent(event);
if(event->type() == QEvent::LanguageChange) transUi();
}
void CtrlNetworkPanel::transUi() {
lbLanCfg->setText(tr("Wire Enther(RJ45) Configuration"));
fdDhcp->setText(tr("DHCP"));
fdSpecifyIp->setText(tr("Specify IP"));
lbHotspotName->setText(tr("AP name"));
labelGateway->setText(tr("Gateway"));
lbWifiName->setText(tr("WiFi name"));
labelIpAddress->setText(tr("IP Address"));
lbHotspotPassword->setText(tr("Password"));
labelDnsAddress->setText(tr("DNS Address"));
labelMaskAddress->setText(tr("Subnet mask"));
lbWifiPassword->setText(tr("Password"));
btnScan->setText(tr("Scan"));
btnWiFiSet->setText(tr("Set"));
btnLanSet->setText(tr("Set"));
btnWiFiGet->setText(tr("Readback"));
btnLanGet->setText(tr("Readback"));
fdIsWifi->setText(tr("WiFi Mode"));
fdIsHotspot->setText(tr("Ap Mode"));
label_5->setText(tr("WIFI Configuration"));
fdHotspotPassword->setPlaceholderText(tr("Input password"));
fdWifiPassword->setPlaceholderText(tr("Input password"));
fdHotspotName->setPlaceholderText(tr("Input ap name"));
lbCellularConfig->setText(tr("Cellular Config"));
lbCheckStatusTip->setText(tr("Through the check status button"));
fdEnableCellular->setText(tr("Enable Cellular Data"));
groupApn->setTitle(tr("Set APN Info"));
label_2->setText(tr("Country ID(mcc):"));
label_3->setText(tr("Carrier Name"));
fdCus_apn->setPlaceholderText(tr("APN(Required)"));
btnFlightModelGet->setText(tr("Readback"));
btnSIMStatusGet->setText(tr("Get cellular network status information"));
label_10->setText(tr("Flight Mode"));
lbCus_Name->setText(tr("Carrier Name"));
lbCus_User->setText(tr("User"));
lbCus_pwd->setText(tr("Password"));
lbCus_type->setText(tr("Type"));
lbCus_server->setText(tr("Server"));
lbCus_port->setText(tr("Port"));
lbCus_proxy->setText(tr("Proxy"));
lbCus_mmsPort->setText(tr("MMS Port"));
lbCus_mmsProxy->setText(tr("MMS Proxy"));
btnAPNCusSet->setText(tr("Set"));
btnAPNCusGet->setText(tr("Readback"));
}
void CtrlNetworkPanel::getCurrentAPN(QString &ip) {
QJsonObject json;
json.insert("_id", "GetCurrentAPN");
json.insert("_type", "GetCurrentAPN");
2023-04-23 17:01:35 +08:00
auto reply = NetReq("http://"+ip+":2016/settings").timeout(120000).post(json);
2023-04-18 14:14:46 +08:00
connect(reply, &QNetworkReply::finished, this, [=] {
QJsonDocument json;
QString err = checkReplyForJson(reply, &json);
if(! err.isEmpty()) return;
fdCus_Name->setText(json["carrier"].toString());
fdCus_apn->setText(json["apn"].toString());
fdCus_User->setText(json["user"].toString());
fdCus_pwd->setText(json["password"].toString());
fdCus_type->setText(json["type"].toString());
fdCus_server->setText(json["server"].toString());
fdCus_proxy->setText(json["proxy"].toString());
fdCus_port->setText(json["port"].toString());
fdCus_mmsc->setText(json["mmsc"].toString());
fdCus_mmsProxy->setText(json["mmsproxy"].toString());
fdCus_mmsPort->setText(json["mmsport"].toString());
});
}