Compare commits
2 Commits
f4cc005daa
...
80ebceeeac
Author | SHA1 | Date | |
---|---|---|---|
![]() |
80ebceeeac | ||
![]() |
bf47b035f9 |
|
@ -27,7 +27,7 @@ CONFIG += embed_translations
|
|||
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
VERSION = 1.5.2
|
||||
VERSION = 2.0.0
|
||||
DEFINES += APP_VERSION=\\\"$$VERSION\\\"
|
||||
msvc {
|
||||
contains(QT_ARCH, i386) {
|
||||
|
|
|
@ -661,24 +661,24 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() {
|
|||
fd->append(card.id+" Prog JSON");
|
||||
TcpSocket tcp;
|
||||
tcp.connectToHost(card.ip, 3333);
|
||||
if(! tcp.waitForConnected()) {
|
||||
if(! tcp.waitForConnected(10000)) {
|
||||
tcp.close();
|
||||
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()) {
|
||||
tcp.close();
|
||||
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()) {
|
||||
tcp.close();
|
||||
if(lll.cnt==0) return;
|
||||
fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at WaitRead\n");
|
||||
tcp.close();
|
||||
continue;
|
||||
}
|
||||
fd->insertPlainText(tcp.readAll());
|
||||
|
@ -686,9 +686,9 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() {
|
|||
if(lll.cnt==0) return;
|
||||
fd->insertPlainText(tcp.readAll());
|
||||
}
|
||||
tcp.close();
|
||||
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("");
|
||||
}
|
||||
});
|
||||
|
@ -716,24 +716,24 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() {
|
|||
fd->append(card.id+" Prog Files");
|
||||
TcpSocket tcp;
|
||||
tcp.connectToHost(card.ip, 3333);
|
||||
if(! tcp.waitForConnected()) {
|
||||
if(! tcp.waitForConnected(10000)) {
|
||||
tcp.close();
|
||||
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()) {
|
||||
tcp.close();
|
||||
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()) {
|
||||
tcp.close();
|
||||
if(lll.cnt==0) return;
|
||||
fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at WaitRead\n");
|
||||
tcp.close();
|
||||
continue;
|
||||
}
|
||||
fd->insertPlainText(tcp.readAll());
|
||||
|
@ -741,9 +741,9 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() {
|
|||
if(lll.cnt==0) return;
|
||||
fd->insertPlainText(tcp.readAll());
|
||||
}
|
||||
tcp.close();
|
||||
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("");
|
||||
}
|
||||
});
|
||||
|
@ -771,24 +771,24 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() {
|
|||
fd->append(card.id+" Player Info");
|
||||
TcpSocket tcp;
|
||||
tcp.connectToHost(card.ip, 3333);
|
||||
if(! tcp.waitForConnected()) {
|
||||
if(! tcp.waitForConnected(10000)) {
|
||||
tcp.close();
|
||||
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()) {
|
||||
tcp.close();
|
||||
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()) {
|
||||
tcp.close();
|
||||
if(lll.cnt==0) return;
|
||||
fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at WaitRead\n");
|
||||
tcp.close();
|
||||
continue;
|
||||
}
|
||||
fd->insertPlainText(tcp.readAll());
|
||||
|
@ -796,9 +796,9 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() {
|
|||
if(lll.cnt==0) return;
|
||||
fd->insertPlainText(tcp.readAll());
|
||||
}
|
||||
tcp.close();
|
||||
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("");
|
||||
}
|
||||
});
|
||||
|
@ -826,24 +826,24 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() {
|
|||
fd->append(card.id+" Player Log");
|
||||
TcpSocket tcp;
|
||||
tcp.connectToHost(card.ip, 3333);
|
||||
if(! tcp.waitForConnected()) {
|
||||
if(! tcp.waitForConnected(10000)) {
|
||||
tcp.close();
|
||||
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()) {
|
||||
tcp.close();
|
||||
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()) {
|
||||
tcp.close();
|
||||
if(lll.cnt==0) return;
|
||||
fd->append(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at WaitRead\n");
|
||||
tcp.close();
|
||||
continue;
|
||||
}
|
||||
fd->insertPlainText(tcp.readAll());
|
||||
|
@ -851,9 +851,9 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() {
|
|||
if(lll.cnt==0) return;
|
||||
fd->insertPlainText(tcp.readAll());
|
||||
}
|
||||
tcp.close();
|
||||
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("");
|
||||
}
|
||||
});
|
||||
|
@ -882,10 +882,10 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() {
|
|||
fdProgress.setValue(0);
|
||||
TcpSocket tcp;
|
||||
tcp.connectToHost(card.ip, 3333);
|
||||
if(! tcp.waitForConnected()) {
|
||||
if(! tcp.waitForConnected(10000)) {
|
||||
tcp.close();
|
||||
if(! fdProgress.isVisible()) return;
|
||||
QMessageBox::information(this, tr("Error"), QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at WaitConnected");
|
||||
tcp.close();
|
||||
continue;
|
||||
}
|
||||
QFile file(tar+" "+card.id);
|
||||
|
@ -893,9 +893,9 @@ CtrlAdvancedPanel::CtrlAdvancedPanel() {
|
|||
auto resNum = tcp.write(JToBytes(json));
|
||||
tcp.flush();
|
||||
if(resNum == -1 || ! tcp.waitForBytesWritten()) {
|
||||
tcp.close();
|
||||
if(! fdProgress.isVisible()) return;
|
||||
QMessageBox::information(this, tr("Error"), QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at write");
|
||||
tcp.close();
|
||||
continue;
|
||||
}
|
||||
resNum = 0;
|
||||
|
|
|
@ -237,20 +237,17 @@ QPushButton:hover {background-color: #08b;}
|
|||
auto card = item->mCard;
|
||||
auto reply = NetReq("http://"+card.ip+":2016/settings").timeout(120000).post(json);
|
||||
ConnReply(reply, &msgBox) [=, &msgBox] {
|
||||
QJsonDocument json;
|
||||
QString err = checkReplyForJson(reply, &json);
|
||||
JValue json;
|
||||
auto err = errStrWithJson(reply, &json);
|
||||
if(! err.isEmpty()) {
|
||||
msgBox.setText(msgpre + tr("Player Version")+": "+err);
|
||||
return;
|
||||
}
|
||||
auto apps = json["apps"].toArray();
|
||||
foreach(QJsonValue value, apps) {
|
||||
QJsonObject app = value.toObject();
|
||||
if(app["packageName"].toString().contains("xixunplayer")) {
|
||||
auto apps = json["apps"];
|
||||
for(auto &app : apps) if(app["packageName"].toString().contains("xixunplayer")) {
|
||||
msgBox.setText(msgpre + tr("Player Version")+": "+app["versionName"].toString());
|
||||
return;
|
||||
}
|
||||
}
|
||||
msgBox.setText(msgpre + tr("Player Version")+":");
|
||||
});
|
||||
msgBox.exec();
|
||||
|
@ -303,7 +300,7 @@ QPushButton:hover {background-color: #08b;}
|
|||
return;
|
||||
}
|
||||
QByteArray data = QJsonDocument(QJsonObject{{"action", "getInfo"}}).toJson(QJsonDocument::Compact);
|
||||
foreach(auto ip, ips) if(mUdpSocket.writeDatagram(data, QHostAddress(ip), 22222) != data.length()) qDebug() << "Specify IP write Failed." << ip;
|
||||
for(auto &ip : ips) if(mUdpSocket.writeDatagram(data, QHostAddress(ip), 22222) != data.length()) qDebug() << "Specify IP write Failed." << ip;
|
||||
specifyIPDlg->accept();
|
||||
});
|
||||
hBox->addWidget(bnSearch);
|
||||
|
@ -331,12 +328,12 @@ void DevicePanel::sendGetInfo() {
|
|||
if(mUdpSocket.writeDatagram(data, QHostAddress("255.255.255.255"), 22222) != data.length()) qDebug() << "getInfo write to 255.255.255.255 failed";
|
||||
if(mUdpSocket.writeDatagram((char *)ccc, sizeof(ccc), QHostAddress("255.255.255.255"), 31296) != sizeof(ccc)) qDebug() << "getInfo write to 255.255.255.255 failed";
|
||||
auto networkinterfaces = QNetworkInterface::allInterfaces();
|
||||
foreach(auto face, networkinterfaces) {
|
||||
for(auto &face : networkinterfaces) {
|
||||
auto flags = face.flags();
|
||||
bool can = (flags & QNetworkInterface::IsRunning) && (flags & QNetworkInterface::CanBroadcast) && ! (flags & QNetworkInterface::IsLoopBack);
|
||||
if(! can) continue;
|
||||
auto addrEntries = face.addressEntries();
|
||||
foreach(QNetworkAddressEntry addrEntry, addrEntries) {
|
||||
for(QNetworkAddressEntry &addrEntry : addrEntries) {
|
||||
auto ip = addrEntry.ip();
|
||||
if(ip.protocol()!=QAbstractSocket::IPv4Protocol) continue;
|
||||
auto broadcast = addrEntry.broadcast();
|
||||
|
@ -346,7 +343,7 @@ void DevicePanel::sendGetInfo() {
|
|||
auto ipstr = fdIP->toPlainText();
|
||||
if(! ipstr.isEmpty()) {
|
||||
auto ips = ipstr.split("\n", Qt::SkipEmptyParts);
|
||||
foreach(auto ip, ips) if(mUdpSocket.writeDatagram(data, QHostAddress(ip), 22222) != data.length()) qDebug() << "getInfo specify IP write failed." << ip;
|
||||
for(auto &ip : ips) if(mUdpSocket.writeDatagram(data, QHostAddress(ip), 22222) != data.length()) qDebug() << "getInfo specify IP write failed." << ip;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -604,11 +601,14 @@ ImgDlg::ImgDlg(const QByteArray &data, QWidget *parent) : QDialog(parent) {
|
|||
setWindowFlag(Qt::WindowContextHelpButtonHint, 0);
|
||||
setWindowTitle(tr("Screenshot"));
|
||||
mImg.loadFromData(data);
|
||||
auto www = mImg.width();
|
||||
auto hhh = mImg.height();
|
||||
if(www <= 1600 && hhh <= 900) resize(www, hhh);
|
||||
else if(www > hhh) resize(900 * www / hhh, 900);
|
||||
else resize(1600, 1600 * hhh / www);
|
||||
auto width = mImg.width();
|
||||
auto height = mImg.height();
|
||||
if(width > 1600 || height > 900) {
|
||||
auto rate = qMin(1600.0 / width, 900.0 / height);
|
||||
width *= rate;
|
||||
height *= rate;
|
||||
}
|
||||
resize(width, height);
|
||||
}
|
||||
void ImgDlg::paintEvent(QPaintEvent *) {
|
||||
QPainter painter(this);
|
||||
|
|
|
@ -138,9 +138,8 @@ bool copyDir(const QString &source, const QString &destination, bool override) {
|
|||
}
|
||||
return !error;
|
||||
}
|
||||
unsigned char GetCheckCodeIn8(unsigned char * pBuffer,unsigned int uiSize) {
|
||||
unsigned int i=0;
|
||||
unsigned char ucCheckCode=0;
|
||||
for (i=0;i<uiSize;i++) ucCheckCode+=pBuffer[i];
|
||||
return (~ucCheckCode)&0x0ff;
|
||||
unsigned char GetCheckCodeIn8(unsigned char *str, unsigned int size) {
|
||||
unsigned char checkCode = 0;
|
||||
for(int i=0; i<size; i++) checkCode += str[i];
|
||||
return (~checkCode) & 0xff;
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ int main(int argc, char *argv[]) {
|
|||
QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
|
||||
#endif
|
||||
QApplication::setOrganizationName("Sysolution");
|
||||
QApplication::setOrganizationDomain("www.ledok.cn");
|
||||
QApplication::setOrganizationDomain("ledok.cn");
|
||||
QApplication::setApplicationName("LedOK Express");
|
||||
QApplication::setStyle("Fusion");
|
||||
QApplication a(argc, argv);
|
||||
|
|
|
@ -66,17 +66,7 @@ MainWindow::MainWindow(QWidget *parent) : BaseWin(parent) {
|
|||
});
|
||||
|
||||
QSettings settings;
|
||||
auto MainGeo = settings.value("MainGeo");
|
||||
if(! MainGeo.isValid()) {
|
||||
QSettings old("Shanghai Xixun Electronic Technology Co., Ltd.", "LedOK Express");
|
||||
MainGeo = old.value("MainGeo");
|
||||
if(MainGeo.isValid()) {
|
||||
auto keys = old.allKeys();
|
||||
for(auto &key : keys) settings.setValue(key, old.value(key));
|
||||
old.remove("");
|
||||
}
|
||||
}
|
||||
QString langName = settings.value("Language").toString();
|
||||
auto langName = settings.value("Language").toString();
|
||||
QAction *actLan = 0;
|
||||
#ifdef leyide
|
||||
auto actTW = new QAction("中文繁体");
|
||||
|
@ -180,7 +170,7 @@ MainWindow::MainWindow(QWidget *parent) : BaseWin(parent) {
|
|||
emit menuLang->triggered(actLan);
|
||||
QCoreApplication::installTranslator(&translator);
|
||||
|
||||
auto geo = MainGeo.toRect();
|
||||
auto geo = settings.value("MainGeo").toRect();
|
||||
if(geo.width()>=800 && geo.height()>=500 && geo.x()>=-600 && geo.x()<=1280 && geo.y()>=-200 && geo.y()<=800) setGeometry(geo);
|
||||
else resize(1280, 800);
|
||||
if(settings.value("MainIsMax", false).toBool()) setWindowState(Qt::WindowMaximized);
|
||||
|
@ -424,7 +414,7 @@ MainWindow::MainWindow(QWidget *parent) : BaseWin(parent) {
|
|||
#if(QT_VERSION_MAJOR > 5)
|
||||
updates = json["win-64"].toObject();
|
||||
#else
|
||||
updates = json["win"].toObject();
|
||||
updates = json["win-32"].toObject();
|
||||
#endif
|
||||
#endif
|
||||
#ifdef Q_OS_MAC
|
||||
|
|
|
@ -21,7 +21,7 @@ int borderImgMaxHeight = 0;
|
|||
struct Initer {
|
||||
Initer() {
|
||||
auto names = QDir("borders").entryList(QDir::Files);
|
||||
foreach(auto name, names) {
|
||||
for(auto &name : names) {
|
||||
BorderImg bdImg;
|
||||
bdImg.name = name;
|
||||
bdImg.img = QPixmap("borders/"+bdImg.name);
|
||||
|
@ -52,6 +52,9 @@ void EBase::setBaseAttr(const JObj &json) {
|
|||
mExitEffect = json["exitEffect"].toStr();
|
||||
mEntryDur = json["entryDur"].toInt();
|
||||
mExitDur = json["exitDur"].toInt();
|
||||
_rotate = json["rotate"].toInt();
|
||||
_blink = json["blink"].toDouble(1.0);
|
||||
_hasBlink = json["hasBlink"].toBool();
|
||||
auto geometry = json["geometry"];
|
||||
setPos(geometry["x"].toInt(), geometry["y"].toInt());
|
||||
setSize(geometry["w"].toInt(), geometry["h"].toInt());
|
||||
|
@ -83,6 +86,9 @@ void EBase::addBaseAttr(JObj &obj) const {
|
|||
obj.insert("exitEffect", mExitEffect);
|
||||
obj.insert("entryDur", mEntryDur);
|
||||
obj.insert("exitDur", mExitDur);
|
||||
obj["rotate"] = _rotate;
|
||||
obj["blink"] = _blink;
|
||||
obj["hasBlink"] = _hasBlink;
|
||||
if(bdImgIdx>-1) {
|
||||
obj["border"] = borderImgs[bdImgIdx].name;
|
||||
obj["borderSize"] = JArray{borderImgs[bdImgIdx].img.width(), borderImgs[bdImgIdx].img.height()};
|
||||
|
@ -227,11 +233,11 @@ void EBase::mousePressEvent(QGraphicsSceneMouseEvent *e) {
|
|||
auto scene = this->scene();
|
||||
if(0 == scene) return;
|
||||
auto items = scene->items();
|
||||
foreach(auto item, items) {
|
||||
for(auto item : items) {
|
||||
if(item==this) continue;
|
||||
auto ele = static_cast<EBase*>(item);
|
||||
auto ele = (EBase*) item;
|
||||
if(ele->mMultiWin) continue;
|
||||
mOtherEles.append(ele);
|
||||
mOtherEles.emplace_back(ele);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -241,7 +247,7 @@ void EBase::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
|
|||
if(Qt::LeftButton == event->button()) {
|
||||
mPressRel.setX(FLT_MAX);
|
||||
clearSnap();
|
||||
foreach(auto ele, mOtherEles) ele->clearSnap();
|
||||
for(auto ele : mOtherEles) ele->clearSnap();
|
||||
}
|
||||
}
|
||||
#define SnapSpace 6
|
||||
|
@ -253,15 +259,26 @@ void EBase::mouseMoveEvent(QGraphicsSceneMouseEvent *e){
|
|||
auto dstHor = mPressRel.x() + mousePos.x();
|
||||
auto dstVer = mPressRel.y() + mousePos.y();
|
||||
mLRSnap = mTBSnap = 0;
|
||||
foreach(auto ele, mOtherEles) ele->clearSnap();
|
||||
for(auto ele : mOtherEles) ele->clearSnap();
|
||||
if(mFrmSec==Qt::TitleBarArea) {
|
||||
if(type()!=Web) {
|
||||
dstHor = qBound(0.0, dstHor, gProgItem->mWidth - mWidth);
|
||||
dstVer = qBound(0.0, dstVer, gProgItem->mHeight - mHeight);
|
||||
if(dstHor==0) mLRSnap = 1;
|
||||
else if(dstHor==gProgItem->mWidth - mWidth) mLRSnap = 2;
|
||||
if(dstVer==0) mTBSnap = 1;
|
||||
else if(dstVer==gProgItem->mHeight - mHeight) mTBSnap = 2;
|
||||
if(mLRSnap==0) foreach(EBase *ele, mOtherEles) {//左右
|
||||
}
|
||||
if(fabs(dstHor) < SnapSpace) {
|
||||
dstHor = 0;
|
||||
mLRSnap = 1;
|
||||
} else if(fabs(dstHor - (gProgItem->mWidth - mWidth)) < SnapSpace) {
|
||||
dstHor = gProgItem->mWidth - mWidth;
|
||||
mLRSnap = 2;
|
||||
}if(fabs(dstVer) < SnapSpace) {
|
||||
dstVer = 0;
|
||||
mTBSnap = 1;
|
||||
} else if(fabs(dstVer - (gProgItem->mHeight - mHeight)) < SnapSpace) {
|
||||
dstVer = gProgItem->mHeight - mHeight;
|
||||
mTBSnap = 2;
|
||||
}
|
||||
if(mLRSnap==0) for(EBase *ele : mOtherEles) {//左右
|
||||
if(fabs(dstHor - ele->x()) < SnapSpace && ele->x() <= gProgItem->mWidth - mWidth) {
|
||||
dstHor = ele->x();
|
||||
mLRSnap = 1;
|
||||
|
@ -293,7 +310,7 @@ void EBase::mouseMoveEvent(QGraphicsSceneMouseEvent *e){
|
|||
break;
|
||||
}
|
||||
}
|
||||
if(mTBSnap==0) foreach(EBase *ele, mOtherEles) {//上下
|
||||
if(mTBSnap==0) for(EBase *ele : mOtherEles) {//上下
|
||||
if(fabs(dstVer-ele->y()) < SnapSpace && ele->y() <= gProgItem->mHeight - mHeight) {
|
||||
dstVer = ele->y();
|
||||
mTBSnap = 1;
|
||||
|
@ -329,16 +346,16 @@ void EBase::mouseMoveEvent(QGraphicsSceneMouseEvent *e){
|
|||
} else if(mFrmSec==Qt::BottomRightSection) {
|
||||
if(dstHor < m_handleLen) dstHor = m_handleLen;
|
||||
if(dstVer < m_handleLen) dstVer = m_handleLen;
|
||||
if(mType!=Audio && gProgItem->mWidth>0 && gProgItem->mHeight>0) {
|
||||
if(mType!=Web && gProgItem->mWidth>0 && gProgItem->mHeight>0) {
|
||||
dstHor = qMin(dstHor, gProgItem->mWidth - x());
|
||||
dstVer = qMin(dstVer, gProgItem->mHeight - y());
|
||||
}
|
||||
setSize(dstHor, dstVer);
|
||||
} else if(mFrmSec==Qt::RightSection) {
|
||||
if(dstHor < m_handleLen) dstHor = m_handleLen;
|
||||
if(mType!=Audio && gProgItem->mWidth>0 && gProgItem->mHeight>0) dstHor = qMin(dstHor, gProgItem->mWidth - x());
|
||||
if(mType!=Web && gProgItem->mWidth>0 && gProgItem->mHeight>0) dstHor = qMin(dstHor, gProgItem->mWidth - x());
|
||||
auto right = x() + dstHor;
|
||||
if(right < gProgItem->mWidth-8) foreach(EBase *ele, mOtherEles) {//左右
|
||||
if(right < gProgItem->mWidth-8) for(EBase *ele : mOtherEles) {//左右
|
||||
if(fabs(right - ele->x()) < SnapSpace) {
|
||||
dstHor = ele->x() - x();
|
||||
mLRSnap = 2;
|
||||
|
@ -358,9 +375,9 @@ void EBase::mouseMoveEvent(QGraphicsSceneMouseEvent *e){
|
|||
setSize(dstHor, mPressRel.y());
|
||||
} else if(mFrmSec==Qt::BottomSection) {
|
||||
if(dstVer < m_handleLen) dstVer = m_handleLen;
|
||||
if(mType!=Audio && gProgItem->mWidth>0 && gProgItem->mHeight>0) dstVer = qMin(dstVer, gProgItem->mHeight - y());
|
||||
if(mType!=Web && gProgItem->mWidth>0 && gProgItem->mHeight>0) dstVer = qMin(dstVer, gProgItem->mHeight - y());
|
||||
auto btm = y() + dstVer;
|
||||
if(btm < gProgItem->mHeight-8) foreach(EBase *ele, mOtherEles) {//上下
|
||||
if(btm < gProgItem->mHeight-8) for(EBase *ele : mOtherEles) {//上下
|
||||
auto eleBtm = ele->y() + ele->mHeight;
|
||||
if(fabs(btm - ele->y()) < SnapSpace) {
|
||||
dstVer = ele->y() - y();
|
||||
|
@ -382,8 +399,8 @@ void EBase::mouseMoveEvent(QGraphicsSceneMouseEvent *e){
|
|||
QRectF geo(x(), y(), mWidth, mHeight);
|
||||
if(mFrmSec==Qt::LeftSection) {
|
||||
dstHor = qMin(dstHor, geo.right() - m_handleLen);
|
||||
if(mType!=Audio && dstHor < 0) dstHor = 0;
|
||||
if(dstHor > 8) foreach(EBase *ele, mOtherEles) {//左右
|
||||
if(mType!=Web && dstHor < 0) dstHor = 0;
|
||||
if(dstHor > 8) for(EBase *ele : mOtherEles) {//左右
|
||||
if(fabs(dstHor - ele->x()) < SnapSpace) {
|
||||
dstHor = ele->x();
|
||||
mLRSnap = 1;
|
||||
|
@ -404,8 +421,8 @@ void EBase::mouseMoveEvent(QGraphicsSceneMouseEvent *e){
|
|||
setX(dstHor);
|
||||
} else if(mFrmSec==Qt::TopSection) {
|
||||
dstVer = qMin(dstVer, geo.bottom() - m_handleLen);
|
||||
if(mType!=Audio && dstVer < 0) dstVer = 0;
|
||||
if(dstVer > 8) foreach(EBase *ele, mOtherEles) {//上下
|
||||
if(mType!=Web && dstVer < 0) dstVer = 0;
|
||||
if(dstVer > 8) for(EBase *ele : mOtherEles) {//上下
|
||||
if(fabs(dstVer - ele->y()) < SnapSpace) {
|
||||
dstVer = ele->y();
|
||||
mTBSnap = 1;
|
||||
|
@ -427,7 +444,7 @@ void EBase::mouseMoveEvent(QGraphicsSceneMouseEvent *e){
|
|||
} else if(mFrmSec==Qt::TopLeftSection) {
|
||||
dstHor = qMin(dstHor, geo.right() - m_handleLen);
|
||||
dstVer = qMin(dstVer, geo.bottom() - m_handleLen);
|
||||
if(mType!=Audio) {
|
||||
if(mType!=Web) {
|
||||
if(dstHor < 0) dstHor = 0;
|
||||
if(dstVer < 0) dstVer = 0;
|
||||
}
|
||||
|
@ -437,7 +454,7 @@ void EBase::mouseMoveEvent(QGraphicsSceneMouseEvent *e){
|
|||
} else if(mFrmSec==Qt::TopRightSection) {
|
||||
dstHor = qMax(dstHor, geo.x() + m_handleLen);
|
||||
dstVer = qMin(dstVer, geo.bottom() - m_handleLen);
|
||||
if(mType!=Audio) {
|
||||
if(mType!=Web) {
|
||||
if(dstHor > gProgItem->mWidth) dstHor = gProgItem->mWidth;
|
||||
if(dstVer < 0) dstVer = 0;
|
||||
}
|
||||
|
@ -447,7 +464,7 @@ void EBase::mouseMoveEvent(QGraphicsSceneMouseEvent *e){
|
|||
} else if(mFrmSec==Qt::BottomLeftSection) {
|
||||
dstHor = qMin(dstHor, geo.right() - m_handleLen);
|
||||
dstVer = qMax(dstVer, geo.y() + m_handleLen);
|
||||
if(mType!=Audio) {
|
||||
if(mType!=Web) {
|
||||
if(dstHor < 0) dstHor = 0;
|
||||
if(dstVer > gProgItem->mHeight) dstVer = gProgItem->mHeight;
|
||||
}
|
||||
|
@ -541,16 +558,18 @@ void EBase::addBaseAttrWgt(QBoxLayout *vBox) {
|
|||
hBox->addLabel(tr("X")+": ");
|
||||
|
||||
auto fdX = new QSpinBox;
|
||||
fdX->setRange(0, 999999);
|
||||
fdX->setRange(-99999, 999999);
|
||||
fdX->setValue(x());
|
||||
connect(fdX, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [this, fdX](int value) {
|
||||
if(type()!=Web) {
|
||||
int max = gProgItem->mWidth - mWidth;
|
||||
if(value > max) {
|
||||
if(value < 0 || value > max) {
|
||||
value = max;
|
||||
fdX->blockSignals(true);
|
||||
fdX->setValue(value);
|
||||
fdX->blockSignals(false);
|
||||
}
|
||||
}
|
||||
setX(value);
|
||||
});
|
||||
hBox->addWidget(fdX);
|
||||
|
@ -559,16 +578,18 @@ void EBase::addBaseAttrWgt(QBoxLayout *vBox) {
|
|||
|
||||
hBox->addLabel(tr("Y")+": ");
|
||||
auto fdY = new QSpinBox;
|
||||
fdY->setRange(0, 999999);
|
||||
fdY->setRange(-99999, 999999);
|
||||
fdY->setValue(y());
|
||||
connect(fdY, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [this, fdY](int value) {
|
||||
if(type()!=Web) {
|
||||
int max = gProgItem->mHeight - mHeight;
|
||||
if(value > max) {
|
||||
if(value < 0 || value > max) {
|
||||
value = max;
|
||||
fdY->blockSignals(true);
|
||||
fdY->setValue(value);
|
||||
fdY->blockSignals(false);
|
||||
}
|
||||
}
|
||||
setY(value);
|
||||
});
|
||||
hBox->addWidget(fdY);
|
||||
|
@ -582,6 +603,7 @@ void EBase::addBaseAttrWgt(QBoxLayout *vBox) {
|
|||
fdW->setRange(6, 999999);
|
||||
fdW->setValue(mWidth);
|
||||
connect(fdW, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [this, fdW](int value) {
|
||||
if(type()!=Web) {
|
||||
int max = gProgItem->mWidth - x();
|
||||
if(value > max) {
|
||||
value = max;
|
||||
|
@ -589,6 +611,7 @@ void EBase::addBaseAttrWgt(QBoxLayout *vBox) {
|
|||
fdW->setValue(value);
|
||||
fdW->blockSignals(false);
|
||||
}
|
||||
}
|
||||
setSize(value, mHeight);
|
||||
});
|
||||
hBox->addWidget(fdW);
|
||||
|
@ -599,6 +622,7 @@ void EBase::addBaseAttrWgt(QBoxLayout *vBox) {
|
|||
fdH->setRange(6, 999999);
|
||||
fdH->setValue(mHeight);
|
||||
connect(fdH, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [this, fdH](int value) {
|
||||
if(type()!=Web) {
|
||||
int max = gProgItem->mHeight - y();
|
||||
if(value > max) {
|
||||
value = max;
|
||||
|
@ -606,13 +630,12 @@ void EBase::addBaseAttrWgt(QBoxLayout *vBox) {
|
|||
fdH->setValue(value);
|
||||
fdH->blockSignals(false);
|
||||
}
|
||||
}
|
||||
setSize(mWidth, value);
|
||||
});
|
||||
hBox->addWidget(fdH);
|
||||
hBox->addStretch();
|
||||
|
||||
vBox->addSpacing(-spacing);
|
||||
|
||||
connect(this, &EBase::xChanged, fdX, [this, fdX] {
|
||||
fdX->blockSignals(true);
|
||||
fdX->setValue(x());
|
||||
|
@ -632,6 +655,24 @@ void EBase::addBaseAttrWgt(QBoxLayout *vBox) {
|
|||
fdH->blockSignals(false);
|
||||
});
|
||||
|
||||
hBox = new HBox(vBox);
|
||||
hBox->addStretch();
|
||||
hBox->addLabel(tr("Rotate")+": ");
|
||||
|
||||
auto fdRotate = new QSpinBox;
|
||||
fdRotate->setRange(0, 359);
|
||||
fdRotate->setValue(_rotate);
|
||||
fdRotate->setToolTip("Need Player 2.1.4");
|
||||
connect(fdRotate, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [this](int value) {
|
||||
_rotate = value;
|
||||
});
|
||||
hBox->addWidget(fdRotate);
|
||||
hBox->addSpacing(-spacing+2);
|
||||
hBox->addLabel("°");
|
||||
hBox->addStretch();
|
||||
|
||||
vBox->addSpacing(-spacing);
|
||||
|
||||
|
||||
hBox = new HBox(vBox);
|
||||
hBox->addLabel(tr("Border"));
|
||||
|
@ -856,5 +897,28 @@ void EBase::addBaseAttrWgt(QBoxLayout *vBox) {
|
|||
fdExitDur->setValue(value);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
ccc = 2;
|
||||
auto fdBlink = new QCheckBox(tr("Blink"));
|
||||
fdBlink->setChecked(_hasBlink);
|
||||
fdBlink->setToolTip("Need Player 2.1.4");
|
||||
connect(fdBlink, &QCheckBox::stateChanged, this, [=](int state) {
|
||||
_hasBlink = state==Qt::Checked;
|
||||
});
|
||||
grid->addWidget(fdBlink, 2, ccc++);
|
||||
ccc++;
|
||||
|
||||
grid->addLabel(tr("Freq"), 2, ccc++, Qt::AlignRight|Qt::AlignVCenter);
|
||||
|
||||
auto fdBlinkFreq = new QDoubleSpinBox;
|
||||
fdBlinkFreq->setDecimals(1);
|
||||
fdBlinkFreq->setSingleStep(0.1);
|
||||
fdBlinkFreq->setValue(_blink);
|
||||
connect(fdBlinkFreq, (void(QDoubleSpinBox::*)(double))&QDoubleSpinBox::valueChanged, this, [=](double value) {
|
||||
_blink = value;
|
||||
});
|
||||
grid->addWidget(fdBlinkFreq, 2, ccc++);
|
||||
grid->addLabel("Hz", 2, ccc++);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,10 +47,13 @@ public:
|
|||
int mType = -1;
|
||||
EBase *mMultiWin = 0;
|
||||
qreal mWidth = 0, mHeight = 0;
|
||||
int _rotate = 0;
|
||||
QSpinBox *fdDuration = 0;
|
||||
int mStartTime = 0, mDuration = 10;
|
||||
QString mEntryEffect, mExitEffect;
|
||||
int mEntryDur = 1, mExitDur = 1;
|
||||
double _blink = 1.0;
|
||||
bool _hasBlink = 0;
|
||||
signals:
|
||||
void sizeChanged();
|
||||
|
||||
|
@ -73,7 +76,7 @@ protected:
|
|||
QPointF mPressRel{FLT_MAX, FLT_MAX};
|
||||
Qt::WindowFrameSection mFrmSec{Qt::NoSection};
|
||||
char mLRSnap{0}, mTBSnap{0};
|
||||
QList<EBase *> mOtherEles;
|
||||
std::vector<EBase *> mOtherEles;
|
||||
|
||||
int bdImgIdx{-1};
|
||||
QString bdEff{"rotate"};
|
||||
|
|
|
@ -242,12 +242,12 @@ QString EVideo::transcoding(QWidget *parent, QString rawFile, QString rawName, Q
|
|||
// }
|
||||
QSettings settings;
|
||||
int rawMax = qMax(w, h);
|
||||
if(settings.value("VideoCompress", true).toBool() && rawMax > 1360 && (w > gProgItem->mWidth || h > gProgItem->mHeight)) {
|
||||
if(settings.value("VideoCompress").toBool() && rawMax > 1360 && (w > gProgItem->mWidth || h > gProgItem->mHeight)) {
|
||||
auto rate = 1280.0 / rawMax;
|
||||
w *= rate;
|
||||
h *= rate;
|
||||
qDebug()<<"Compressed Size"<<w<<h;
|
||||
} else if(! settings.value("VideoTranscoding", true).toBool() || codec_id == AV_CODEC_ID_H264) {
|
||||
} else if(! settings.value("VideoTranscoding").toBool() || codec_id == AV_CODEC_ID_H264) {
|
||||
auto outFile = dir+"/"+rawName;
|
||||
QFile::copy(rawFile, outFile);
|
||||
return outFile;
|
||||
|
|
|
@ -14,6 +14,8 @@ EWeb::EWeb(const JObj &json, EBase *multiWin) : EBase(multiWin) {
|
|||
zoom = json["zoom"].toInt(100);
|
||||
_x = json["offX"].toInt(0);
|
||||
_y = json["offY"].toInt(0);
|
||||
scaleX = json["scaleX"].toInt(100);
|
||||
scaleY = json["scaleY"].toInt(100);
|
||||
}
|
||||
|
||||
void EWeb::paint(QPainter *painter, const QStyleOptionGraphicsItem *a, QWidget *b) {
|
||||
|
@ -84,7 +86,8 @@ QWidget* EWeb::attrWgt() {
|
|||
_x = value;
|
||||
});
|
||||
hBox->addWidget(fdX);
|
||||
hBox->addSpacing(9);
|
||||
hBox->addSpacing(-3);
|
||||
hBox->addLabel()->setMinimumWidth(30);
|
||||
|
||||
hBox->addLabel("Y:");
|
||||
auto fdY = new QSpinBox;
|
||||
|
@ -96,6 +99,34 @@ QWidget* EWeb::attrWgt() {
|
|||
hBox->addWidget(fdY);
|
||||
hBox->addStretch();
|
||||
|
||||
|
||||
hBox = new HBox(vBox);
|
||||
lb = hBox->addLabel(tr("Scale")+" X:");
|
||||
lb->setMinimumWidth(70);
|
||||
lb->setAlignment(Qt::AlignVCenter|Qt::AlignRight);
|
||||
|
||||
auto fdScaleX = new QSpinBox;
|
||||
fdScaleX->setRange(-9999, 99999);
|
||||
fdScaleX->setValue(scaleX);
|
||||
connect(fdScaleX, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [=](int value) {
|
||||
scaleX = value;
|
||||
});
|
||||
hBox->addWidget(fdScaleX);
|
||||
hBox->addSpacing(-3);
|
||||
hBox->addLabel("%")->setMinimumWidth(30);
|
||||
|
||||
hBox->addLabel("Y:");
|
||||
auto fdScaleY = new QSpinBox;
|
||||
fdScaleY->setRange(-9999, 99999);
|
||||
fdScaleY->setValue(scaleY);
|
||||
connect(fdScaleY, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [=](int value) {
|
||||
scaleY = value;
|
||||
});
|
||||
hBox->addWidget(fdScaleY);
|
||||
hBox->addSpacing(-3);
|
||||
hBox->addLabel("%");
|
||||
hBox->addStretch();
|
||||
|
||||
vBox->addStretch();
|
||||
return wgtAttr;
|
||||
}
|
||||
|
@ -108,5 +139,7 @@ JObj EWeb::attrJson() const {
|
|||
obj["zoom"] = zoom;
|
||||
obj["offX"] = _x;
|
||||
obj["offY"] = _y;
|
||||
obj["scaleX"] = scaleX;
|
||||
obj["scaleY"] = scaleY;
|
||||
return obj;
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@ public:
|
|||
JObj attrJson() const override;
|
||||
|
||||
QString url;
|
||||
int zoom = 100, _x = 0, _y = 0;
|
||||
int zoom = 100, _x = 0, _y = 0, scaleX = 100, scaleY = 100;
|
||||
};
|
||||
|
||||
#endif // EWEB_H
|
||||
|
|
|
@ -137,7 +137,19 @@ JObj GenTmpThread::cvtPage(const JObj &pageJson) {
|
|||
for(const auto &ele : elements) {
|
||||
auto type = ele["elementType"].toString();
|
||||
auto geometry = ele["geometry"];
|
||||
sources = type=="Window" ? genSources(QString(), ele["elements"].toArray(), geometry) : genSources(type, JArray{ele}, geometry);
|
||||
bool isWin = type=="Window";
|
||||
sources = isWin ? genSources(QString(), ele["elements"].toArray()) : genSources(type, JArray{ele});
|
||||
auto startTime = isWin ? 0 : ele["startTime"].toInt();
|
||||
for(auto &ss : sources) {
|
||||
auto source = ss.toObj();
|
||||
source["left"] = geometry["x"];
|
||||
source["top"] = geometry["y"];
|
||||
source["width"] = geometry["w"];
|
||||
source["height"] = geometry["h"];
|
||||
source["rotate"] = ele["rotate"];
|
||||
source["playTime"] = startTime;
|
||||
startTime += source["timeSpan"].toInt();
|
||||
}
|
||||
if(! sources.empty()) {
|
||||
JObj layer{{"repeat", sourceRepeat}, {"sources", sources}};
|
||||
auto border = ele["border"].toString();
|
||||
|
@ -203,7 +215,7 @@ JObj GenTmpThread::cvtPage(const JObj &pageJson) {
|
|||
};
|
||||
}
|
||||
|
||||
JArray GenTmpThread::genSources(QString type, const JArray &eles, const JValue &geometry) {
|
||||
JArray GenTmpThread::genSources(QString type, const JArray &eles) {
|
||||
JArray sources;
|
||||
auto needType = type.isEmpty();
|
||||
for(const auto &ele : eles) {
|
||||
|
@ -222,23 +234,12 @@ JArray GenTmpThread::genSources(QString type, const JArray &eles, const JValue &
|
|||
if(source["timeSpan"].isNull()) source["timeSpan"] = ele["duration"];
|
||||
source["entryEffect"] = ele["entryEffect"];
|
||||
source["exitEffect"] = ele["exitEffect"];
|
||||
if(source["entryEffect"].toStr().isEmpty()) source["entryEffect"] = "None"; //兼容旧播放器
|
||||
if(source["exitEffect"].toStr().isEmpty()) source["exitEffect"] = "None"; //兼容旧播放器
|
||||
source["entryEffectTimeSpan"] = ele["entryDur"];
|
||||
source["exitEffectTimeSpan"] = ele["exitDur"];
|
||||
if(ele["hasBlink"].toBool()) source["blink"] = ele["blink"];
|
||||
sources.append(source);
|
||||
}
|
||||
}
|
||||
auto startTime = needType ? 0 : eles[0]["startTime"].toInt();
|
||||
for(auto &ss : sources) {
|
||||
auto source = ss.toObj();
|
||||
source["left"] = geometry["x"];
|
||||
source["top"] = geometry["y"];
|
||||
source["width"] = geometry["w"];
|
||||
source["height"] = geometry["h"];
|
||||
source["playTime"] = startTime;
|
||||
startTime += source["timeSpan"].toInt();
|
||||
}
|
||||
return sources;
|
||||
}
|
||||
|
||||
|
@ -509,6 +510,8 @@ JObj GenTmpThread::convertWeb(const JValue &res) {
|
|||
dst["zoom"] = res["zoom"];
|
||||
dst["offX"] = res["offX"];
|
||||
dst["offY"] = res["offY"];
|
||||
dst["scaleX"] = res["scaleX"].toDouble(100)/100;
|
||||
dst["scaleY"] = res["scaleY"].toDouble(100)/100;
|
||||
return dst;
|
||||
}
|
||||
JObj GenTmpThread::convertTimer(const JValue &json) {
|
||||
|
|
|
@ -15,7 +15,7 @@ protected:
|
|||
virtual void run() override;
|
||||
|
||||
JObj cvtPage(const JObj &);
|
||||
JArray genSources(QString type, const JArray &eles, const JValue &);
|
||||
JArray genSources(QString type, const JArray &eles);
|
||||
JObj genText(const JValue &json, JArray &);
|
||||
JObj genImage(const JValue &json);
|
||||
JObj convertGif(const JValue &json);
|
||||
|
|
|
@ -51,13 +51,14 @@ void SendProgThread::run() {
|
|||
auto resp = tcp.readAll();
|
||||
QString error;
|
||||
auto res = JFrom(resp, &error);
|
||||
while(error.endsWith("end-of-input")) {
|
||||
while(error.contains("end-of-input")) {
|
||||
if(! tcp.waitForReadyRead()) {
|
||||
emit emErr(QString(socketErrKey(tcp.error()))+" ("+QString::number(tcp.error())+") "+tcp.errorString()+" at waitForRead2 'checkExist'");
|
||||
tcp.close();
|
||||
return;
|
||||
}
|
||||
resp += tcp.readAll();
|
||||
error = "";
|
||||
res = JFrom(resp, &error);
|
||||
}
|
||||
if(! error.isEmpty()) {
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user