qt/LedOK/program/eenviron.cpp

762 lines
28 KiB
C++
Raw Normal View History

2022-08-25 18:37:24 +08:00
#include "eenviron.h"
#include "base/locolorselector.h"
#include "globaldefine.h"
#include "tools.h"
#include <QBoxLayout>
#include <QButtonGroup>
#include <QCheckBox>
#include <QFontComboBox>
#include <QLabel>
#include <QLineEdit>
#include <QPainter>
#include <QRadioButton>
#include <QSpinBox>
#include <QTextOption>
#include <QJsonArray>
2023-04-18 14:14:46 +08:00
#include <QToolButton>
2022-08-25 18:37:24 +08:00
QJsonObject EEnviron::genProg(const QJsonObject &json, const QString &dstDir, const QString &srcPageDir) {
auto widget = json["widget"];
QJsonObject oRes;
oRes["_type"] = "EnvironmentalMonitoring";
oRes["name"] = "EnvironmentalMonitoring";
oRes["id"] = "";
oRes["timeSpan"] = json["play"]["duration"].toInt();
oRes["alignType"] = widget["alignType"].toInt();
oRes["bHumidity"] = widget["bHumidity"].toBool();
oRes["bNoise"] = widget["bNoise"].toBool();
oRes["bPM10"] = widget["bPM10"].toBool();
oRes["bPM25"] = widget["bPM25"].toBool();
oRes["bTemperature"] = widget["bTemperature"].toBool();
auto title = widget["labelTitle"].toString();
oRes["bTitle"] = ! title.isEmpty();
oRes["bWindDirection"] = widget["bWindDirection"].toBool();
oRes["bWindSpeed"] = widget["bWindSpeed"].toBool();
oRes["temperatureCompensation"] = widget["temperatureCompensation"].toInt();
oRes["temperatureStyle"] = widget["temperatureStyle"].toInt();
oRes["bgColor"] = widget["cBackground"].toInt();
oRes["bSingleScroll"] = widget["bPaomadeng"].toBool();
oRes["iScrollSpeed"] = widget["scrollSpeed"].toInt();
auto textColor = Tools::int2Color(widget["textColor"].toInt());
auto font = QFont(widget["fontFamily"].toString(), widget["fontSize"].toInt());
font.setBold(widget["fontBold"].toBool());
font.setItalic(widget["fontItalics"].toBool());
font.setUnderline(widget["fontUnderline"].toBool());
font.setStyleStrategy(gTextAntialiasing ? QFont::PreferAntialias : QFont::NoAntialias);
QFontMetricsF metricF(font);
oRes["spaceWidth"] = metricF.horizontalAdvance(" ");
QFontMetrics metric(font);
QColor color(textColor);
QJsonArray imgs;
for(auto str : str0_9) Tools::saveImg2(dstDir, metric, font, color, imgs, str, str);
Tools::saveImg2(dstDir, metric, font, color, imgs, title, "labeltitle");
Tools::saveImg2(dstDir, metric, font, color, imgs, widget["labelTemperature"].toString(), "labeltemperature");
Tools::saveImg2(dstDir, metric, font, color, imgs, widget["labelHumidity"].toString(), "labelhumidity");
Tools::saveImg2(dstDir, metric, font, color, imgs, widget["labelNoise"].toString(), "labelnoise");
Tools::saveImg2(dstDir, metric, font, color, imgs, widget["labelWindSpeed"].toString(), "labelwindSpeed");
Tools::saveImg2(dstDir, metric, font, color, imgs, widget["labelWindDirection"].toString(), "labelwindDirection");
Tools::saveImg2(dstDir, metric, font, color, imgs, widget["labelPM25"].toString(), "labelpm25");
Tools::saveImg2(dstDir, metric, font, color, imgs, widget["labelPM10"].toString(), "labelpm10");
Tools::saveImg2(dstDir, metric, font, color, imgs, "", "unit_celsius");
Tools::saveImg2(dstDir, metric, font, color, imgs, "", "unit_fahrenheit");
Tools::saveImg2(dstDir, metric, font, color, imgs, "%", "unit_humidity");
Tools::saveImg2(dstDir, metric, font, color, imgs, "dB", "unit_noise");
Tools::saveImg2(dstDir, metric, font, color, imgs, "m/s", "unit_windspeed");
Tools::saveImg2(dstDir, metric, font, color, imgs, "μg/m³", "unit_pm10");
Tools::saveImg2(dstDir, metric, font, color, imgs, "μg/m³", "unit_pm25");
Tools::saveImg2(dstDir, metric, font, color, imgs, "-", "minus_sign");
Tools::saveImg2(dstDir, metric, font, color, imgs, tr("north"), "N");
Tools::saveImg2(dstDir, metric, font, color, imgs, tr("north")+tr("east")+tr("north"), "NNE");
Tools::saveImg2(dstDir, metric, font, color, imgs, tr("east")+tr("north"), "NE");
Tools::saveImg2(dstDir, metric, font, color, imgs, tr("east")+tr("east")+tr("north"), "ENE");
Tools::saveImg2(dstDir, metric, font, color, imgs, tr("east"), "E");
Tools::saveImg2(dstDir, metric, font, color, imgs, tr("east")+tr("east")+tr("south"), "ESE");
Tools::saveImg2(dstDir, metric, font, color, imgs, tr("east")+tr("south"), "SE");
Tools::saveImg2(dstDir, metric, font, color, imgs, tr("south")+tr("east")+tr("south"), "SSE");
Tools::saveImg2(dstDir, metric, font, color, imgs, tr("south"), "S");
Tools::saveImg2(dstDir, metric, font, color, imgs, tr("south")+tr("west")+tr("south"), "SSW");
Tools::saveImg2(dstDir, metric, font, color, imgs, tr("west")+tr("south"), "SW");
Tools::saveImg2(dstDir, metric, font, color, imgs, tr("west")+tr("west")+tr("south"), "WSW");
Tools::saveImg2(dstDir, metric, font, color, imgs, tr("west"), "W");
Tools::saveImg2(dstDir, metric, font, color, imgs, tr("west")+tr("west")+tr("north"), "WNW");
Tools::saveImg2(dstDir, metric, font, color, imgs, tr("west")+tr("north"), "NW");
Tools::saveImg2(dstDir, metric, font, color, imgs, tr("north")+tr("west")+tr("north"), "NNW");
QJsonObject arrayPic;
arrayPic["name"] = "previewTmp";
QString srcFile = srcPageDir+"/previewTmp.png";
QFile srcQFile(srcFile);
if(srcQFile.exists()) {
QString id = Tools::fileMd5(srcFile);
srcQFile.copy(dstDir+"/"+id);
arrayPic["id"] = id;
}
imgs.append(arrayPic);
oRes["iPicCount"] = imgs.size();
oRes["arrayPics"] = imgs;
return oRes;
}
EEnviron::EEnviron(EBase *multiWin): EBase(multiWin) {
mType = EBase::Environ;
m_attr.labelTemp = tr("Temperature")+":";
m_attr.labelHum = tr("Humidity")+":";
m_attr.labelNoise = tr("Noise")+":";
m_attr.labelWindSpeed = tr("Wind Speed")+":";
m_attr.labelWindDirectiton = tr("Wind Direction")+":";
m_attr.labelPm25 = "PM2.5:";
m_attr.labelPm10 = "PM10:";
calAttr();
}
EEnviron::EEnviron(const QJsonObject &json, EBase *multiWin): EBase(multiWin){
mType = EBase::Environ;
setBaseAttr(json);
auto widget = json["widget"];
m_attr.hasTemp = widget["bTemperature"].toBool();
m_attr.compensation = widget["temperatureCompensation"].toInt();
m_attr.tempType = widget["temperatureStyle"].toInt();
m_attr.labelTemp = widget["labelTemperature"].toString();
m_attr.title = widget["labelTitle"].toString();
m_attr.hasHum = widget["bHumidity"].toBool();
m_attr.labelHum = widget["labelHumidity"].toString();
m_attr.hasNoise = widget["bNoise"].toBool();
m_attr.labelNoise = widget["labelNoise"].toString();
m_attr.hasWindSpeed = widget["bWindSpeed"].toBool();
m_attr.labelWindSpeed = widget["labelWindSpeed"].toString();
m_attr.hasWindDirection = widget["bWindDirection"].toBool();
m_attr.labelWindDirectiton = widget["labelWindDirection"].toString();
m_attr.hasPM25 = widget["bPM25"].toBool();
m_attr.labelPm25 = widget["labelPM25"].toString();
m_attr.hasPM10 = widget["bPM10"].toBool();
m_attr.labelPm10 = widget["labelPM10"].toString();
m_attr.isSingleLine = widget["bPaomadeng"].toBool();
m_attr.scrollSpeed = widget["scrollSpeed"].toInt();
m_attr.backColor = Tools::int2Color(widget["cBackground"].toInt());
m_attr.align = widget["alignType"].toInt();
m_attr.font = QFont(widget["fontFamily"].toString(), widget["fontSize"].toInt());
m_attr.font.setBold(widget["fontBold"].toBool());
m_attr.font.setItalic(widget["fontItalics"].toBool());
m_attr.font.setUnderline(widget["fontUnderline"].toBool());
m_attr.textColor = Tools::int2Color(widget["textColor"].toInt());
m_attr.playRefresh = json["play"]["refresh"].toInt();
m_attr.playDuration = json["play"]["duration"].toInt();
calAttr();
}
void EEnviron::calAttr() {
item_cnt = 0;
if(! m_attr.title.isEmpty()) item_cnt++;
if(m_attr.hasTemp) item_cnt++;
if(m_attr.hasHum) item_cnt++;
if(m_attr.hasWindSpeed) item_cnt++;
if(m_attr.hasWindDirection) item_cnt++;
if(m_attr.hasNoise) item_cnt++;
if(m_attr.hasPM25) item_cnt++;
if(m_attr.hasPM10) item_cnt++;
m_attr.font.setStyleStrategy(gTextAntialiasing ? QFont::PreferAntialias : QFont::NoAntialias);
if(m_attr.isSingleLine) {
scroll_txt = "";
if(! m_attr.title.isEmpty()) scroll_txt += m_attr.title + " ";
if(m_attr.hasTemp) scroll_txt += m_attr.labelTemp + QString::number(m_attr.compensation) + (m_attr.tempType==0 ? "" : "")+" ";
if(m_attr.hasHum) scroll_txt += m_attr.labelHum + "0% ";
if(m_attr.hasWindSpeed) scroll_txt += m_attr.labelWindSpeed + "0m/s ";
if(m_attr.hasWindDirection) scroll_txt += m_attr.labelWindDirectiton + "- ";
if(m_attr.hasNoise) scroll_txt += m_attr.labelNoise + "0dB ";
if(m_attr.hasPM25) scroll_txt += m_attr.labelPm25 + "0μg/m³ ";
if(m_attr.hasPM10) scroll_txt += m_attr.labelPm10 + "0μg/m³ ";
scroll_width = QFontMetrics(m_attr.font).horizontalAdvance(scroll_txt);
}
}
void EEnviron::drawText(QPainter *painter, QRectF& rect) {
QTextOption opt(Qt::AlignLeft | Qt:: AlignVCenter);
painter->setFont(m_attr.font);
painter->setPen(m_attr.textColor);
if(m_attr.isSingleLine) {
opt.setWrapMode(QTextOption::NoWrap);
painter->drawText(rect, scroll_txt, opt);
} else {
if(m_attr.align==0) opt.setAlignment(Qt::AlignLeft|Qt::AlignVCenter);
else if(m_attr.align==1) opt.setAlignment(Qt::AlignCenter);
else if(m_attr.align==2) opt.setAlignment(Qt::AlignRight|Qt::AlignVCenter);
if(item_cnt > 0) rect.setHeight(rect.height() / item_cnt);
if(! m_attr.title.isEmpty()) {
painter->drawText(rect, m_attr.title, opt);
rect.moveTop(rect.top() + rect.height());
}
if(m_attr.hasTemp) {
painter->drawText(rect, m_attr.labelTemp + QString::number(m_attr.compensation) + (m_attr.tempType == 0 ? "" : ""), opt);
rect.moveTop(rect.top() + rect.height());
}
if(m_attr.hasHum) {
painter->drawText(rect, m_attr.labelHum + "0%", opt);
rect.moveTop(rect.top() + rect.height());
}
if(m_attr.hasWindSpeed) {
painter->drawText(rect, m_attr.labelWindSpeed + "0m/s", opt);
rect.moveTop(rect.top() + rect.height());
}
if(m_attr.hasWindDirection) {
painter->drawText(rect, m_attr.labelWindDirectiton + "-", opt);
rect.moveTop(rect.top() + rect.height());
}
if(m_attr.hasNoise) {
painter->drawText(rect, m_attr.labelNoise + "0dB", opt);
rect.moveTop(rect.top() + rect.height());
}
if(m_attr.hasPM25) {
painter->drawText(rect, m_attr.labelPm25 + "0μg/m³", opt);
rect.moveTop(rect.top() + rect.height());
}
if(m_attr.hasPM10) painter->drawText(rect, m_attr.labelPm10 + "0μg/m³", opt);
}
}
void EEnviron::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){
if(m_attr.isSingleLine) {
if(timer_id==0) {
scroll_off = innerRect().width();
timer_id = startTimer(m_attr.scrollSpeed, Qt::PreciseTimer);
}
} else {
if(timer_id!=0) {
killTimer(timer_id);
timer_id = 0;
}
}
painter->setClipRect(0, 0, mWidth, mHeight);
painter->fillRect(0, 0, mWidth, mHeight, m_attr.backColor);
auto inner = innerRect();
if(m_attr.isSingleLine) {
inner.moveLeft(scroll_off);
inner.setWidth(scroll_width);
}
drawText(painter, inner);
painter->setClipping(false);
EBase::paint(painter, option, widget);
}
void EEnviron::timerEvent(QTimerEvent *e) {
if(e->timerId() == timer_id) {
if(isVisible()) {
if(scroll_off < -scroll_width) scroll_off = mWidth;
else scroll_off--;
update();
} else if(timer_id!=0) {
killTimer(timer_id);
timer_id = 0;
}
} else EBase::timerEvent(e);
}
QWidget* EEnviron::attrWgt() {
auto wgtAttr = new QWidget;
auto vBox = new QVBoxLayout(wgtAttr);
vBox->setContentsMargins(6, 0, 6, 0);
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);
auto fdTitle = new QLineEdit(m_attr.title);
fdTitle->setPlaceholderText(tr("Title"));
connect(fdTitle, &QLineEdit::textChanged, this, [this](const QString &text) {
m_attr.title = text;
calAttr();
update();
});
hBox->addWidget(fdTitle);
vBox->addLayout(hBox);
hBox = new QHBoxLayout();
hBox->addSpacing(6);
auto wTemp = new QCheckBox(tr("Temperature"));
wTemp->setChecked(m_attr.hasTemp);
connect(wTemp, &QCheckBox::toggled, this, [this](bool checked) {
m_attr.hasTemp = checked;
calAttr();
update();
});
hBox->addWidget(wTemp);
hBox->addStretch();
auto fdIsCelsius = new QRadioButton("");
connect(fdIsCelsius, &QRadioButton::toggled, this, [this](bool checked) {
m_attr.tempType = checked ? 0 : 1;
calAttr();
update();
});
hBox->addWidget(fdIsCelsius);
auto fdIsFahrenheit = new QRadioButton("");
hBox->addWidget(fdIsFahrenheit);
hBox->addStretch();
if(m_attr.tempType == 0) fdIsCelsius->setChecked(true);
else fdIsFahrenheit->setChecked(true);
auto gTempType = new QButtonGroup(wgtAttr);
gTempType->addButton(fdIsCelsius);
gTempType->addButton(fdIsFahrenheit);
auto fdLabelTemp = new QLineEdit(m_attr.labelTemp);
fdLabelTemp->setMaximumWidth(100);
connect(fdLabelTemp, &QLineEdit::textChanged, this, [this](const QString &text) {
m_attr.labelTemp = text;
calAttr();
update();
});
hBox->addWidget(fdLabelTemp);
vBox->addLayout(hBox);
hBox = new QHBoxLayout();
hBox->addStretch();
hBox->addWidget(new QLabel(tr("Compensation")));
auto fdComp = new QSpinBox();
fdComp->setRange(-99, 999);
fdComp->setValue(m_attr.compensation);
connect(fdComp, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [this](int value) {
m_attr.compensation = value;
calAttr();
update();
});
hBox->addWidget(fdComp);
vBox->addLayout(hBox);
hBox = new QHBoxLayout();
hBox->addSpacing(6);
auto fdHasHum = new QCheckBox(tr("Humidity")+" (%)");
fdHasHum->setChecked(m_attr.hasHum);
connect(fdHasHum, &QCheckBox::toggled, this, [this](bool checked) {
m_attr.hasHum = checked;
calAttr();
update();
});
hBox->addWidget(fdHasHum);
hBox->addStretch();
auto fdLabelHum = new QLineEdit(m_attr.labelHum);
fdLabelHum->setMaximumWidth(100);
connect(fdLabelHum, &QLineEdit::textChanged, this, [this](const QString &text) {
m_attr.labelHum = text;
calAttr();
update();
});
hBox->addWidget(fdLabelHum);
vBox->addLayout(hBox);
hBox = new QHBoxLayout();
hBox->addSpacing(6);
auto fdHasWindSpeed = new QCheckBox(tr("Wind speed")+" (m/s)");
fdHasWindSpeed->setChecked(m_attr.hasWindSpeed);
connect(fdHasWindSpeed, &QCheckBox::toggled, this, [this](bool checked) {
m_attr.hasWindSpeed = checked;
calAttr();
update();
});
hBox->addWidget(fdHasWindSpeed);
hBox->addStretch();
auto fdLabelWindSpeed = new QLineEdit(m_attr.labelWindSpeed);
fdLabelWindSpeed->setMaximumWidth(100);
connect(fdLabelWindSpeed, &QLineEdit::textChanged, this, [this](const QString &text) {
m_attr.labelWindSpeed = text;
calAttr();
update();
});
hBox->addWidget(fdLabelWindSpeed);
vBox->addLayout(hBox);
hBox = new QHBoxLayout();
hBox->addSpacing(6);
auto fdHasWindDirection = new QCheckBox(tr("Wind direction"));
fdHasWindDirection->setChecked(m_attr.hasWindDirection);
connect(fdHasWindDirection, &QCheckBox::toggled, this, [this](bool checked) {
m_attr.hasWindDirection = checked;
calAttr();
update();
});
hBox->addWidget(fdHasWindDirection);
hBox->addStretch();
auto fdLabelWindDirection = new QLineEdit(m_attr.labelWindDirectiton);
fdLabelWindDirection->setMaximumWidth(100);
connect(fdLabelWindDirection, &QLineEdit::textChanged, this, [this](const QString &text) {
m_attr.labelWindDirectiton = text;
calAttr();
update();
});
hBox->addWidget(fdLabelWindDirection);
vBox->addLayout(hBox);
hBox = new QHBoxLayout();
hBox->addSpacing(6);
auto fdHasNoise = new QCheckBox(tr("Noise")+" (dB)");
fdHasNoise->setChecked(m_attr.hasNoise);
connect(fdHasNoise, &QCheckBox::toggled, this, [this](bool checked) {
m_attr.hasNoise = checked;
calAttr();
update();
});
hBox->addWidget(fdHasNoise);
hBox->addStretch();
auto fdLabelNoise = new QLineEdit(m_attr.labelNoise);
fdLabelNoise->setMaximumWidth(100);
connect(fdLabelNoise, &QLineEdit::textChanged, this, [this](const QString &text) {
m_attr.labelNoise = text;
calAttr();
update();
});
hBox->addWidget(fdLabelNoise);
vBox->addLayout(hBox);
hBox = new QHBoxLayout();
hBox->addSpacing(6);
auto fdHasPM25 = new QCheckBox("PM2.5 (μg/m³)");
fdHasPM25->setChecked(m_attr.hasPM25);
connect(fdHasPM25, &QCheckBox::toggled, this, [this](bool checked) {
m_attr.hasPM25 = checked;
calAttr();
update();
});
hBox->addWidget(fdHasPM25);
hBox->addStretch();
auto fdLabelPM25 = new QLineEdit(m_attr.labelPm25);
fdLabelPM25->setMaximumWidth(100);
connect(fdLabelPM25, &QLineEdit::textChanged, this, [this](const QString &text) {
m_attr.labelPm25 = text;
calAttr();
update();
});
hBox->addWidget(fdLabelPM25);
vBox->addLayout(hBox);
hBox = new QHBoxLayout();
hBox->addSpacing(6);
auto fdHasPM10 = new QCheckBox("PM10 (μg/m³)");
fdHasPM10->setChecked(m_attr.hasPM10);
connect(fdHasPM10, &QCheckBox::toggled, this, [this](bool checked) {
m_attr.hasPM10 = checked;
calAttr();
update();
});
hBox->addWidget(fdHasPM10);
hBox->addStretch();
auto fdLabelPM10 = new QLineEdit(m_attr.labelPm10);
fdLabelPM10->setMaximumWidth(100);
connect(fdLabelPM10, &QLineEdit::textChanged, this, [this](const QString &text) {
m_attr.labelPm10 = text;
calAttr();
update();
});
hBox->addWidget(fdLabelPM10);
vBox->addLayout(hBox);
auto wgtAlign = new QWidget();
auto hBoxAlign = new QHBoxLayout(wgtAlign);
hBoxAlign->setContentsMargins(6,0,0,0);
hBoxAlign->addStretch();
auto fdLeft = new QRadioButton(tr("Left"));
fdLeft->setChecked(true);
connect(fdLeft, &QRadioButton::toggled, this, [this](bool checked) {
if(! checked) return;
m_attr.align = 0;
calAttr();
update();
});
hBoxAlign->addWidget(fdLeft);
auto fdCenter = new QRadioButton(tr("Center"));
connect(fdCenter, &QRadioButton::toggled, this, [this](bool checked) {
if(! checked) return;
m_attr.align = 1;
calAttr();
update();
});
hBoxAlign->addWidget(fdCenter);
auto fdRight = new QRadioButton(tr("Right"));
connect(fdRight, &QRadioButton::toggled, this, [this](bool checked) {
if(! checked) return;
m_attr.align = 2;
calAttr();
update();
});
hBoxAlign->addWidget(fdRight);
hBoxAlign->addStretch();
vBox->addWidget(wgtAlign);
if(m_attr.isSingleLine) wgtAlign->setVisible(false);
if(m_attr.align == 0) fdLeft->setChecked(true);
else if(m_attr.align == 1) fdCenter->setChecked(true);
else if(m_attr.align == 2) fdRight->setChecked(true);
hBox = new QHBoxLayout();
hBox->addSpacing(6);
auto fdIsScroll = new QCheckBox(tr("Single scroll"));
fdIsScroll->setChecked(m_attr.isSingleLine);
connect(fdIsScroll, &QCheckBox::toggled, this, [this, wgtAlign](bool checked) {
m_attr.isSingleLine = checked;
wgtAlign->setVisible(! checked);
if(timer_id!=0) {
killTimer(timer_id);
timer_id = 0;
}
calAttr();
update();
});
hBox->addWidget(fdIsScroll);
hBox->addStretch();
hBox->addWidget(new QLabel(tr("Speed")));
auto fdSpeed = new QSpinBox();
fdSpeed->setRange(1, 999);
fdSpeed->setValue(m_attr.scrollSpeed);
connect(fdSpeed, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [this](int value) {
m_attr.scrollSpeed = value;
if(timer_id!=0) {
killTimer(timer_id);
timer_id = 0;
}
calAttr();
update();
});
hBox->addWidget(fdSpeed);
hBox->addWidget(new QLabel(tr("ms/pixel")));
hBox->addStretch();
vBox->addLayout(hBox);
line = new QFrame();
line->setFrameShape(QFrame::HLine);
line->setFrameShadow(QFrame::Sunken);
vBox->addWidget(line);
hBox = new QHBoxLayout();
hBox->addSpacing(6);
auto fdFontFamily = new QFontComboBox();
fdFontFamily->setEditable(false);
fdFontFamily->setCurrentText(m_attr.font.family());
connect(fdFontFamily, &QFontComboBox::currentFontChanged, this, [this](const QFont &f) {
2023-04-23 10:04:49 +08:00
QFont font(f.family(), m_attr.font.pixelSize());
2022-08-25 18:37:24 +08:00
font.setBold(m_attr.font.bold());
font.setItalic(m_attr.font.italic());
font.setUnderline(m_attr.font.underline());
m_attr.font = font;
calAttr();
update();
});
hBox->addWidget(fdFontFamily);
auto fdFontSize = new QSpinBox();
fdFontSize->setRange(4, 9999);
2023-04-23 10:04:49 +08:00
fdFontSize->setValue(m_attr.font.pixelSize());
2022-08-25 18:37:24 +08:00
connect(fdFontSize, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [this](int value) {
2023-04-23 10:04:49 +08:00
m_attr.font.setPixelSize(value);
2022-08-25 18:37:24 +08:00
calAttr();
update();
});
hBox->addWidget(fdFontSize);
hBox->addStretch();
vBox->addLayout(hBox);
hBox = new QHBoxLayout();
hBox->addSpacing(6);
2023-04-18 14:14:46 +08:00
auto fdFontBold = new QPushButton("B");
fdFontBold->setStyleSheet("QPushButton{background: #bbb; color: #888; font-size: 20px; font-weight: bold;} QPushButton:checked{background: #29c; color: #fff;}");
fdFontBold->setFixedSize(30, 30);
fdFontBold->setCheckable(true);
fdFontBold->setChecked(m_attr.font.bold());
connect(fdFontBold, &QPushButton::toggled, this, [this](bool checked) {
2022-08-25 18:37:24 +08:00
m_attr.font.setBold(checked);
calAttr();
update();
});
2023-04-18 14:14:46 +08:00
hBox->addWidget(fdFontBold);
auto fdFontItalic = new QPushButton("I");
fdFontItalic->setStyleSheet("QPushButton{background: #bbb; color: #888; font-size: 20px; font-style: italic;} QPushButton:checked{background: #29c; color: #fff;}");
fdFontItalic->setFixedSize(30, 30);
fdFontItalic->setCheckable(true);
fdFontItalic->setChecked(m_attr.font.italic());
connect(fdFontItalic, &QPushButton::toggled, this, [this](bool checked) {
2022-08-25 18:37:24 +08:00
m_attr.font.setItalic(checked);
calAttr();
update();
});
2023-04-18 14:14:46 +08:00
hBox->addWidget(fdFontItalic);
auto fdFontUnderline = new QPushButton("U");
fdFontUnderline->setStyleSheet("QPushButton{background: #bbb; color: #888; font-size: 20px; text-decoration: underline;} QPushButton:checked{background: #29c; color: #fff;}");
fdFontUnderline->setFixedSize(30, 30);
fdFontUnderline->setCheckable(true);
fdFontUnderline->setChecked(m_attr.font.underline());
connect(fdFontUnderline, &QPushButton::toggled, this, [this](bool checked) {
2022-08-25 18:37:24 +08:00
m_attr.font.setUnderline(checked);
calAttr();
update();
});
2023-04-18 14:14:46 +08:00
hBox->addWidget(fdFontUnderline);
2022-08-25 18:37:24 +08:00
auto fdColor = new LoColorSelector("T", m_attr.textColor);
fdColor->setFixedWidth(30);
connect(fdColor, &LoColorSelector::sColorChanged, this, [this](const QColor &color) {
m_attr.textColor = color;
calAttr();
update();
});
hBox->addWidget(fdColor);
auto fdBack = new LoColorSelector(tr("Back Color"), m_attr.backColor);
connect(fdBack, &LoColorSelector::sColorChanged, this, [this](const QColor &color) {
m_attr.backColor = color;
calAttr();
update();
});
hBox->addWidget(fdBack);
hBox->addStretch();
vBox->addLayout(hBox);
hBox = new QHBoxLayout();
hBox->addWidget(new QLabel(tr("Play Properties")));
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(tr("Refresh Cycle")));
auto fdRefresh = new QSpinBox();
fdRefresh->setRange(1, 999);
fdRefresh->setValue(m_attr.playRefresh);
connect(fdRefresh, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [this](int value) {
m_attr.playRefresh = value;
});
hBox->addWidget(fdRefresh);
hBox->addWidget(new QLabel(tr("min.")));
hBox->addStretch();
vBox->addLayout(hBox);
hBox = new QHBoxLayout();
hBox->addSpacing(6);
hBox->addWidget(new QLabel(tr("Play Duration")));
auto fdDuration = new QSpinBox();
fdDuration->setRange(1, 99999);
fdDuration->setValue(m_attr.playDuration);
connect(fdDuration, (void(QSpinBox::*)(int))&QSpinBox::valueChanged, this, [this](int value) {
m_attr.playDuration = value;
});
hBox->addWidget(fdDuration);
hBox->addWidget(new QLabel(tr("s")));
hBox->addStretch();
vBox->addLayout(hBox);
vBox->addStretch();
return wgtAttr;
}
QJsonObject EEnviron::attrJson() const{
QJsonObject oWidget;
oWidget["bTemperature"] = m_attr.hasTemp;
oWidget["temperatureCompensation"] = m_attr.compensation;
oWidget["temperatureStyle"] = m_attr.tempType;
oWidget["labelTemperature"] = m_attr.labelTemp;
oWidget["labelTitle"] = m_attr.title;
oWidget["bHumidity"] = m_attr.hasHum;
oWidget["labelHumidity"] = m_attr.labelHum;
oWidget["bNoise"] = m_attr.hasNoise;
oWidget["labelNoise"] = m_attr.labelNoise;
oWidget["bWindSpeed"] = m_attr.hasWindSpeed;
oWidget["labelWindSpeed"] = m_attr.labelWindSpeed;
oWidget["bWindDirection"] = m_attr.hasWindDirection;
oWidget["labelWindDirection"] = m_attr.labelWindDirectiton;
oWidget["bPM25"] = m_attr.hasPM25;
oWidget["labelPM25"] = m_attr.labelPm25;
oWidget["bPM10"] = m_attr.hasPM10;
oWidget["labelPM10"] = m_attr.labelPm10;
oWidget["bPaomadeng"] = m_attr.isSingleLine;
oWidget["scrollSpeed"] = m_attr.scrollSpeed;
oWidget["alignType"] = m_attr.align;
oWidget["fontFamily"] = m_attr.font.family();
2023-04-23 10:04:49 +08:00
oWidget["fontSize"] = m_attr.font.pixelSize();
2022-08-25 18:37:24 +08:00
oWidget["fontBold"] = m_attr.font.bold();
oWidget["fontItalics"] = m_attr.font.italic();
oWidget["fontUnderline"] = m_attr.font.underline();
oWidget["textColor"] = Tools::color2Int(m_attr.textColor);
oWidget["cBackground"] = Tools::color2Int(m_attr.backColor);
oWidget.insert("idDir", QString("env-%1-%2-%3-%4-%5").arg((int) zValue()).arg((int) x()).arg((int) y()).arg((int) mWidth).arg((int) mHeight));
QJsonObject oRoot;
addBaseAttr(oRoot);
oRoot["elementType"] = "Temp";
oRoot["widget"] = oWidget;
oRoot["play"] = QJsonObject{
{"refresh", m_attr.playRefresh},
{"duration", m_attr.playDuration}
};
return oRoot;
}
bool EEnviron::save(const QString &pageDir) {
auto inner = innerRect();
QPixmap img(m_attr.isSingleLine ? scroll_width : inner.width(), inner.height());
img.fill(m_attr.backColor);
QPainter painter(&img);
QRectF arect(0, 0, img.width(), img.height());
drawText(&painter, arect);
img.save(pageDir+"/previewTmp.png", "PNG");
return true;
}