#ifndef MAIN_H #define MAIN_H #include "gutil/qjson.h" #include "program/progitem.h" #include #include #include #include #include #define PAGEDEL_SUFFIX "~temp~temp~temp" #define RECTF_INVALID QRectF(-9999, -9999, 0, 0) struct LedCard { QString id; QString ip; int mWidth = 0; int mHeight = 0; int bright = 100; int BrightnessLevel = 255; QString firmwareVer; QString HardVersion = "0000"; QString ScreenResolution; QString androidVersion; QString playerVer; QString alias; QString IMEI; bool hasPassword = false; bool isLocked = true; bool isScreenOn = true; bool isOnline = true; }; class Tick : public QOpenGLWidget { Q_OBJECT public: Tick(QWidget *parent = 0); void doFrame(); qint64 Sec; signals: void secChanged(const QDateTime &); }; enum { MainPage_DeviceManager = 0, MainPage_ProgManager, MainPage_Setting, MainPage_LoraScreen, MainPage_End, }; struct ST_ANSY_PROGRAM_PACKET { unsigned char SyncHead[3]{0x7e, 0x7e, 0x55}; unsigned char ucCommType; int iBaoLiu; unsigned int iLength; unsigned char pDataBuffer[20]; }; extern const QString UpdVerUrl; QString programsDir(); extern Tick *gTick; extern QString gFileHome; extern QString gApkHome; extern int gProgWidth, gProgHeight; class DevicePanel; extern DevicePanel *gDevicePanel; extern QList gSelCards; extern bool gVideoCompress; extern bool gVideoTranscoding; extern bool gTextAntialiasing; extern bool gWidthSplit; extern int gSendBatch; extern bool gHideDetect; extern bool gShowIP; extern bool gShowAlias; extern bool gShowLora; extern QTextEdit *gFdResInfo; extern ProgItem *gProgItem; extern quint64 dirFileSize(const QString &path); extern bool copyDir(const QString &source, const QString &destination, bool override); extern unsigned char GetCheckCodeIn8(unsigned char * pBuffer,unsigned int uiSize); enum _ENUM_CONTRL_WIDGET { Setting_Bright=0, Setting_PowerControl, Setting_NetCfg, Setting_VerifyClock, Setting_Encrypt, Setting_HDMI, Setting_Volume, Setting_Advanced, Setting_Test, Setting_End, }; class DeviceItem; extern DeviceItem *findItem(QString id); inline QString translate(const char *ctx, const char *key) { return QCoreApplication::translate(ctx, key); } inline int verCompare(const QString& a, const QString& b) { auto aparts = a.split("."); auto bparts = b.split("."); int cnt = qMin(aparts.count(), bparts.count()); for(int i=0; i bparts.count() ? aparts[cnt].toInt() : bparts[cnt].toInt(); } QString checkReply(QNetworkReply *, QJsonDocument * = 0); QString errStrWithJson(QNetworkReply *, JValue * = 0, QByteArray * = 0); QString errStrWithJson(QNetworkReply *, QString errField); QString checkReplyForJson(QNetworkReply *, QJsonDocument * = 0, QByteArray * = 0); void MergeFmt(QTextEdit *textEdit, const QTextCharFormat &fmt); #define Def_CtrlReqPre \ waitingDlg->show();\ auto card = gSelCards[0];\ auto reply = NetReq("http://"+card.ip+":2016/settings").post(json);\ connect(waitingDlg, &WaitingDlg::rejected, reply, &QNetworkReply::deleteLater); #define Def_CtrlSetReqAfter \ auto err = errStrWithJson(reply);\ if(! err.isEmpty()) {\ waitingDlg->close();\ QMessageBox::critical(this, translate("","Error"), err);\ return;\ }\ waitingDlg->success(); #define Def_CtrlSingleGetReply \ JValue json;\ auto err = errStrWithJson(reply, &json);\ if(! err.isEmpty()) {\ waitingDlg->close();\ QMessageBox::critical(this, translate("","Error"), err);\ return;\ } #define Def_CtrlSetMulti(tip) \ auto reply = NetReq("http://"+card.ip+":2016/settings").post(json);\ connect(reply, &QNetworkReply::finished, gFdResInfo, [=] {\ auto err = errStrWithJson(reply);\ gFdResInfo->append(card.id+" "+tip+" "+(err.isEmpty()?translate("","Success"):err));\ }); class LocalObj : public QObject { public : int cnt = 1; void reset() { cnt = 0; } }; #endif // MAIN_H