diff --git a/LedOK/LedOK Express.pro b/LedOK/LedOK Express.pro index 48d0017..26e1903 100644 --- a/LedOK/LedOK Express.pro +++ b/LedOK/LedOK Express.pro @@ -19,7 +19,7 @@ CONFIG += lrelease CONFIG += embed_translations # CONFIG += console - +DEFINES += leyide # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. @@ -108,6 +108,7 @@ SOURCES += \ base/lodateselector.cpp \ base/loqtitlebar.cpp \ base/loqtreewidget.cpp \ + device/progressesdlg.cpp \ gutil/qcore.cpp \ gutil/qwaitingdlg.cpp \ basedlg.cpp \ @@ -176,6 +177,7 @@ HEADERS += \ base/lodateselector.h \ base/loqtitlebar.h \ base/loqtreewidget.h \ + device/progressesdlg.h \ gutil/qcore.h \ gutil/qwaitingdlg.h \ basedlg.h \ diff --git a/LedOK/device/ctrladvancedpanel.cpp b/LedOK/device/ctrladvancedpanel.cpp index d6841b0..2d99caf 100644 --- a/LedOK/device/ctrladvancedpanel.cpp +++ b/LedOK/device/ctrladvancedpanel.cpp @@ -1,4 +1,5 @@ #include "ctrladvancedpanel.h" +#include "device/progressesdlg.h" #include "globaldefine.h" #include "gutil/qwaitingdlg.h" #include "base/changepasswordform.h" @@ -634,6 +635,8 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() { } JObj json{{"_type", "GetFile"}, {"name", "program"}}; auto fd = new QTextEdit; + LocalObj lll; + connect(fd, &QTextEdit::destroyed, &lll, &LocalObj::reset); fd->setAttribute(Qt::WA_DeleteOnClose); fd->setTabStopDistance(26); auto ft = fd->font(); @@ -643,30 +646,38 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() { fd->resize(600, 900); fd->show(); for(auto &card : gSelCards) { - auto tcp = new TcpSocket; - auto cardId = card.id; - connect(fd, &QTextEdit::destroyed, tcp, &QTcpSocket::deleteLater); - connect(tcp, &QTcpSocket::connected, tcp, [=] { - tcp->stopTimer(); - tcp->write(JToBytes(json)); - tcp->startTimer(10000); - }); - connect(tcp, &QTcpSocket::readyRead, fd, [=] { - tcp->stopTimer(); - auto resp = tcp->readAll(); - tcp->close(); - tcp->deleteLater(); - fd->append(cardId+" Prog JSON"); - fd->append(resp); - fd->append(""); - }); - connect(tcp, &QTcpSocket::errorOccurred, fd, [=](QAbstractSocket::SocketError err) { - tcp->close(); - tcp->deleteLater(); - fd->append(cardId+" View Prog JSON "+socketErrKey(err)+" ("+QString::number(err)+") "+tcp->errorString()); - }); - tcp->connectToHost(card.ip, 3333); - tcp->startTimer(10000); + fd->append(card.id+" Prog JSON"); + TcpSocket tcp; + tcp.connectToHost(card.ip, 3333); + if(! tcp.waitForConnected()) { + if(lll.cnt==0) return; + fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at WaitConnected\n"); + tcp.close(); + continue; + } + auto resNum = tcp.write(JToBytes(json)); + tcp.flush(); + if(resNum == -1 || ! tcp.waitForBytesWritten()) { + if(lll.cnt==0) return; + fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at write\n"); + tcp.close(); + continue; + } + if(! tcp.waitForReadyRead()) { + if(lll.cnt==0) return; + fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at WaitRead\n"); + tcp.close(); + continue; + } + fd->append(tcp.readAll()); + while(tcp.waitForReadyRead(1000)) { + if(lll.cnt==0) return; + fd->append(tcp.readAll()); + } + if(lll.cnt==0) return; + if(tcp.error()!=QAbstractSocket::SocketTimeoutError) fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at WaitRead2\n"); + tcp.close(); + fd->append(""); } }); hBox->addWidget(btnViewProg); @@ -680,6 +691,8 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() { } JObj json{{"_type", "ListProgFiles"}}; auto fd = new QTextEdit; + LocalObj lll; + connect(fd, &QTextEdit::destroyed, &lll, &LocalObj::reset); fd->setAttribute(Qt::WA_DeleteOnClose); auto ft = fd->font(); ft.setFamily("Consolas"); @@ -688,30 +701,38 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() { fd->resize(600, 900); fd->show(); for(auto &card : gSelCards) { - auto tcp = new TcpSocket; - auto cardId = card.id; - connect(fd, &QTextEdit::destroyed, tcp, &QTcpSocket::deleteLater); - connect(tcp, &QTcpSocket::connected, tcp, [=] { - tcp->stopTimer(); - tcp->write(JToBytes(json)); - tcp->startTimer(10000); - }); - connect(tcp, &QTcpSocket::readyRead, fd, [=] { - tcp->stopTimer(); - auto resp = tcp->readAll(); - tcp->close(); - tcp->deleteLater(); - fd->append(cardId+" Prog Files"); - fd->append(resp); - fd->append(""); - }); - connect(tcp, &QTcpSocket::errorOccurred, fd, [=](QAbstractSocket::SocketError err) { - tcp->close(); - tcp->deleteLater(); - fd->append(cardId+" List Prog Files "+socketErrKey(err)+" ("+QString::number(err)+") "+tcp->errorString()); - }); - tcp->connectToHost(card.ip, 3333); - tcp->startTimer(10000); + fd->append(card.id+" Prog Files"); + TcpSocket tcp; + tcp.connectToHost(card.ip, 3333); + if(! tcp.waitForConnected()) { + if(lll.cnt==0) return; + fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at WaitConnected\n"); + tcp.close(); + continue; + } + auto resNum = tcp.write(JToBytes(json)); + tcp.flush(); + if(resNum == -1 || ! tcp.waitForBytesWritten()) { + if(lll.cnt==0) return; + fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at write\n"); + tcp.close(); + continue; + } + if(! tcp.waitForReadyRead()) { + if(lll.cnt==0) return; + fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at WaitRead\n"); + tcp.close(); + continue; + } + fd->append(tcp.readAll()); + while(tcp.waitForReadyRead(1000)) { + if(lll.cnt==0) return; + fd->append(tcp.readAll()); + } + if(lll.cnt==0) return; + if(tcp.error()!=QAbstractSocket::SocketTimeoutError) fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at WaitRead2\n"); + tcp.close(); + fd->append(""); } }); hBox->addWidget(btnListFiles); @@ -725,6 +746,8 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() { } JObj json{{"_type", "GetInfo"}}; auto fd = new QTextEdit; + LocalObj lll; + connect(fd, &QTextEdit::destroyed, &lll, &LocalObj::reset); fd->setAttribute(Qt::WA_DeleteOnClose); auto ft = fd->font(); ft.setFamily("Consolas"); @@ -733,31 +756,38 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() { fd->resize(600, 900); fd->show(); for(auto &card : gSelCards) { - auto tcp = new TcpSocket; - auto cardId = card.id; - connect(fd, &QTextEdit::destroyed, tcp, &QTcpSocket::deleteLater); - connect(tcp, &QTcpSocket::connected, tcp, [=] { - tcp->stopTimer(); - tcp->write(JToBytes(json)); - tcp->startTimer(10000); - }); - connect(tcp, &QTcpSocket::readyRead, fd, [=] { - tcp->stopTimer(); - auto resp = tcp->readAll(); - tcp->close(); - tcp->deleteLater(); - fd->append(cardId+" Player Info"); - fd->append(resp); - fd->append(""); - - }); - connect(tcp, &QTcpSocket::errorOccurred, fd, [=](QAbstractSocket::SocketError err) { - tcp->close(); - tcp->deleteLater(); - fd->append(cardId+" Get Player Info "+socketErrKey(err)+" ("+QString::number(err)+") "+tcp->errorString()); - }); - tcp->connectToHost(card.ip, 3333); - tcp->startTimer(10000); + fd->append(card.id+" Player Info"); + TcpSocket tcp; + tcp.connectToHost(card.ip, 3333); + if(! tcp.waitForConnected()) { + if(lll.cnt==0) return; + fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at WaitConnected\n"); + tcp.close(); + continue; + } + auto resNum = tcp.write(JToBytes(json)); + tcp.flush(); + if(resNum == -1 || ! tcp.waitForBytesWritten()) { + if(lll.cnt==0) return; + fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at write\n"); + tcp.close(); + continue; + } + if(! tcp.waitForReadyRead()) { + if(lll.cnt==0) return; + fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at WaitRead\n"); + tcp.close(); + continue; + } + fd->append(tcp.readAll()); + while(tcp.waitForReadyRead(1000)) { + if(lll.cnt==0) return; + fd->append(tcp.readAll()); + } + if(lll.cnt==0) return; + if(tcp.error()!=QAbstractSocket::SocketTimeoutError) fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at WaitRead2\n"); + tcp.close(); + fd->append(""); } }); hBox->addWidget(btnGetPlayerInfo); @@ -771,6 +801,8 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() { } JObj json{{"_type", "GetLog"}}; auto fd = new QTextEdit; + LocalObj lll; + connect(fd, &QTextEdit::destroyed, &lll, &LocalObj::reset); fd->setAttribute(Qt::WA_DeleteOnClose); auto ft = fd->font(); ft.setFamily("Consolas"); @@ -779,27 +811,38 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() { fd->resize(600, 900); fd->show(); for(auto &card : gSelCards) { - auto tcp = new TcpSocket; - auto cardId = card.id; - connect(fd, &QTextEdit::destroyed, tcp, &QTcpSocket::deleteLater); - connect(tcp, &QTcpSocket::connected, tcp, [=] { - tcp->stopTimer(); - tcp->write(JToBytes(json)); - tcp->startTimer(5000); - }); - connect(tcp, &QTcpSocket::readyRead, fd, [=] { - tcp->stopTimer(); - auto resp = tcp->readAll(); - if(fd->document()->isEmpty()) fd->append(cardId+" Player Log"); - fd->append(resp); - }); - connect(tcp, &QTcpSocket::errorOccurred, fd, [=](QAbstractSocket::SocketError err) { - tcp->close(); - tcp->deleteLater(); - if(fd->document()->isEmpty() || err!=QAbstractSocket::SocketTimeoutError) fd->append(cardId+" Get Player Log "+socketErrKey(err)+" ("+QString::number(err)+") "+tcp->errorString()); - }); - tcp->connectToHost(card.ip, 3333); - tcp->startTimer(8000); + fd->append(card.id+" Player Log"); + TcpSocket tcp; + tcp.connectToHost(card.ip, 3333); + if(! tcp.waitForConnected()) { + if(lll.cnt==0) return; + fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at WaitConnected\n"); + tcp.close(); + continue; + } + auto resNum = tcp.write(JToBytes(json)); + tcp.flush(); + if(resNum == -1 || ! tcp.waitForBytesWritten()) { + if(lll.cnt==0) return; + fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at write\n"); + tcp.close(); + continue; + } + if(! tcp.waitForReadyRead()) { + if(lll.cnt==0) return; + fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at WaitRead\n"); + tcp.close(); + continue; + } + fd->append(tcp.readAll()); + while(tcp.waitForReadyRead(1000)) { + if(lll.cnt==0) return; + fd->append(tcp.readAll()); + } + if(lll.cnt==0) return; + if(tcp.error()!=QAbstractSocket::SocketTimeoutError) fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at WaitRead2\n"); + tcp.close(); + fd->append(""); } }); hBox->addWidget(GetBuf); @@ -1136,27 +1179,29 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() { } }); hBox->addWidget(btnReceCardsGet); - -// auto btnTool = new QPushButton("本地监控"); -// btnTool->setMinimumHeight(30); -// btnTool->setProperty("ssType", "progManageTool"); -// connect(btnTool, &QPushButton::clicked, btnTool, [] { -// QFileInfo file("EasyTool/EasyTool.exe"); -// if(file.exists()) QProcess::startDetached(file.absoluteFilePath(), QStringList(), file.absolutePath()); -// }); -// hBox->addWidget(btnTool); - -// auto btnVMS = new QPushButton("平台监控"); -// btnVMS->setMinimumHeight(30); -// btnVMS->setProperty("ssType", "progManageTool"); -// connect(btnVMS, &QPushButton::clicked, btnVMS, [] { -// QFileInfo file("EasyVMS/EasyVMS.exe"); -// if(file.exists()) QProcess::startDetached(file.absoluteFilePath(), QStringList(), file.absolutePath()); -// }); -// hBox->addWidget(btnVMS); - hBox->addStretch(); + // hBox = new HBox(vBox); + // auto btnTool = new QPushButton("EasyTool"); + // btnTool->setMinimumHeight(30); + // btnTool->setProperty("ssType", "progManageTool"); + // connect(btnTool, &QPushButton::clicked, btnTool, [] { + // QFileInfo file("EasyTool/EasyTool.exe"); + // if(file.exists()) QProcess::startDetached(file.absoluteFilePath(), QStringList(), file.absolutePath()); + // }); + // hBox->addWidget(btnTool); + + // auto btnVMS = new QPushButton("EasyVMS"); + // btnVMS->setMinimumHeight(30); + // btnVMS->setProperty("ssType", "progManageTool"); + // connect(btnVMS, &QPushButton::clicked, btnVMS, [] { + // QFileInfo file("EasyVMS/EasyVMS.exe"); + // if(file.exists()) QProcess::startDetached(file.absoluteFilePath(), QStringList(), file.absolutePath()); + // }); + // hBox->addWidget(btnVMS); + + // hBox->addStretch(); + #ifndef Q_OS_WIN btnLedSet->setVisible(false); #endif @@ -1553,7 +1598,7 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() { hBox->addSpacing(20); - btnMcuUpd = new QPushButton; + btnMcuUpd = new QPushButton("Update MCU"); btnMcuUpd->setProperty("ssType", "progManageTool"); connect(btnMcuUpd, &QPushButton::clicked, this, [this] { if(gSelCards.isEmpty()) { @@ -1580,30 +1625,37 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() { data.append("--").append(Boundary).append("\r\nContent-Disposition: form-data; name=\"").append(nameBytes).append("\"; filename=\"").append(nameBytes).append("\"\r\n\r\n").append(fileData).append("\r\n"); data.append("--").append(Boundary).append("--\r\n"); - if(gSelCards.count() == 1) { - auto waitingDlg = new WaitingDlg(this, tr("MCU Uploading")+" ..."); - waitingDlg->show(); - NetReq req("http://"+gSelCards[0].ip+":2016/upload?type=mcu_update"); + ProgressesDlg dlg; + dlg.resize(1024, 600); + for(auto &card : gSelCards) { + ProgressesItem* item; + item = new ProgressesItem(dlg.table); + item->setText("id", card.id); + item->fdProgress = new QProgressBar; + item->fdProgress->setAlignment(Qt::AlignCenter); + item->fdProgress->setMaximumHeight(24); + item->setCellWidget("progress", WrapVCenter(item->fdProgress)); + item->setText("ip", card.ip); + item->setText("alias", card.alias); + NetReq req("http://"+card.ip+":2016/upload?type=mcu_update"); auto reply = req.timeout(120000).type("multipart/form-data; boundary="+Boundary).post(data); - ConnReply(reply, waitingDlg) [=] { - QString err = checkReply(reply); + connect(reply, &QNetworkReply::uploadProgress, item, [=](qint64 bytesSent, qint64 bytesTotal) { + if(bytesTotal==0) return; + item->fdProgress->setValue(bytesSent*100/bytesTotal); + }); + ConnReply(reply, item) [=] { + auto err = errStrWithData(reply); if(! err.isEmpty()) { - waitingDlg->close(); - QMessageBox::critical(this, tr("Error"), err); + item->setRes(tr("Upload error")+": "+err, Qt::red); return; } - waitingDlg->success(); + auto info = tr("Upgrading")+" ..."; + item->setRes(info); + item->sendProgress("GetMcuUpgradeProgress"); + item->fdProgress->setValue(0); }); - } else { - foreach(auto card, gSelCards) { - NetReq req("http://"+card.ip+":2016/upload?type=mcu_update"); - auto reply = req.timeout(120000).type("multipart/form-data; boundary="+Boundary).post(data); - connect(reply, &QNetworkReply::finished, this, [=] { - QString err = checkReply(reply); - gFdResInfo->append(card.id+" "+tr("Update MCU")+" "+(err.isEmpty()?tr("Success"):err)); - }); - } } + dlg.exec(); }); hBox->addWidget(btnMcuUpd); @@ -2539,7 +2591,7 @@ void CtrlAdvancedPanel::init() { || card.id.startsWith("m5h", Qt::CaseInsensitive) || card.id.startsWith("m5s", Qt::CaseInsensitive) || card.id.startsWith("m6s", Qt::CaseInsensitive) - || card.id.startsWith("m7s", Qt::CaseInsensitive) + || card.id.startsWith("m7", Qt::CaseInsensitive) || card.id.startsWith("y1", Qt::CaseInsensitive) || card.id.startsWith("y4", Qt::CaseInsensitive) || card.id.startsWith("y5", Qt::CaseInsensitive); @@ -2583,7 +2635,7 @@ void CtrlAdvancedPanel::transUi() { btnM80Restore->setText(tr("Restore to default")); btnM80Set->setText(tr("Set")); - grpY50->setTitle("M50S / M60S / M70S / M5H / ST50 / Y1G / Y1C / Y4A / Y5A "+tr("Resolution Config")); + grpY50->setTitle("M50S / M60S / M70S / M5H / M7L / ST50 / Y1G / Y1C / Y4A / Y5A "+tr("Resolution Config")); fdDisMode->setItemText(0, tr("Full screen")); fdDisMode->setItemText(1, tr("Part")); btnY50Set->setText(tr("Set")); @@ -2611,7 +2663,6 @@ void CtrlAdvancedPanel::transUi() { grpBoxHiddenSettings->setTitle(tr("Hidden Settings")+" ("+tr("Click right button to hide")+")"); btnSysUpd->setText(tr("System Update")); - btnMcuUpd->setText(tr("Update MCU")); btnMcuGet->setText(tr("Get MCU Version")); lbBaudCfg->setText(tr("Baud Config")); lbBaudModel->setText(tr("Model")); diff --git a/LedOK/device/ctrlnetworkpanel.cpp b/LedOK/device/ctrlnetworkpanel.cpp index 09eb1db..1ffd5ae 100644 --- a/LedOK/device/ctrlnetworkpanel.cpp +++ b/LedOK/device/ctrlnetworkpanel.cpp @@ -236,6 +236,10 @@ CtrlNetworkPanel::CtrlNetworkPanel() { hBox->addWidget(fdIsHotspot); hBox->addStretch(); + auto aaaQButtonGroup = new QButtonGroup(fdIsWifi); + aaaQButtonGroup->addButton(fdIsWifi); + aaaQButtonGroup->addButton(fdIsHotspot); + vBox->addLayout(stackedWifi); { auto vvv = new VBox(stackedWifi); @@ -243,6 +247,7 @@ CtrlNetworkPanel::CtrlNetworkPanel() { lbWifiName = new QLabel; lbWifiName->setMinimumWidth(80); + lbWifiName->setAlignment(Qt::AlignRight|Qt::AlignVCenter); hBox->addWidget(lbWifiName); fdWifiName = new QComboBox; @@ -283,6 +288,7 @@ CtrlNetworkPanel::CtrlNetworkPanel() { lbWifiPassword = new QLabel; lbWifiPassword->setMinimumWidth(80); + lbWifiPassword->setAlignment(Qt::AlignRight|Qt::AlignVCenter); hBox->addWidget(lbWifiPassword); fdWifiPassword = new QLineEdit; @@ -298,6 +304,7 @@ CtrlNetworkPanel::CtrlNetworkPanel() { lbHotspotName = new QLabel; lbHotspotName->setMinimumWidth(80); + lbHotspotName->setAlignment(Qt::AlignRight|Qt::AlignVCenter); hBox->addWidget(lbHotspotName); fdHotspotName = new QLineEdit; @@ -309,6 +316,7 @@ CtrlNetworkPanel::CtrlNetworkPanel() { lbHotspotPassword = new QLabel; lbHotspotPassword->setMinimumWidth(80); + lbHotspotPassword->setAlignment(Qt::AlignRight|Qt::AlignVCenter); hBox->addWidget(lbHotspotPassword); fdHotspotPassword = new QLineEdit; @@ -317,6 +325,20 @@ CtrlNetworkPanel::CtrlNetworkPanel() { hBox->addWidget(fdHotspotPassword); hBox->addStretch(); + hBox = new HBox(vvv); + + auto lll = new QLabel; + lll->setMinimumWidth(80); + hBox->addWidget(lll); + + fdIs2_4G = new QRadioButton("2.4G"); + fdIs2_4G->setChecked(true); + hBox->addWidget(fdIs2_4G); + + auto fdIs5G = new QRadioButton("5G"); + hBox->addWidget(fdIs5G); + hBox->addStretch(); + vvv->addStretch(); } fdIsWifi->setChecked(true); @@ -380,6 +402,7 @@ CtrlNetworkPanel::CtrlNetworkPanel() { json.insert("_id", "ConfigurationHotSpot"); json.insert("_type", "ConfigurationHotSpot"); json.insert("apName", fdHotspotName->text()); + json.insert("apBand", fdIs2_4G->isChecked() ? 0 : 1); json.insert("password", fdHotspotPassword->text()); if(gSelCards.count() == 1) { auto waitingDlg = new WaitingDlg(this, tr("ConfigurationHotSpot")+" ..."); diff --git a/LedOK/device/ctrlnetworkpanel.h b/LedOK/device/ctrlnetworkpanel.h index 712c5f2..f2475e3 100644 --- a/LedOK/device/ctrlnetworkpanel.h +++ b/LedOK/device/ctrlnetworkpanel.h @@ -47,10 +47,11 @@ private: QPushButton *btnLanSet, *btnLanGet; QLabel *label_5; QLabel *lbWifiName; + QComboBox *fdWifiName; + QRadioButton *fdIs2_4G; QLabel *lbWifiPassword; QRadioButton *fdIsWifi, *fdIsHotspot; - QComboBox *fdWifiName; QLineEdit *fdWifiPassword; QPushButton *btnScan; QPushButton *btnWiFiSet; diff --git a/LedOK/device/progressesdlg.cpp b/LedOK/device/progressesdlg.cpp new file mode 100644 index 0000000..f846133 --- /dev/null +++ b/LedOK/device/progressesdlg.cpp @@ -0,0 +1,65 @@ +#include "progressesdlg.h" +#include "gutil/qcore.h" +#include "gutil/qgui.h" +#include "gutil/qnetwork.h" +#include "globaldefine.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ProgressesDlg::ProgressesDlg(QWidget *parent) : QDialog(parent) { + resize(1280, 720); + setWindowFlag(Qt::WindowMaximizeButtonHint); + + auto vBox = new VBox(this); + vBox->setContentsMargins(6, 0, 6, 0); + + table = new TreeWidget; + table->addCol("#", "", 20); + table->addCol("id", "ID", 125); + table->addCol("ip", "IP", 95); + table->addCol("alias", tr("Alias"), 80); + table->addCol("progress", tr("Progress"), 100); + table->addCol("res", tr("State"), 200, QHeaderView::Stretch); + table->setDefs()->setHeaderAlignC(); + table->setSelectionMode(QAbstractItemView::NoSelection); + vBox->addWidget(table); +} + +void ProgressesItem::sendProgress(const QString &id) { + QJsonObject json; + json.insert("_id", id); + json.insert("_type", id); + auto reply = NetReq("http://"+text("ip")+":2016/settings").timeout(30000).post(json); + ConnReply(reply, this) [=] { + if(treeWidget()==0) return; + JValue json; + auto err = errStrWithJson(reply, &json); + if(! err.isEmpty()) { + setRes(id+" "+tr("Error")+": "+err, Qt::red); + return; + } + auto progre = json["progress"].toInt(); + if(progre >= 100) { + fdProgress->setValue(100); + setRes("FPGA "+tr("Install Success"), Qt::darkGreen); + } else if(progre == -1) { + fdProgress->setValue(100); + setRes(tr("Same version, needn't update"), Qt::darkGreen); + } else if(progre == -2) { + setRes(tr("Install Failed")+" (-2)", Qt::red); + } else { + fdProgress->setValue(progre); + wait(250); + sendProgress(id); + } + }); +} diff --git a/LedOK/device/progressesdlg.h b/LedOK/device/progressesdlg.h new file mode 100644 index 0000000..bc9faf1 --- /dev/null +++ b/LedOK/device/progressesdlg.h @@ -0,0 +1,32 @@ +#ifndef PROGRESSESDLG_H +#define PROGRESSESDLG_H + +#include "gutil/qgui.h" +#include +#include + +class ProgressesItem; +class ProgressesDlg : public QDialog { + Q_OBJECT +public: + explicit ProgressesDlg(QWidget *parent = nullptr); + + QString filePath, fileId; + TreeWidget *table; +}; + +class ProgressesItem : public TreeWidgetItem, public QObject { +public: + using TreeWidgetItem::TreeWidgetItem; + void setRes(const QString &tip, QColor color = Qt::green) { + auto res = "res"**treeWidget(); + setText(res, tip); + setToolTip(res, tip); + setForeground(res, color); + } + void sendProgress(const QString &id); + + QProgressBar *fdProgress; +}; + +#endif // PROGRESSESDLG_H diff --git a/LedOK/globaldefine.h b/LedOK/globaldefine.h index e27b7d8..15cb5aa 100644 --- a/LedOK/globaldefine.h +++ b/LedOK/globaldefine.h @@ -124,4 +124,12 @@ QString checkReplyForJson(QNetworkReply *, QString errField); gFdResInfo->append(card.id+" "+tip+" "+(err.isEmpty()?QCoreApplication::translate("Def","Success"):err));\ }); +class LocalObj : public QObject { +public : + int cnt = 1; + void reset() { + cnt = 0; + } +}; + #endif // GLOBALDEFINE_H diff --git a/LedOK/gutil/qgui.h b/LedOK/gutil/qgui.h index 30e72ae..57c8e79 100644 --- a/LedOK/gutil/qgui.h +++ b/LedOK/gutil/qgui.h @@ -390,7 +390,15 @@ public: treeWidget()->setItemWidget(this, column**treeWidget(), widget); } }; - +inline QWidget *WrapVCenter(QWidget *wgt) { + auto vvv = new VBox(new QWidget); + vvv->setContentsMargins(0,0,0,0); + vvv->setSpacing(0); + vvv->addStretch(); + vvv->addWidget(wgt); + vvv->addStretch(); + return vvv->parentWidget(); +} class TableWidget : public QTableWidget { Q_OBJECT public: diff --git a/LedOK/player/playwin.cpp b/LedOK/player/playwin.cpp index 1df0877..8ce9fd8 100644 --- a/LedOK/player/playwin.cpp +++ b/LedOK/player/playwin.cpp @@ -138,7 +138,15 @@ PlayWin::PlayWin(int x, int y, int width, int height, QString dir, const JValue src.view = video; } else if(src.type=="WebURL") { auto web = new QWebEngineView(box); + auto offX = source["offX"].toInt(); + auto offY = source["offY"].toInt(); + if(offX || offY) connect(web, &QWebEngineView::loadFinished, this, [=] { + disconnect(web, &QWebEngineView::loadFinished, this, 0); + web->page()->runJavaScript("window.scrollTo("+QString::number(offX)+", "+QString::number(offY)+")"); + }); + web->setZoomFactor(source["zoom"].toInt(100)/100.0); web->load(QUrl(source["url"].toString())); + web->setFocusPolicy(Qt::NoFocus); src.view = web; } else if(src.type=="Timer") src.view = new EleTimer(source, box); diff --git a/LedOK/progpanel.cpp b/LedOK/progpanel.cpp index 27c6afd..31f96dd 100644 --- a/LedOK/progpanel.cpp +++ b/LedOK/progpanel.cpp @@ -129,8 +129,7 @@ ProgPanel::ProgPanel(QWidget *parent) : QWidget(parent) { dlg.exec(); mProgTree->clear(); - QStringList progNames = QDir(mProgsDir).entryList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks); - for(auto &pro_name : progNames) addProFile(mProgsDir + "/" + pro_name + "/pro.json"); + addProFiles(); }); bnExport = new QPushButton(tr("Export")); @@ -260,13 +259,8 @@ ProgPanel::ProgPanel(QWidget *parent) : QWidget(parent) { } } } - //查找根路径下的项目文件夹,查找文件夹下的节目pro.json信息,包括节目名称,大小,像素,备注等信息 - if(! mProgsDir.isEmpty()) { - QDir root_dir(mProgsDir); - auto pro_list = root_dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks); - for(auto &pro_name : pro_list) addProFile(mProgsDir + "/" + pro_name + "/pro.json"); - } + if(! mProgsDir.isEmpty()) addProFiles(); QSettings settings; if(settings.value("ProgramListSortOrder").toInt()==0) mProgTree->sortByColumn(settings.value("ProgramListSortColumn").toInt(),Qt::SortOrder::AscendingOrder); else mProgTree->sortByColumn(settings.value("ProgramListSortColumn").toInt(),Qt::SortOrder::DescendingOrder); @@ -294,33 +288,37 @@ void ProgPanel::transUi() { btnPlay->setText(tr("Play")+"/"+tr("Stop")); } -void ProgPanel::addProFile(const QString &file) { - QFile qFile(file); - if(! qFile.exists()) return; - if(! qFile.open(QIODevice::ReadOnly)) return; - auto data = qFile.readAll(); - qFile.close(); - QString error; - auto json = JFrom(data, &error); - if(! error.isEmpty()) return; - auto item = new ProgItem(mProgTree); - item->mProgsDir = mProgsDir; - item->mName = json["name"].toString(); - item->mWidth = json["resolution"]["w"].toInt(); - item->mHeight = json["resolution"]["h"].toInt(); - item->mRemark = json["remarks"].toString(); - item->isVer = json["isVer"].toBool(); - auto partLengths = json["splitWidths"].toArray(); - for(auto &partLength : partLengths) { - auto len = partLength.toInt(); - if(item->maxLen < len) item->maxLen = len; - item->partLens.emplace_back(len); +void ProgPanel::addProFiles() { + auto progNames = QDir(mProgsDir).entryList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks); + for(auto &progName : progNames) { + auto file = mProgsDir + "/" + progName + "/pro.json"; + QFile qFile(file); + if(! qFile.exists()) continue; + if(! qFile.open(QIODevice::ReadOnly)) continue; + auto data = qFile.readAll(); + qFile.close(); + QString error; + auto json = JFrom(data, &error); + if(! error.isEmpty()) continue; + auto item = new ProgItem(mProgTree); + item->mProgsDir = mProgsDir; + item->mName = progName; + item->mWidth = json["resolution"]["w"].toInt(); + item->mHeight = json["resolution"]["h"].toInt(); + item->mRemark = json["remarks"].toString(); + item->isVer = json["isVer"].toBool(); + auto partLengths = json["splitWidths"].toArray(); + for(auto &partLength : partLengths) { + auto len = partLength.toInt(); + if(item->maxLen < len) item->maxLen = len; + item->partLens.emplace_back(len); + } + item->m_fsize = json["file_size"].toDouble(); + item->mProgDir = item->mProgsDir + "/" + item->mName; + item->m_orgName = item->mName; + item->setText("lasttime", QFileInfo(file).lastModified().toString("yyyy-MM-dd hh:mm:ss")); + item->init(); } - item->m_fsize = json["file_size"].toDouble(); - item->mProgDir = item->mProgsDir + "/" + item->mName; - item->m_orgName = item->mName; - item->setText("lasttime", QFileInfo(file).lastModified().toString("yyyy-MM-dd hh:mm:ss")); - item->init(); } void ProgPanel::onEditClicked(bool){ diff --git a/LedOK/progpanel.h b/LedOK/progpanel.h index 6de2f70..3ad6b88 100644 --- a/LedOK/progpanel.h +++ b/LedOK/progpanel.h @@ -17,7 +17,7 @@ protected: void changeEvent(QEvent *) override; void transUi(); bool checkIfNameRepeated(const QString &name, QTreeWidgetItem *skip = nullptr); - void addProFile(const QString &); + void addProFiles(); public slots: void onEditClicked(bool f); diff --git a/LedOK/program/eweb.cpp b/LedOK/program/eweb.cpp index 93201af..3509062 100644 --- a/LedOK/program/eweb.cpp +++ b/LedOK/program/eweb.cpp @@ -1,9 +1,8 @@ #include "eweb.h" +#include "gutil/qgui.h" #include -#include #include #include -#include EWeb::EWeb(EBase *multiWin) : EBase(multiWin) { mType = EBase::Web; @@ -12,6 +11,9 @@ EWeb::EWeb(const JObj &json, EBase *multiWin) : EBase(multiWin) { mType = EBase::Web; setBaseAttr(json); url = json["url"].toString(); + zoom = json["zoom"].toInt(100); + _x = json["offX"].toInt(0); + _y = json["offY"].toInt(0); } void EWeb::paint(QPainter *painter, const QStyleOptionGraphicsItem *a, QWidget *b) { @@ -28,41 +30,83 @@ void EWeb::paint(QPainter *painter, const QStyleOptionGraphicsItem *a, QWidget * } QWidget* EWeb::attrWgt() { - auto wgtAttr = new QWidget(); - auto vBox = new QVBoxLayout(wgtAttr); + auto wgtAttr = new QWidget; + auto vBox = new VBox(wgtAttr); vBox->setContentsMargins(6, 0, 6, 0); - if(mMultiWin!=nullptr) vBox->setSpacing(3); + if(mMultiWin) vBox->setSpacing(3); addBaseAttrWgt(vBox); - auto hBox = new QHBoxLayout; - hBox->addWidget(new QLabel(tr("Basic Properties"))); + auto hBox = new HBox(vBox); + hBox->addLabel(tr("Basic Properties")); - auto line = new QFrame(); + auto line = new QFrame; line->setFrameShape(QFrame::HLine); line->setFrameShadow(QFrame::Sunken); hBox->addWidget(line, 1); - vBox->addLayout(hBox); - - hBox = new QHBoxLayout; + hBox = new HBox(vBox); hBox->addSpacing(6); - hBox->addWidget(new QLabel("URL: ")); + hBox->addLabel("URL:"); auto url_fd = new QLineEdit(url); hBox->addWidget(url_fd); connect(url_fd, &QLineEdit::textChanged, this, [this](const QString &text) { url = text; }); - vBox->addLayout(hBox); + + hBox = new HBox(vBox); + auto lb = hBox->addLabel(tr("Zoom")+":"); + lb->setMinimumWidth(70); + lb->setAlignment(Qt::AlignVCenter|Qt::AlignRight); + + auto fdZoom = new QSpinBox; + fdZoom->setRange(1, 99999); + fdZoom->setValue(zoom); + connect(fdZoom, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [=](int value) { + zoom = value; + }); + hBox->addWidget(fdZoom); + hBox->addSpacing(-3); + hBox->addLabel("%"); + hBox->addStretch(); + + + hBox = new HBox(vBox); + lb = hBox->addLabel(tr("Offset")+" X:"); + lb->setMinimumWidth(70); + lb->setAlignment(Qt::AlignVCenter|Qt::AlignRight); + + auto fdX = new QSpinBox; + fdX->setRange(0, 99999); + fdX->setValue(_x); + connect(fdX, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [=](int value) { + _x = value; + }); + hBox->addWidget(fdX); + hBox->addSpacing(9); + + hBox->addLabel("Y:"); + auto fdY = new QSpinBox; + fdY->setRange(0, 99999); + fdY->setValue(_y); + connect(fdY, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [=](int value) { + _y = value; + }); + hBox->addWidget(fdY); + hBox->addStretch(); + vBox->addStretch(); return wgtAttr; } JObj EWeb::attrJson() const { - JObj oRoot; - addBaseAttr(oRoot); - oRoot["elementType"] = "Web"; - oRoot["url"] = url; - return oRoot; + JObj obj; + addBaseAttr(obj); + obj["elementType"] = "Web"; + obj["url"] = url; + obj["zoom"] = zoom; + obj["offX"] = _x; + obj["offY"] = _y; + return obj; } diff --git a/LedOK/program/eweb.h b/LedOK/program/eweb.h index c7b635f..7731f0f 100644 --- a/LedOK/program/eweb.h +++ b/LedOK/program/eweb.h @@ -21,6 +21,7 @@ public: JObj attrJson() const override; QString url; + int zoom = 100, _x = 0, _y = 0; }; #endif // EWEB_H diff --git a/LedOK/program/gentmpthread.cpp b/LedOK/program/gentmpthread.cpp index ba45ec7..c19c2bc 100644 --- a/LedOK/program/gentmpthread.cpp +++ b/LedOK/program/gentmpthread.cpp @@ -506,6 +506,9 @@ JObj GenTmpThread::convertWeb(const JValue &res) { dst["_type"] = "WebURL"; dst["name"] = "WebURL"; dst["url"] = res["url"]; + dst["zoom"] = res["zoom"]; + dst["offX"] = res["offX"]; + dst["offY"] = res["offY"]; return dst; } JObj GenTmpThread::convertTimer(const JValue &json) { diff --git a/LedOK/ts/app_en.ts b/LedOK/ts/app_en.ts index 3cad429..6ae5353 100644 --- a/LedOK/ts/app_en.ts +++ b/LedOK/ts/app_en.ts @@ -56,982 +56,969 @@ CtrlAdvancedPanel - + Advanced Advanced - + Screen Width(pixel) Screen Width(pixel) - + Width Width - - + + Height Height - - - - - - - + + + - + + + + - - - - + + - - + + + + + Set Set - + Alias Alias - + Web Server Address: Web Server Address: - - MCU Uploading - - - - + Setting - + Traffic screen settings - + Setting protocol ... - + Set protocol - + Getting protocol ... - + Get protocol - - + + Port - + Realtime Address: - + Firmware Management - + update or uninstall - + Clear Clear - + Check Apk Check Apk - + Uninstall Uninstall - + Running check Running check - + Restart Restart - + Check Log Check Log - + Start LedSet4 Start LedSet4.0 (Apk Display2.0 and higher) - + Open ADB Open ADB debugging function - + Post Custom JSON Post Custom JSON - - + - - + + + Clear Program Clear Program - + Config Config - + Refresh Refresh - + Restore to default Restore to default - + Taxi top screen configuration Taxi top screen configuration - - + + Service:High Out of service:Low Service:High Out of service:Low - - + + Service:Low Out of service:High Service:Low Out of service:High - + Binding *.ic account indentity voucher Binding *.ic account indentity voucher - + Rotate Rotate - + Min brightness Min brightness - - - + + + Readback Readback - + Send Send - + Max brightness Max brightness - - + + SetScreenSize Set Screen Size - - - - - + + + + Success Success - + Compant ID: Company ID - + Compant ID Company ID - - + + SetOnlineAddr Set Web server address - - + + ClearRealtimeServer Clear - - + + SetRealtimeServer Set realtimer address - - + + RestartAndroid Restart - - + + running running - - + + no running no running - + Check Apk Version Check Apk Version - - + + UninstallSoftware Uninstall - - + + Check apk running status - - + + OpenAdb Open ADB debugging function - + indentity voucher (*.ic) indentity voucher (*.ic) - - - - + + + + InvokeTaxiAppFunction Binding certificate - - + + AliIotSetting - + Software Version Info - + Package - + Version - - + + Package name is null - + Clearing Program - - + + Timeout Timeout - - - - + + + + Failed - + Getting Log - - - - - - - - - - - - - + + + + + + + + + + + + Error Error - + Setting Timing Reboot - + Set Timing Reboot - + Getting Timing Reboot - + Get Timing Reboot - + totalResolution FPGA total resoltuion - + strCurDisplayResolution Cur display resolution - - + + File not exist - + Getting Player State - - - + + + Get Player State - - + + Player State - - + + Cannot Open File - + Uploading - + Update Update - - + + Set Display Mode - - + + Get Display Mode - - + + Set Screen Offset - - + + Get Screen Offset - + Open file Failed Open file Failed - + Setting Wallpaper - - + + Set Wallpaper - + System Updating - - + + System Update - + Getting MCU Version - + MCU Version - + Select File Select File - + Setting player background - - + + Set player background - + Clearing player background - - - - - - - - + + + + + + + + Clear player background - - + + GetScreenRotation Get Screen Rotation - - - + + + Charging Station - + Setting Baud Rate - + Set Baud Rate - + Getting Baud Rate - + Get Baud Rate - - + + Text is empty - - + + Json Parse Error - - + + Json isn't an Object - + Info - + Setting card work mode ... - + Set card work mode - + Getting card work mode ... - + Get card work mode - + Input password Input password - + Change Password Change Password - + Get Receive Card Num - + Resolution Config - + Full screen - + Part - + Display Mode - + Screen Position - + Offset - + Hidden Settings - + Click right button to hide - - - Update MCU - - - - + Get MCU Version - + Baud Config - + Model - + Uart - + Baud - - - - - - - - + + + + + + + + Get - + Timing Reboot - + Protocol - + Server - + Client - - + + SetScreenRotation Set screen rotation - - + + SetMinBrightness Set min brightness value - - + + SetMaxBrightness Set maximum brightness value - - + + GetMinBrightness Get min brightness - - + + GetMaxBrightness Get maximum brightness - - + + Card work mode - - + + SetSpecialResolution Set Special Resolution - - + + GetSpecialResolution Get Special Resolution - - + + CleanDisplayScreenSize Restore to default relolution - - + + SetHighForBusy Set level for busy - - + + GetStateForBusy Get level of busy - - + + SetCardAlias Set alias - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + + + Tip Tip - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NoSelectedController Please select screen first - + InputWidthTip Please enter the correct width pixel value - + InputHeightTip Please enter the correct height pixel value - + Password is error Password is error @@ -1511,182 +1498,182 @@ CtrlNetworkPanel - + Wire Enther(RJ45) Configuration Wire Enther(RJ45) Configuration - + DHCP - + Specify IP Specify IP - + IP Address IP Address - + Gateway Gateway - + DNS Address DNS Address - - - + + + Set Set - - - - + + + + Readback Readback - + WIFI Configuration WiFi Configuration - + WiFi Mode WiFi Mode - + Cellular Config Cellular Config - + Enable Cellular Data Enable Cellular Data - + Get cellular network status information Get cellular network status information - + Through the check status button Through the "check status" button, you can automatically match the country code MCC, and then select "operator" to get the corresponding APN information. - + Country ID(mcc): Country ID(mcc): - - + + Carrier Name Carrier Name - + APN(Required) APN(Required) - + Flight Mode Flight Mode - + WiFi name WiFi name - - - + + + Password Password - - + + Input password Input password - + Scan Scan - + Ap Mode AP - + OFF OFF - + ON ON - + AP name AP name - + Subnet mask Subnet mask - + Input ap name Input AP name - - - - - - - - - - + + + + + + + + + + Tip Tip - - - - - - - - - + + + + + + + + + NoSelectedController Please select screen first @@ -1741,331 +1728,331 @@ STATIC IP - - - + + + ConfigurationWiFi Configuration WiFi - - + + IsPortableHotSpot Get AP or WiFi - + GetWifiList Scan WiFi list - - + + ConfigurationHotSpot Configuration AP HotSpot - + success success - + WifiName WifiName - + ApName Ap Name - - + + GetCurrentAPN Get Current Apn - + GetSIMStatus Get SIM Status - - + + SetAPN Set APN - + 状态: Status: - + Error Error - + 未知 unknown - + 锁定状态,需要用户的PIN码解锁 Lock status, need user's pin code to unlock - + 锁定状态,需要用户的PUK码解锁 In the locked state, the PUK code of the user is required to be unlocked - + 锁定状态,需要网络的PIN码解锁 In the locked state, the PIN code of the user is required to be unlocked - + 就绪 be ready - + no checked sim card no checked sim card - + 国家码: MCC: - + 号码: number: - + 用户: User name: - + 信号: Signal: - + 信号正常 Signal OK - + 不在服务区 Not in service area - + 仅限紧急呼叫 Emergency call only - + 射频已经关闭 RF off - + 网络: Network type: - + 网络类型未知 unKnown - + GPRS网络 GPRS - + EDGE网络 EDGE - + UMTS网络 UMTS - + CDMA网络,IS95A 或 IS95B. CDM - + EVDO网络, revision 0. EVDO,revision 0. - + EVDO网络, revision A. EVDO,revision A. - + 1xRTT网络 1xRTT - + HSDPA网络 HSDPA - + HSUPA网络 HSUPA - + HSPA网络 HSPA - + 漫游: roam: - + Yes Yes - + No No - + 数据连接状态: Data connection status: - + 断开 OFF - + 正在连接 connecting - + 已连接 Connected - + 暂停 suspend - + 数据活动休眠状态: Data active sleep state: - + 活动,但无数据发送和接收 Active, but no data sent and received - + 活动,正在接收数据 Activity, receiving data - + 活动,正在发送数据 Activity, sending data - + 活动,正在接收和发送数据 Activity, receiving and sending data - + 休眠状态 Sleep state - + 信号强度: Signal strength: - + Set APN Info - + User - + Type - + Server - + Port - + Proxy - + MMS Port - + MMS Proxy - - + + SetSwitchSimData SetSwitchSimData - - + + ContrFlightMode Set flight mode - - + + GetFlightModeState Readback flight mode state @@ -3073,9 +3060,9 @@ - - - + + + Success @@ -4355,9 +4342,19 @@ EWeb - + Basic Properties - Basic properties + + + + + Zoom + + + + + Offset + @@ -4431,22 +4428,22 @@ PM - + day Days - + hour Hours - + min Mins - + sec Secs @@ -4928,17 +4925,17 @@ PlayWin - + Move to Top Left Move to Top Left - + Set Position - + Close Close @@ -4946,12 +4943,12 @@ PlayerBackSendThread - + Open file failed Open file failed - + Read file failed Read file failed @@ -5224,55 +5221,55 @@ ProgPanel - + New New - + Edit Edit - + Delete Delete - + Import Import - - - + + + Export Export - - + + Send Send - + Publish Publish - + Name Name - + Choose Directory Choose Directory @@ -5292,55 +5289,55 @@ :solution(s) already exist.are you sure you want to overwrite the existing solution(s)? - - + + Play - - + + Stop Stop - + Resolution Resolution - + File Size File Size - + Last Modify Last Modified - + USB Update - + Program name conflicted Program name conflicted - + Warning Warning - + You will delete the selected solution(s),are you sure? You will delete the selected solution(s),are you sure? - + Tip Info Tip Info @@ -5348,21 +5345,62 @@ ProgPortDlg - + Solution Name Solution Name - + Progress Progress - + Done Done + + ProgressesDlg + + + Alias + + + + + Progress + + + + + State + + + + + ProgressesItem + + + Error + Error + + + + Install Success + + + + + Same version, needn't update + + + + + Install Failed + + + QAbstractSocket diff --git a/LedOK/ts/app_ja.ts b/LedOK/ts/app_ja.ts index 68dd45b..b78c35e 100644 --- a/LedOK/ts/app_ja.ts +++ b/LedOK/ts/app_ja.ts @@ -56,982 +56,979 @@ CtrlAdvancedPanel - + Advanced 上級パラメータ - + Screen Width(pixel) 画面幅(ピクセル) - + Width - - + + Height 高さ - - - - - - - + + + - + + + + - - - - + + - - + + + + + Set セット - + Alias 別名 - + Web Server Address: Webサーバのアドレス: - - MCU Uploading - - - - + Setting - + Traffic screen settings - + Setting protocol ... - + Set protocol - + Getting protocol ... - + Get protocol - - + + Port ポート - + Firmware Management ファームウェア管理 - + update or uninstall 更新またはアンインストール - + Clear クリア - + Check Apk APKを検出 - + Uninstall アンマウント - + Running check 運転状態モニタ - + Restart 再起動 - + Check Log ログを見る - + Start LedSet4 - + Open ADB ADBデバッグ機能を開く - + Post Custom JSON Post Custom JSON - - + - - + + + Clear Program 番組をクリア - + Config の設定 - + Refresh 更新 - + Restore to default 標準の値を復元 - + Taxi top screen configuration タクシートップ画面の設定 - - + + Service:High Out of service:Low 客がいます:高 客がいません:低 - - + + Service:Low Out of service:High 客がいます:低 客がいません:高 - + Binding *.ic account indentity voucher テーピングtaxihubプラットフォームのユーザーID証明書 - + Rotate 回転 - + Realtime Address: - + Min brightness 最低輝度 - - - + + + Readback 読み戻し - + Send 送信 - + Max brightness 最高輝度 - - + + SetScreenSize スクリーンのピクセルサイズを設定 - - - - - + + + + Success 成功 - + Compant ID: 会社ID: - + Compant ID 会社ID - - + + SetOnlineAddr ウェブサーバのアドレスを設定 - - + + ClearRealtimeServer クリア - - + + SetRealtimeServer RealTimerアドレスを設定 - - + + RestartAndroid 再起動 - - + + running 実行中 - - + + no running 実行されていません - + Check Apk Version チェック APK バージョン - - + + UninstallSoftware アンマウント - - + + Check apk running status APK運転状態監視 - - + + OpenAdb ADBデバッグ機能を開く - + indentity voucher (*.ic) 身分証明書(*.ic) - - - - + + + + InvokeTaxiAppFunction 証明書をバインド - - + + AliIotSetting - + Software Version Info - + Package - + Version バージョン - - + + Package name is null パッケージ名は空です - + Clearing Program プログラムクリア - - + + Timeout タイムアウト - - - - + + + + Failed 失敗 - + Getting Log ログを取得中 - - - - - - - - - - - - - + + + + + + + + + + + + Error エラー - + Setting Timing Reboot スケジュール再起動を設定中 - + Set Timing Reboot スケジュール再起動の設定 - + Getting Timing Reboot スケジュール再起動を取得中 - + Get Timing Reboot スケジュール再起動の取得 - + totalResolution トータル解像度 - + strCurDisplayResolution 表示解像度 - - + + File not exist ファイルが存在しません - + Getting Player State プレーヤーの状態を取得しています - - - + + + Get Player State プレーヤーの状態の取得 - - + + Player State プレーヤーの状態 - - + + Cannot Open File ファイルのオープンに失敗しました - + Uploading アップロード中 - + Update 更新 - - + + Set Display Mode - - + + Get Display Mode - - + + Set Screen Offset - - + + Get Screen Offset - + Open file Failed ファイルのオープンに失敗しました - + Setting Wallpaper - - + + Set Wallpaper - + System Updating - - + + System Update - + + Upload error + アップロード エラー + + + + Upgrading + アップグレード中 + + + Getting MCU Version - + MCU Version - + Select File ファイルを選択 - + Setting player background - - + + Set player background - + Clearing player background - - - - - - - - + + + + + + + + Clear player background - - + + GetScreenRotation 画面回転の取得 - - - + + + Charging Station じゅうでんぐい - + Setting Baud Rate - + Set Baud Rate - + Getting Baud Rate - + Get Baud Rate - - + + Text is empty - - + + Json Parse Error - - + + Json isn't an Object - + Info 情報 - + Setting card work mode ... - + Set card work mode - + Getting card work mode ... - + Get card work mode - + Input password パスワードを入力 - + Change Password パスワード変更 - + Get Receive Card Num 受信カード数の取得 - + Resolution Config 解像度設定 - + Full screen フルスクリーン - + Part セクション - + Display Mode 表示モード - + Screen Position - + Offset - + Hidden Settings - + Click right button to hide - - - Update MCU - - - - + Get MCU Version - + Baud Config - + Model - + Uart - + Baud - - - - - - - - + + + + + + + + Get 得る - + Timing Reboot スケジュール再起動 - + Protocol プロトコル - + Server サービス - + Client クライアント - - + + SetScreenRotation 画面の回転を設定する - - + + SetMinBrightness 最小輝度値を設定します - - + + SetMaxBrightness 輝度最大値を設定 - - + + GetMinBrightness 輝度最小値を取得 - - + + GetMaxBrightness 輝度最大値を取得 - - + + Card work mode - - + + SetSpecialResolution 解像度を設定 - - + + GetSpecialResolution 読み込み解像度 - - + + CleanDisplayScreenSize デフォルトの解像度を復元 - - + + SetHighForBusy 客レベルの設定 - - + + GetStateForBusy ゲストレベルを取得 - - + + SetCardAlias エイリアスの設定 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + + + Tip 提示 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NoSelectedController 先に大きいスクリーンを選んでください - + InputWidthTip 正しい幅のピクセル値を入力してください - + InputHeightTip 正しい高さのピクセル値を入力してください - + Password is error パスワード @@ -1511,187 +1508,187 @@ CtrlNetworkPanel - + Wire Enther(RJ45) Configuration 有線ネットワークの設定 - + DHCP - + Specify IP 指定IP - + IP Address IPアドレス - + Gateway ゲートウェイ - + DNS Address DNSアドレス - - - + + + Set セット - - - - + + + + Readback 読み戻し - + WIFI Configuration WiFiの設定 - + WiFi Mode WiFi機能 - + Cellular Config セルラーデータ構成 - + Enable Cellular Data セルラーデータを有効にする - + Get cellular network status information セルラーネットワーク状態情報を取得する - + Through the check status button 「ステータスを取得」ボタンを使用すると、国コードに自動的に一致し、対応するAPN情報を取得するには「事業者」を選択します。 - + Set APN Info APN情報を設定する - + Country ID(mcc): 国号(mcc): - - + + Carrier Name 運営者 - + APN(Required) APN(必ず記入) - + Flight Mode 飛行モード - + WiFi name WiFiの名前 - - - + + + Password パスワード - - + + Input password パスワードを入力 - + Scan スキャン - + Ap Mode APエネルギー - + OFF オフ - + ON オン - + AP name AP名 - + Subnet mask サブネットマスク - + Input ap name APの名前を入力 - - - - - - - - - - + + + + + + + + + + Tip 提示 - - - - - - - - - + + + + + + + + + NoSelectedController 先に大きいスクリーンを選んでください @@ -1746,326 +1743,326 @@ 静的IP - - - + + + ConfigurationWiFi WiFiの設定 - - + + IsPortableHotSpot ホットスポットとWiFiモードの取得 - + GetWifiList スキャンWiFi - - + + ConfigurationHotSpot ホットスポットの設定 - + success 成功 - + WifiName Wifiの名前 - + ApName AP名前 - - + + GetCurrentAPN APN情報の取得 - + GetSIMStatus SIM状態を取得 - - + + SetAPN APNの設定 - + 状态: 状態: - + Error エラー - + 未知 不明 - + 锁定状态,需要用户的PIN码解锁 ロック状態は、ユーザのPINコードのロック解除が必要です - + 锁定状态,需要用户的PUK码解锁 ロック状態は、ユーザのPUKコードのアンロックが必要です - + 锁定状态,需要网络的PIN码解锁 ロック状態は、ユーザのPINコードのアンロックが必要です - + 就绪 準備完了 - + no checked sim card simカードが検出されませんでした - + 国家码: 国号: - + 号码: 番号: - + 用户: ユーザ: - + 信号: 信号: - + 信号正常 信号が正常である - + 不在服务区 サービスエリアにはいません - + 仅限紧急呼叫 緊急呼び出しのみ - + 射频已经关闭 無線周波数はすでに閉鎖されました - + 网络: ネットワークタイプ: - + 网络类型未知 不明 - + GPRS网络 GPRS - + EDGE网络 EDGE - + UMTS网络 UMTS - + CDMA网络,IS95A 或 IS95B. CDM - + EVDO网络, revision 0. EVDO,revision 0. - + EVDO网络, revision A. EVDO,revision A. - + 1xRTT网络 1xRTT - + HSDPA网络 HSDPA - + HSUPA网络 HSUPA - + HSPA网络 HSPA - + 漫游: ローミング: - + Yes - + No いいえ - + 数据连接状态: データ接続状態: - + 断开 切断 - + 正在连接 接続中 - + 已连接 接続済み - + 暂停 一時停止 - + 数据活动休眠状态: データアクティビティの休止状態: - + 活动,但无数据发送和接收 アクティブですが、データ送信と受信はありません - + 活动,正在接收数据 アクティブ、データ受信中 - + 活动,正在发送数据 イベント、データ送信中 - + 活动,正在接收和发送数据 イベント、データ受信と送信中 - + 休眠状态 スリープ状態 - + 信号强度: 信号の強度: - + User ユーザー - + Type タイプ - + Server サービス - + Port ポート - + Proxy プロキシ - + MMS Port MMS ポート - + MMS Proxy MMS プロキシ - - + + SetSwitchSimData 4G/5Gスイッチの設定 - - + + ContrFlightMode 飛行モードの設定 - - + + GetFlightModeState 飛行モード状態を取得 @@ -3073,9 +3070,9 @@ デバイス応答 - - - + + + Success @@ -4354,10 +4351,20 @@ EWeb - + Basic Properties 基本的な属性 + + + Zoom + + + + + Offset + + EleTimer @@ -4430,22 +4437,22 @@ 午後 - + day - + hour - + min - + sec @@ -4927,17 +4934,17 @@ PlayWin - + Move to Top Left 左上隅に移動 - + Set Position 設定位置 - + Close 閉じる @@ -4945,12 +4952,12 @@ PlayerBackSendThread - + Open file failed ファイルのオープンに失敗しました - + Read file failed ファイルの読み込みに失敗しました @@ -5223,55 +5230,55 @@ ProgPanel - + New 新規 - + Edit 編集 - + Delete 削除 - + Import インポート - - - + + + Export 出力 - - + + Send 送信 - + Publish 転送 - + Name 名前 - + Choose Directory ディレクトリを選択 @@ -5291,55 +5298,55 @@ 解決策は既に存在します。既存の解決策を上書きしたいと思いますか? - - + + Play 再生 - - + + Stop 停止 - + Resolution 解像度 - + File Size サイズ - + Last Modify 最終更新日 - + USB Update USB更新 - + Program name conflicted 番組名が重なる - + Warning 警告 - + You will delete the selected solution(s),are you sure? 是否确认删除选中的节目? - + Tip Info ヒント @@ -5347,21 +5354,62 @@ ProgPortDlg - + Solution Name リスト名 - + Progress 程度 - + Done 完了 + + ProgressesDlg + + + Alias + 別名 + + + + Progress + 程度 + + + + State + 状態 + + + + ProgressesItem + + + Error + エラー + + + + Install Success + インストールに成功しました + + + + Same version, needn't update + 同じバージョン、更新不要 + + + + Install Failed + インストールに失敗しました + + QAbstractSocket diff --git a/LedOK/ts/app_pt.ts b/LedOK/ts/app_pt.ts index 16ea685..f23e4cf 100644 --- a/LedOK/ts/app_pt.ts +++ b/LedOK/ts/app_pt.ts @@ -56,982 +56,979 @@ CtrlAdvancedPanel - + Advanced Avançado - + Screen Width(pixel) Largura do display(pixel) - + Width Largura - - + + Height Altura - - - - - - - + + + - + + + + - - - - + + - - + + + + + Set Config - + Alias Apelido - + Web Server Address: Endereço do Web Server: - - MCU Uploading - - - - + Setting - + Getting Baud Rate - + Traffic screen settings - + Setting protocol ... - + Set protocol - + Getting protocol ... - + Get protocol - - + + Port - + Model - + Realtime Address: Servidor de Realtime: - + update or uninstall - + Clear Limpar - + Check Apk Conferi Apk - + Uninstall Desinstalar - + Running check Conferir - + Restart Reiniciar - + Check Log Conferir Log - + Start LedSet4 Iniciar LedSet4.0 (Apk Display2.0 and higher) - + Open ADB Abri ADB debug - + Post Custom JSON Publicar JSON - - + - - + + + Clear Program Limpar Programa - + Config Config - + Refresh Atualizar - + Restore to default Restaurar padrão - + Taxi top screen configuration Taxi top screen configuration - - + + Service:High Out of service:Low Service:Altura fora do pardão:Diminuir - - + + Service:Low Out of service:High Service:Altura fora do padrão:Aumentar - + Binding *.ic account indentity voucher Vincular *.identificação da conta - + Rotate Rotacionar - + Min brightness Brilho minimo - - - + + + Readback Ler - + Send Enviar - + Max brightness Brilho Maximo - - + + SetScreenSize Conf. tamanho do painel - - - - - + + + + Success Successo - + Compant ID: ID da empresa - + Compant ID ID da empresa - - + + SetOnlineAddr Config o webserver - - + + ClearRealtimeServer Limpar - - + + SetRealtimeServer Config o server de realtimer - - + + RestartAndroid Reiniciar - - + + running Rodar - - + + no running não rodar - + Check Apk Version Checar a versão da APK - - + + UninstallSoftware Desistalar - - + + Check apk running status Checar status do APK - - + + OpenAdb Abrir o debug - + indentity voucher (*.ic) Comprovante de ID (*.ic) - - - - + + + + InvokeTaxiAppFunction Vincular certificado - - + + AliIotSetting - + Software Version Info - + Package - + Version - - + + Package name is null - + Clearing Program - - + + Timeout Tempo esgotado - - - - + + + + Failed Falhou - + Getting Log Obtendo log - - - - - - - - - - - - - + + + + + + + + + + + + Error Erro - + Getting Player State - - + + Player State - - - + + + Get Player State - + Setting Timing Reboot Config tempo de reiniciar - + Set Timing Reboot Config tempo de reiniciar - + Getting Timing Reboot Config tempo de reiniciar - + Get Timing Reboot Obtendo tempo de reinicialização - - + + Get Display Mode - - + + Set Screen Offset - + totalResolution Resolução total de FPGA - + strCurDisplayResolution Resolução do display - - + + File not exist Arquivo não encontrado - - + + Cannot Open File Não pode abrir arquivo - + Uploading Atualizando - + Update Atualizar - - + + Set Display Mode Config Display - - + + Get Screen Offset Obter display Offset - + Open file Failed Falaha em abrir - + Setting Wallpaper Config plano fundo - - + + Set Wallpaper Config plano fundo - + System Updating Atualizando - - + + System Update Sistema atualizado - + + Upload error + Erro ao atualizar + + + + Upgrading + Actualização + + + Getting MCU Version Obtendo versão - + MCU Version Verão de MCU - + Select File Arquivo selecionado - + Setting player background Config plano de fundo - - + + Set player background Config plano de fundo - + Clearing player background Apagar plano de fundo - - - - - - - - + + + + + + + + Clear player background Apagar plano de fundo - - + + GetScreenRotation Rotação do display - - - + + + Charging Station - + Setting Baud Rate Config Baud Rate - + Set Baud Rate Config Baud Rate - + Get Baud Rate Config Baud Rate - - + + Text is empty Testo em branco - - + + Json Parse Error Erro Json - - + + Json isn't an Object - + Info Info - + Setting card work mode ... - + Set card work mode - + Getting card work mode ... - + Get card work mode - + Input password Entre com a senha - + Change Password Troque a senha - + Get Receive Card Num Obter o número de cartões receptores - + Resolution Config Config de resolução - + Full screen Full screen - + Part Parte - + Display Mode Modo do display - + Screen Position Posição da tela - + Offset Offset - + Hidden Settings Esconder Config - + Click right button to hide Clique com o botão direito para esconder - - - Update MCU - - - - + Get MCU Version Versão de MCU - + Baud Config Config Baudrate - + Uart Uart - + Baud Baud - - - - - - - - + + + + + + + + Get Obter - + Firmware Management - + Timing Reboot Reiniciando - + Protocol Protocolo - + Server Servidor - + Client Cliente - - + + SetScreenRotation Config a rotação do display - - + + SetMinBrightness Config brilho minimo - - + + SetMaxBrightness Config brilho maximo - - + + GetMinBrightness Obter bilho - - + + GetMaxBrightness Obter brilho - - + + Card work mode - - + + SetSpecialResolution Config resolução especial - - + + GetSpecialResolution Ler resolução especial - - + + CleanDisplayScreenSize Restaurar resolução - - + + SetHighForBusy Set level for busy - - + + GetStateForBusy Get level of busy - - + + SetCardAlias Config apelido - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + + + Tip Dica - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NoSelectedController Selecionar o display - + InputWidthTip Entre com a correta largura - + InputHeightTip Entre com a correta altura - + Password is error Senha esta errada @@ -1511,177 +1508,177 @@ CtrlNetworkPanel - + Wire Enther(RJ45) Configuration Wire Enther(RJ45) Configuração - + DHCP DHCP - + Specify IP IP - + IP Address Endereço IP - + Gateway Gateway - - - + + + Set Config - - - - + + + + Readback Ler - + WIFI Configuration Config WiFi - + WiFi Mode Modo WiFi - + Cellular Config Config Celular - + Enable Cellular Data Habilitar celular - + Get cellular network status information Obter informação da rede - + Through the check status button Atraves do botão de status, voce pode escolher automaticamente o codigo MCC do pais;selecione para obtera correta informação de APN . - + Country ID(mcc): ID do país(mcc): - - + + Carrier Name Operadora - + APN(Required) APN(requerida) - + Flight Mode Modo avião - + WiFi name Nome WiFi - - - + + + Password Senha - - + + Input password Entre com a senha - + Scan Escanear - + Ap Mode AP - + OFF Desligar - + ON Ligar - + AP name Nome do AP - + Subnet mask Mascara subnet - + Input ap name Entre com nome do AP - - - - - - - - - - + + + + + + + + + + Tip Dica - - - - - - - - - + + + + + + + + + NoSelectedController Selecione o display @@ -1736,336 +1733,336 @@ IP estático - - - + + + ConfigurationWiFi Configuração WiFi - - + + IsPortableHotSpot Obter AP ou WiFi - + GetWifiList Escanear lista WiFi - - + + ConfigurationHotSpot Configuração do AP - + success successo - + WifiName Nome Wifi - + ApName Nome Ap - - + + GetCurrentAPN Obter APN atual - + GetSIMStatus Obter estatus do SIM - - + + SetAPN Config APN - + 状态: Estatus: - + Error Erro - + 未知 Desconhecido - + 锁定状态,需要用户的PIN码解锁 Travar; necessita de pin para alterar - + 锁定状态,需要用户的PUK码解锁 Travado, necessário PUK para destravar - + 锁定状态,需要网络的PIN码解锁 Travado, necessário PUK para destravar - + 就绪 Lendo - + no checked sim card SIM card não checado - + 国家码: MCC: - + 号码: numero: - + 用户: Nome de usuário: - + 信号: Sinal: - + 信号正常 Sinal OK - + 不在服务区 Fora da area de serviço - + 仅限紧急呼叫 Apenas chamadas de emergencia - + 射频已经关闭 RF desligado - + 网络: Tipo de network: - + 网络类型未知 desconhecido - + GPRS网络 GPRS - + EDGE网络 EDGE - + UMTS网络 UMTS - + CDMA网络,IS95A 或 IS95B. CDM - + EVDO网络, revision 0. EVDO,revision 0. - + EVDO网络, revision A. EVDO,revision A. - + 1xRTT网络 1xRTT - + HSDPA网络 HSDPA - + HSUPA网络 HSUPA - + HSPA网络 HSPA - + 漫游: roam: - + Yes Sim - + No Não - + 数据连接状态: Status: - + 断开 Desligado - + 正在连接 conectando - + 已连接 Conectado - + 暂停 Suspenso - + 数据活动休眠状态: Dados ativo, estado suspenso : - + 活动,但无数据发送和接收 Ativo, mas sen enviar / receber dados - + 活动,正在接收数据 Ativo, recebendo dados - + 活动,正在发送数据 Ativo enviando ddos - + 活动,正在接收和发送数据 Ativo, enviando e recebendo dados - + 休眠状态 Modo suspenso - + 信号强度: Nível de sinal: - + DNS Address Endereço DNS - + Set APN Info Config APN - + User Usuario - + Type Tipo - + Server Server - + Port Porta - + Proxy Proxy - + MMS Port Porta - + MMS Proxy Proxy - - + + SetSwitchSimData Selec SIM - - + + ContrFlightMode Selec modo avião - - + + GetFlightModeState Ler estado modo avião @@ -3073,9 +3070,9 @@ Equipamento replicado - - - + + + Success @@ -3545,12 +3542,12 @@ s - s + s Duration - Duração + Duração @@ -4355,10 +4352,20 @@ EWeb - + Basic Properties Propriedades + + + Zoom + + + + + Offset + Offset + EleTimer @@ -4431,22 +4438,22 @@ PM - + day Dias - + hour Horas - + min Mins - + sec Segs @@ -4928,17 +4935,17 @@ PlayWin - + Move to Top Left Mover superior esquerdo - + Set Position Config posição - + Close Fechar @@ -4946,12 +4953,12 @@ PlayerBackSendThread - + Open file failed Abrir aqrquivo - + Read file failed Ler arquivo @@ -5224,60 +5231,60 @@ ProgPanel - + New Novo - + Edit Editar - + Delete Deletar - + Import Importar - - - + + + Export Exportar - - + + Send Enviar - + USB Update - + Publish Publicar - + Name Nome - + Choose Directory Escolha o diretorio @@ -5297,50 +5304,50 @@ :Arquivo ja criado.Você quer sobrescrever? - - + + Play Tocar - - + + Stop Parar - + Resolution Resolução - + File Size Tamanho do arquivo - + Last Modify Ultima modificação - + Program name conflicted Conflito de nome - + Warning Aviso - + You will delete the selected solution(s),are you sure? Você quer deletar este arquivo? - + Tip Info Info @@ -5348,21 +5355,62 @@ ProgPortDlg - + Solution Name Nome - + Progress Progresso - + Done Concluido + + ProgressesDlg + + + Alias + Apelido + + + + Progress + Progresso + + + + State + Estado + + + + ProgressesItem + + + Error + Erro + + + + Install Success + Sucesso + + + + Same version, needn't update + A mesma versão, não é necessária actualização + + + + Install Failed + A instalação falhou + + QAbstractSocket diff --git a/LedOK/ts/app_zh_CN.ts b/LedOK/ts/app_zh_CN.ts index da0a4d8..9d19afe 100644 --- a/LedOK/ts/app_zh_CN.ts +++ b/LedOK/ts/app_zh_CN.ts @@ -56,982 +56,979 @@ CtrlAdvancedPanel - + Advanced 高级设置 - + Screen Width(pixel) 屏幕宽(像素) - + Width - - + + Height - - - - - - - + + + - + + + + - - - - + + - - + + + + + Set 设置 - + Alias 别名 - + Web Server Address: Web服务器地址: - - MCU Uploading - 正在上传单片机 - - - + Setting 正在设置 - + Traffic screen settings 交通屏设置 - + Setting protocol ... 正在设置协议 ... - + Set protocol 设置协议 - + Getting protocol ... 正在回读协议 ... - + Get protocol 回读协议 - - + + Port 端口 - + Realtime Address: Realtime 地址: - + Firmware Management 固件管理 - + update or uninstall 更新或卸载 - + Clear 清空 - + Check Apk 检查Apk - + Uninstall 卸载 - + Running check 运行状态监测 - + Restart 重启 - + Check Log 查看日志 - + Start LedSet4 使用 LedSet4.0 配置LED模组(Apk Display2.0以上版本) - + Open ADB 打开ADB调试功能 - + Post Custom JSON Post Custom JSON - - + - - + + + Clear Program 清除节目 - + Config 配置 - + Refresh 刷新 - + Restore to default 恢复默认值 - + Taxi top screen configuration 车顶有无客电平配置 - - + + Service:High Out of service:Low 有客:高电平 无客:低电平 - - + + Service:Low Out of service:High 有客:低电平 无客:高电平 - + Binding *.ic account indentity voucher 绑定taxihub平台用户身份凭证 - + Rotate 旋转 - + Min brightness 最低亮度 - - - + + + Readback 回读 - + Send 发送 - + Max brightness 最高亮度 - - + + SetScreenSize 设置屏幕像素尺寸 - - - - - + + + + Success 成功 - + Compant ID: 公司ID: - + Compant ID 公司ID - - + + SetOnlineAddr 设置web服务器地址 - - + + ClearRealtimeServer 清除 - - + + SetRealtimeServer 设置RealTimer地址 - - + + RestartAndroid 重启 - - + + running 正在运行 - - + + no running 没有运行 - + Check Apk Version 查询已安装apk版本 - - + + UninstallSoftware 卸载 - - + + Check apk running status 监测APK运行状态 - - + + OpenAdb 打开ADB调试功能 - + indentity voucher (*.ic) 身份凭证(*.ic) - - - - + + + + InvokeTaxiAppFunction 绑定证书 - - + + AliIotSetting - + Software Version Info 软件版本信息 - + Package 包名 - + Version 版本 - - + + Package name is null 包名为空 - + Clearing Program 正在清除节目 - - + + Timeout 超时 - - - - + + + + Failed 失败 - + Getting Log 正在获取日志 - - - - - - - - - - - - - + + + + + + + + + + + + Error 错误 - + Setting Timing Reboot 正在设置定时重启 - + Set Timing Reboot 设置定时重启 - + Getting Timing Reboot 正在获取定时重启 - + Get Timing Reboot 获取定时重启 - + totalResolution 包括行场数的分辨率 - + strCurDisplayResolution 当前显示屏分辨率 - - + + File not exist 文件不存在 - + Getting Player State 正在获取播放器状态 - - - + + + Get Player State 获取播放器状态 - - + + Player State 播放器状态 - - + + Cannot Open File 文件打开失败 - + Uploading 正在上传 - + Update 更新 - - + + Set Display Mode 设置显示模式 - - + + Get Display Mode 获取显示模式 - - + + Set Screen Offset 设置屏幕偏移 - - + + Get Screen Offset 获取屏幕偏移 - + Open file Failed 文件打开失败 - + Setting Wallpaper 正在设置系统桌面背景 - - + + Set Wallpaper 设置系统桌面背景 - + System Updating 系统升级中 - - + + System Update 系统升级 - + + Upload error + 上传错误 + + + + Upgrading + 升级中 + + + Getting MCU Version 正在获取单片机版本 - + MCU Version 单片机版本 - + Select File 选择文件 - + Setting player background 正在设置播放器背景 - - + + Set player background 设置播放器背景 - + Clearing player background 正在清除播放器背景 - - - - - - - - + + + + + + + + Clear player background 清除播放器背景 - - + + GetScreenRotation 获取屏幕旋转 - - - + + + Charging Station 充电桩 - + Setting Baud Rate 正在设置波特率 - + Set Baud Rate 设置波特率 - + Getting Baud Rate 正在获取波特率 - + Get Baud Rate 获取波特率 - - + + Text is empty 文本为空 - - + + Json Parse Error - - + + Json isn't an Object - + Info 信息 - + Setting card work mode ... 正在设置控制卡工作模式 ... - + Set card work mode 设置控制卡工作模式 - + Getting card work mode ... 正在回读控制卡工作模式 ... - + Get card work mode 回读控制卡工作模式 - + Input password 输入密码 - + Change Password 修改密码 - + Get Receive Card Num 获取接收卡数量 - + Resolution Config 分辨率配置 - + Full screen 全屏 - + Part 局部 - + Display Mode 显示模式 - + Screen Position 屏幕位置 - + Offset 偏移 - + Hidden Settings 隐藏的设置 - + Click right button to hide 点击右键隐藏 - - - Update MCU - 更新单片机 - - - + Get MCU Version 获取单片机版本 - + Baud Config 波特率配置 - + Model 设备型号 - + Uart 串口节点 - + Baud 波特率 - - - - - - - - + + + + + + + + Get 获取 - + Timing Reboot 定时重启 - + Protocol 协议 - + Server 服务端 - + Client 客户端 - - + + SetScreenRotation 设置屏幕旋转 - - + + SetMinBrightness 设置最小的亮度值 - - + + SetMaxBrightness 设置亮度最大值 - - + + GetMinBrightness 获取亮度最小值 - - + + GetMaxBrightness 获取亮度最大值 - - + + Card work mode 控制卡工作模式 - - + + SetSpecialResolution 设置分辨率 - - + + GetSpecialResolution 读取分辨率 - - + + CleanDisplayScreenSize 恢复默认分辨率 - - + + SetHighForBusy 设置有无客电平 - - + + GetStateForBusy 获取有无客电平 - - + + SetCardAlias 设置别名 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + + + Tip 提示 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NoSelectedController 请先选择大屏幕 - + InputWidthTip 请输入正确的宽度像素值 - + InputHeightTip 请输入正确的高度像素值 - + Password is error 密码错误 @@ -1511,187 +1508,187 @@ CtrlNetworkPanel - + Wire Enther(RJ45) Configuration 有线网配置 - + DHCP - + Specify IP 指定IP - + IP Address IP地址 - + Gateway 网关 - + DNS Address DNS地址 - - - + + + Set 设置 - - - - + + + + Readback 回读 - + WIFI Configuration WiFi配置 - + WiFi Mode 使用WiFi - + Cellular Config 蜂窝数据配置 - + Enable Cellular Data 启用蜂窝数据 - + Get cellular network status information 获取蜂窝网络状态信息 - + Through the check status button 通过“获取状态”按钮可以自动匹配国家码,然后选择“运营商”可获取到相应的APN信息。 - + Set APN Info 设置APN信息 - + Country ID(mcc): 国家码(mcc): - - + + Carrier Name 运营商 - + APN(Required) APN(必填) - + Flight Mode 飞行模式 - + WiFi name WiFi名称 - - - + + + Password 密码 - - + + Input password 输入密码 - + Scan 扫描 - + Ap Mode 使用热点 - + OFF - + ON - + AP name 热点名称 - + Subnet mask 子网掩码 - + Input ap name 输入AP名称 - - - - - - - - - - + + + + + + + + + + Tip 提示 - - - - - - - - - + + + + + + + + + NoSelectedController 请先选择大屏幕 @@ -1746,326 +1743,326 @@ 静态IP - - - + + + ConfigurationWiFi 配置WiFi - - + + IsPortableHotSpot 获取热点和WiFi模式 - + GetWifiList 扫描WiFi - - + + ConfigurationHotSpot 配置热点 - + success 成功 - + WifiName Wifi名称 - + ApName 热点名称 - - + + GetCurrentAPN 获取APN信息 - + GetSIMStatus 获取SIM状态 - - + + SetAPN 设置APN - + 状态: 状态: - + Error 错误 - + 未知 未知 - + 锁定状态,需要用户的PIN码解锁 锁定状态,需要用户的PIN码解锁 - + 锁定状态,需要用户的PUK码解锁 锁定状态,需要用户的PUK码解锁 - + 锁定状态,需要网络的PIN码解锁 锁定状态,需要网络的PIN码解锁 - + 就绪 就绪 - + no checked sim card 检测不到sim卡 - + 国家码: 国家码: - + 号码: 号码: - + 用户: 用户: - + 信号: 信号: - + 信号正常 信号正常 - + 不在服务区 不在服务区 - + 仅限紧急呼叫 仅限紧急呼叫 - + 射频已经关闭 射频已经关闭 - + 网络: 网络: - + 网络类型未知 未知 - + GPRS网络 GPRS - + EDGE网络 EDGE - + UMTS网络 UMTS - + CDMA网络,IS95A 或 IS95B. CDM - + EVDO网络, revision 0. EVDO,revision 0. - + EVDO网络, revision A. EVDO,revision A. - + 1xRTT网络 1xRTT - + HSDPA网络 HSDPA - + HSUPA网络 HSUPA - + HSPA网络 HSPA - + 漫游: 漫游: - + Yes - + No - + 数据连接状态: 数据连接状态: - + 断开 断开 - + 正在连接 正在连接 - + 已连接 已连接 - + 暂停 暂停 - + 数据活动休眠状态: 数据活动休眠状态: - + 活动,但无数据发送和接收 活动,但无数据发送和接收 - + 活动,正在接收数据 活动,正在接收数据 - + 活动,正在发送数据 活动,正在发送数据 - + 活动,正在接收和发送数据 活动,正在接收和发送数据 - + 休眠状态 休眠状态 - + 信号强度: - + User 用户 - + Type 类型 - + Server 服务端 - + Port 端口 - + Proxy 代理 - + MMS Port 彩信端口 - + MMS Proxy 彩信代理 - - + + SetSwitchSimData 设置4G/5G开关 - - + + ContrFlightMode 配置飞行模式 - - + + GetFlightModeState 获取飞行模式状态 @@ -3073,9 +3070,9 @@ 设备回复 - - - + + + Success @@ -4355,10 +4352,20 @@ EWeb - + Basic Properties 基本属性 + + + Zoom + 缩放 + + + + Offset + 偏移 + EleTimer @@ -4431,22 +4438,22 @@ 下午 - + day - + hour - + min - + sec @@ -4928,17 +4935,17 @@ PlayWin - + Move to Top Left 移动到左上角 - + Set Position 设置位置 - + Close 关闭 @@ -4946,12 +4953,12 @@ PlayerBackSendThread - + Open file failed 文件读取失败 - + Read file failed 文件读取失败 @@ -5224,55 +5231,55 @@ ProgPanel - + New 新建 - + Edit 编辑 - + Delete 删除 - + Import 导入 - - - + + + Export 导出 - - + + Send 发送 - + Publish 发布 - + Name 名称 - + Choose Directory 选择目录 @@ -5292,55 +5299,55 @@ :节目已存在。是否确实要覆盖现有节目? - - + + Play 播放 - - + + Stop 停止 - + Resolution 分辨率 - + File Size 文件大小 - + Last Modify 最后修改时间 - + USB Update USB更新 - + Program name conflicted 节目名称重复 - + Warning 警告 - + You will delete the selected solution(s),are you sure? 是否确认删除选中的节目? - + Tip Info 提示 @@ -5348,21 +5355,62 @@ ProgPortDlg - + Solution Name 节目名称 - + Progress 进度 - + Done 完成 + + ProgressesDlg + + + Alias + 别名 + + + + Progress + 进度 + + + + State + 状态 + + + + ProgressesItem + + + Error + 错误 + + + + Install Success + 安装成功 + + + + Same version, needn't update + 相同版本, 不需要更新 + + + + Install Failed + 安装失败 + + QAbstractSocket diff --git a/LedOK/ts/app_zh_TW.ts b/LedOK/ts/app_zh_TW.ts index 216cdd1..73f4920 100644 --- a/LedOK/ts/app_zh_TW.ts +++ b/LedOK/ts/app_zh_TW.ts @@ -56,982 +56,979 @@ CtrlAdvancedPanel - + Advanced 高級設定 - + Screen Width(pixel) 螢幕寬(點數) - + Width - - + + Height - - - - - - - + + + - + + + + - - - - + + - - + + + + + Set 設定 - + Alias 別名 - + Web Server Address: Web伺服器地址: - - MCU Uploading - 正在上傳單片機 - - - + Setting 正在設定 - + Traffic screen settings 交通屏設定 - + Setting protocol ... 正在設定協定 - + Set protocol 設定協定 - + Getting protocol ... 正在回讀協定 ... - + Get protocol 回讀協定 - - + + Port - + Realtime Address: Realtime 地址: - + Firmware Management 固件管理 - + update or uninstall 更新或卸載 - + Clear 清空 - + Check Apk 檢查Apk - + Uninstall 卸載 - + Running check 運行狀態監測 - + Restart 重啓 - + Check Log 查看日誌 - + Start LedSet4 - + Open ADB 打開ADB調試功能 - + Post Custom JSON Post Custom JSON - - + - - + + + Clear Program 清除節目 - + Config 配寘 - + Refresh 檢測 - + Restore to default 恢復預設值 - + Taxi top screen configuration 車頂有無客電平配寘 - - + + Service:High Out of service:Low 有客:高電平無客:低電平 - - + + Service:Low Out of service:High 有客:低電平 無客:高電平 - + Binding *.ic account indentity voucher 綁定taxihub平臺用戶身份憑證 - + Rotate 旋轉 - + Min brightness 最低亮度 - - - + + + Readback 回讀 - + Send 發送 - + Max brightness 最高亮度 - - + + SetScreenSize 設定螢幕點數尺寸 - - - - - + + + + Success 成功 - + Compant ID: 公司ID: - + Compant ID 公司ID - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NoSelectedController 請先選擇大螢幕 - - + + SetOnlineAddr 設定web伺服器地址 - - + + ClearRealtimeServer 清除 - - + + SetRealtimeServer 設定RealTimer地址 - - + + RestartAndroid 重啓 - - + + running 正在運行 - - + + no running 沒有運行 - + Check Apk Version 査詢已安裝apk版本 - - + + UninstallSoftware 卸載 - - + + Check apk running status 監測APK運行狀態 - - + + OpenAdb 打開ADB調試功能 - + indentity voucher (*.ic) 身份憑證(*.ic) - - - - + + + + InvokeTaxiAppFunction 綁定證書 - - + + AliIotSetting - + Software Version Info 軟體版本資訊 - + Package 包名 - + Version 版本 - - + + Package name is null 包名為空 - + Clearing Program 正在清除節目 - - + + Timeout 超時 - - - - + + + + Failed 失敗 - + Getting Log 讀取日誌 - - - - - - - - - - - - - + + + + + + + + + + + + Error 錯誤 - + Setting Timing Reboot 正在設定定時重啓 - + Set Timing Reboot 設定定時重啓 - + Getting Timing Reboot 正在獲取定時重啓 - + Get Timing Reboot 獲取定時重啓 - + totalResolution 行数を含む解像度 - + strCurDisplayResolution 當前顯示分辯率 - - + + File not exist 檔案不存在 - + Getting Player State 正在獲取播放機狀態 - - - + + + Get Player State 獲取播放機狀態 - - + + Player State 播放機狀態 - - + + Cannot Open File 檔案打開失敗 - + Uploading 正在上傳 - + Update 更新 - - + + Set Display Mode 設定顯示模式 - - + + Get Display Mode 獲取顯示模式 - - + + Set Screen Offset 設定螢幕偏移 - - + + Get Screen Offset 獲取螢幕偏移 - + Open file Failed 檔案打開失敗 - + Setting Wallpaper 正在設定系統桌面背景 - - + + Set Wallpaper 設定系統桌面背景 - + System Updating 系統升級中 - - + + System Update 系統升級 - + + Upload error + 上傳錯誤 + + + + Upgrading + 陞級中 + + + Getting MCU Version 正在獲取單片機版本 - + MCU Version 單片機版本 - + Select File 選擇檔案 - + Setting player background 正在設定播放機背景 - - + + Set player background 設定播放機背景 - + Clearing player background 正在清除播放機背景 - - - - - - - - + + + + + + + + Clear player background 清除播放機背景 - - + + GetScreenRotation 獲取荧幕旋轉 - - - + + + Charging Station 充電樁 - + Setting Baud Rate 正在設定串列傳輸速率 - + Set Baud Rate 設定串列傳輸速率 - + Getting Baud Rate 正在讀取串列傳輸速率 - + Get Baud Rate 讀取串列傳輸速率 - - + + Text is empty - - + + Json Parse Error - - + + Json isn't an Object - + Info 資訊 - + Setting card work mode ... 正在設定控制卡工作模式 ... - + Set card work mode 設定控制卡工作模式 - + Getting card work mode ... 正在回讀控制卡工作模式 ... - + Get card work mode 回讀控制卡工作模式 - + Input password 輸入密碼 - + Change Password 修改密碼 - + Get Receive Card Num 獲取接收卡數量 - + Resolution Config 分辯率配寘 - + Full screen 全屏 - + Part 局部 - + Display Mode 顯示模式 - + Screen Position 螢幕位置 - + Offset 偏移 - + Hidden Settings 隱藏的設定 - + Click right button to hide 點擊右鍵隱藏 - - - Update MCU - 更新單片機 - - - + Get MCU Version 獲取單片機版本 - + Baud Config 串列傳輸速率配寘 - + Model 設備型號 - + Uart 串口節點 - + Baud 串列傳輸速率 - - - - - - - - + + + + + + + + Get 讀取 - + Timing Reboot 定時重啓 - + Protocol 協定 - + Server 服務端 - + Client 用戶端 - - + + SetScreenRotation 設定螢幕旋轉 - - + + SetMinBrightness 設定最小的亮度值 - - + + SetMaxBrightness 設定亮度最大值 - - + + GetMinBrightness 獲取亮度最小值 - - + + GetMaxBrightness 獲取亮度最大值 - - + + Card work mode 控制卡工作模式 - - + + SetSpecialResolution 設定分辯率 - - + + GetSpecialResolution 讀取分辯率 - - + + CleanDisplayScreenSize 恢復默認分辯率 - - + + SetHighForBusy 設定有無客電平 - - + + GetStateForBusy 獲取有無客電平 - - + + SetCardAlias 設定別名 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + + + Tip 提示 - + InputWidthTip 請輸入正確的寬度點數值 - + InputHeightTip 請輸入正確的高度點數值 - + Password is error 密碼錯誤 @@ -1516,187 +1513,187 @@ CtrlNetworkPanel - + Wire Enther(RJ45) Configuration 有線網配寘 - + DHCP - + Specify IP 指定IP - + IP Address IP地址 - + Gateway 閘道 - + DNS Address DNS地址 - - - + + + Set 設定 - - - - + + + + Readback 回讀 - + WIFI Configuration WiFi配寘 - + WiFi Mode 使用WiFi - + Cellular Config 蜂窩數據配寘 - + Enable Cellular Data 啟用蜂窩數據 - + Get cellular network status information 獲取蜂窩網絡狀態資訊 - + Through the check status button 通過“獲取狀態”按鈕可以自動匹配國家碼,然後選擇“運營商”可獲取到相應的APN資訊。 - + Set APN Info 設定APN資訊 - + Country ID(mcc): 国家码(mcc):國家碼(mcc): - - + + Carrier Name 運營商 - + APN(Required) APN(必填) - + Flight Mode 飛行模式 - + WiFi name WiFi名稱 - - - + + + Password 密碼 - - + + Input password 輸入密碼 - + Scan 掃描 - + Ap Mode 使用熱點 - + OFF - + ON - + AP name 熱點名稱 - + Subnet mask 子網路遮罩 - + Input ap name 輸入AP名稱 - - - - - - - - - - + + + + + + + + + + Tip 提示 - - - - - - - - - + + + + + + + + + NoSelectedController 請先選擇大螢幕 @@ -1751,326 +1748,326 @@ 靜態IP - - - + + + ConfigurationWiFi 配寘WiFi - - + + IsPortableHotSpot 獲取熱點和WiFi模式 - + GetWifiList 掃描WiFi - - + + ConfigurationHotSpot 配寘熱點 - + success 成功 - + WifiName Wifi名稱 - + ApName 熱點名稱 - - + + GetCurrentAPN 獲取APN資訊 - + GetSIMStatus 獲取SIM狀態 - - + + SetAPN 設定APN - + 状态: 狀態: - + Error 錯誤 - + 未知 未知 - + 锁定状态,需要用户的PIN码解锁 鎖定狀態,需要用戶的PIN碼解鎖 - + 锁定状态,需要用户的PUK码解锁 鎖定狀態,需要用戶的PUK碼解鎖 - + 锁定状态,需要网络的PIN码解锁 鎖定狀態,需要網絡的PIN碼解鎖 - + 就绪 就緒 - + no checked sim card 檢測不到sim卡 - + 国家码: 國家碼: - + 号码: 號碼: - + 用户: 用戶: - + 信号: 信号: - + 信号正常 訊號正常 - + 不在服务区 不在服務區 - + 仅限紧急呼叫 僅限緊急呼叫 - + 射频已经关闭 射頻已經關閉 - + 网络: 網絡: - + 网络类型未知 未知 - + GPRS网络 GPRS - + EDGE网络 EDGE - + UMTS网络 UMTS - + CDMA网络,IS95A 或 IS95B. CDM - + EVDO网络, revision 0. EVDO,revision 0. - + EVDO网络, revision A. EVDO,revision A. - + 1xRTT网络 1xRTT - + HSDPA网络 HSDPA - + HSUPA网络 HSUPA - + HSPA网络 HSPA - + 漫游: 漫遊: - + Yes - + No - + 数据连接状态: 數據連接狀態: - + 断开 斷開 - + 正在连接 正在連接 - + 已连接 已連接 - + 暂停 暫停 - + 数据活动休眠状态: 數據活動休眠狀態: - + 活动,但无数据发送和接收 活動,但無數據發送和接收 - + 活动,正在接收数据 活動,正在接收數據 - + 活动,正在发送数据 活動,正在發送數據 - + 活动,正在接收和发送数据 活動,正在接收和發送數據 - + 休眠状态 休眠狀態 - + 信号强度: 信號強度: - + User 用戶 - + Type 型態 - + Server 服務端 - + Port - + Proxy 代理 - + MMS Port 彩信埠 - + MMS Proxy 彩信代理 - - + + SetSwitchSimData 設定4G/5G開關 - - + + ContrFlightMode 配寘飛行模式 - - + + GetFlightModeState 獲取飛行模式狀態 @@ -3078,9 +3075,9 @@ 設備回復 - - - + + + Success @@ -4358,10 +4355,20 @@ EWeb - + Basic Properties 基本屬性 + + + Zoom + 縮放 + + + + Offset + 偏移 + EleTimer @@ -4434,22 +4441,22 @@ 下午 - + day - + hour - + min - + sec @@ -4931,17 +4938,17 @@ PlayWin - + Move to Top Left 移動到左上角 - + Set Position 設定位置 - + Close 關閉 @@ -4949,12 +4956,12 @@ PlayerBackSendThread - + Open file failed 檔案打開失敗 - + Read file failed 檔案讀取失敗 @@ -5227,55 +5234,55 @@ ProgPanel - + New 新建 - + Edit 編輯 - + Delete 删除 - + Import 導入 - - - + + + Export 匯出 - - + + Send 發送 - + Publish 發佈 - + Name 名稱 - + Choose Directory 選擇目錄 @@ -5295,55 +5302,55 @@ :節目已存在。是否確實要覆蓋現有節目? - - + + Play 播放 - - + + Stop 停止 - + Resolution 分辯率 - + File Size 文件大小 - + Last Modify 最後修改時間 - + USB Update USB更新 - + Program name conflicted 節目名稱重複 - + Warning 警告 - + You will delete the selected solution(s),are you sure? 是否確認删除選中的節目? - + Tip Info 提示 @@ -5351,21 +5358,62 @@ ProgPortDlg - + Solution Name 節目名稱 - + Progress 進度 - + Done 完成 + + ProgressesDlg + + + Alias + 別名 + + + + Progress + 進度 + + + + State + 陳述 + + + + ProgressesItem + + + Error + 錯誤 + + + + Install Success + 安裝成功 + + + + Same version, needn't update + 相同版本,不需要更新 + + + + Install Failed + 安裝失敗 + + QAbstractSocket