Compare commits

...

2 Commits

Author SHA1 Message Date
Gangphon 80ebceeeac ledok 2.0 2024-06-20 10:44:08 +08:00
Gangphon bf47b035f9 ledok 2024-06-19 18:54:32 +08:00
19 changed files with 2742 additions and 2559 deletions

View File

@ -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) {

View File

@ -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;

View File

@ -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);

View File

@ -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;
}

View File

@ -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);

View File

@ -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

View File

@ -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++);
}
}

View File

@ -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"};

View File

@ -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;

View File

@ -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;
}

View File

@ -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

View File

@ -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) {

View File

@ -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);

View File

@ -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