90 lines
2.5 KiB
C++
90 lines
2.5 KiB
C++
#include "eweb.h"
|
|
#include <QSpinBox>
|
|
#include <QBoxLayout>
|
|
#include <QLineEdit>
|
|
#include <QJsonObject>
|
|
#include <QPainter>
|
|
#include <QLabel>
|
|
|
|
EWeb::EWeb(EBase *multiWin) : EBase(multiWin) {
|
|
mType = EBase::Web;
|
|
duration = 10;
|
|
}
|
|
EWeb::EWeb(const QJsonObject &json, EBase *multiWin) : EBase(multiWin) {
|
|
mType = EBase::Web;
|
|
setBaseAttr(json);
|
|
url = json["url"].toString();
|
|
duration = json["duration"].toInt(10);
|
|
}
|
|
|
|
void EWeb::paint(QPainter *painter, const QStyleOptionGraphicsItem *a, QWidget *b) {
|
|
auto inner = innerRect();
|
|
painter->setRenderHints(QPainter::Antialiasing|QPainter::SmoothPixmapTransform);
|
|
double maskW = holder().width(), maskH = holder().height();
|
|
if(maskW>inner.width() || maskH>inner.height()) {
|
|
double rate = qMin(inner.width() / maskW, inner.height() / maskH);
|
|
maskW *= rate;
|
|
maskH *= rate;
|
|
}
|
|
painter->drawImage(QRectF((inner.width() - maskW)/2, (inner.height() - maskH)/2, maskW, maskH), holder());
|
|
EBase::paint(painter, a, b);
|
|
}
|
|
|
|
QWidget* EWeb::attrWgt() {
|
|
auto wgtAttr = new QWidget();
|
|
auto vBox = new QVBoxLayout(wgtAttr);
|
|
vBox->setContentsMargins(6, 0, 6, 0);
|
|
if(mMultiWin!=nullptr) vBox->setSpacing(3);
|
|
|
|
addBaseAttrWgt(vBox);
|
|
|
|
auto hBox = new QHBoxLayout;
|
|
hBox->addWidget(new QLabel(tr("Basic Properties")));
|
|
|
|
auto line = new QFrame();
|
|
line->setFrameShape(QFrame::HLine);
|
|
line->setFrameShadow(QFrame::Sunken);
|
|
hBox->addWidget(line, 1);
|
|
|
|
vBox->addLayout(hBox);
|
|
|
|
hBox = new QHBoxLayout;
|
|
hBox->addSpacing(6);
|
|
hBox->addWidget(new QLabel("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 QHBoxLayout();
|
|
hBox->addSpacing(6);
|
|
hBox->addWidget(new QLabel(tr("Play Duration")+": "));
|
|
|
|
auto dur_fd = new QSpinBox();
|
|
dur_fd->setRange(1, 99999);
|
|
dur_fd->setValue(duration);
|
|
connect(dur_fd, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [this](int value) {
|
|
duration = value;
|
|
});
|
|
hBox->addWidget(dur_fd);
|
|
|
|
hBox->addWidget(new QLabel(tr("s")));
|
|
hBox->addStretch();
|
|
|
|
vBox->addLayout(hBox);
|
|
vBox->addStretch();
|
|
return wgtAttr;
|
|
}
|
|
|
|
QJsonObject EWeb::attrJson() const {
|
|
QJsonObject oRoot;
|
|
addBaseAttr(oRoot);
|
|
oRoot["elementType"] = "Web";
|
|
oRoot["url"] = url;
|
|
oRoot["duration"] = duration;
|
|
return oRoot;
|
|
}
|