#include "etimer.h" #include "etimerattr.h" #include "QSettings" eTimer::eTimer(QRectF rectInit,InteractiveType type, QGraphicsItem *parent) : eObject(rectInit, type, parent) { m_iType=eObject::Timer; m_attr.xWard = 0; m_attr.targetDateTime = QDateTime(QDate::currentDate(), QTime::currentTime()); m_attr.day = true; m_attr.hour = true; m_attr.min = true; m_attr.sec = true; m_attr.text = ""; m_attr.multiline = true; m_attr.fontFamily = "Arial"; m_attr.fontSize = 9; m_attr.fontBold = false; m_attr.fontItalics = false; m_attr.fontUnderline = false; m_attr.textColor = Qt::red; m_attr.backgroundColor = Qt::transparent; m_attr.playDuration = 10; init(); } eTimer::eTimer(const QJsonObject &json, InteractiveType type, QGraphicsItem *parent) : eObject(json["geometry"].toObject(), type, parent) { m_iType=eObject::Timer; setElement(json, m_attr); init(); } void eTimer::init() { connect(LoAppTools::getInstance(), SIGNAL(sTick()), this, SLOT(updateGeometry())); } void eTimer::setElement(const QJsonObject &json, Data &attr) { auto at = LoAppTools::getInstance(); attr.xWard = json["widget"]["xWard"] .toInt(); attr.targetDateTime = QDateTime::fromString(json["widget"]["targetDateTime"] .toString(), "yyyy-MM-dd HH:mm:ss"); attr.day = json["widget"]["day"] .toBool(); attr.hour = json["widget"]["hour"] .toBool(); attr.min = json["widget"]["min"] .toBool(); attr.sec = json["widget"]["sec"] .toBool(); attr.text = json["widget"]["text"] .toString(); attr.multiline = json["widget"]["multiline"] .toBool(); attr.fontFamily = json["widget"]["fontFamily"] .toString(); attr.fontSize = json["widget"]["fontSize"] .toInt(); attr.fontBold = json["widget"]["fontBold"] .toBool(); attr.fontItalics = json["widget"]["fontItalics"] .toBool(); attr.fontUnderline = json["widget"]["fontUnderline"] .toBool(); attr.textColor = at->int2Color( json["widget"]["textColor"] .toInt()); attr.backgroundColor = at->int2Color( json["widget"]["backgroundColor"].toInt()); attr.playDuration = json["play"]["duration"].toInt(); } void eTimer::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { qint64 ofs; QDateTime cDateTime = QDateTime::currentDateTime(); QDateTime tDateTime = m_attr.targetDateTime; if(m_attr.xWard == 0) { ofs = tDateTime.secsTo(cDateTime); } else { ofs = cDateTime.secsTo(tDateTime); } if(ofs < 0) ofs = 0; QString text = ""; if(!m_attr.text.isEmpty()){ text = m_attr.text; if(m_attr.multiline) { text += '\n'; } else { text += "\x20\x20"; } } if(m_attr.day) { text += QString("\x20%1\x20" + tr("d") + "\x20").arg(ofs/86400); ofs %= 86400; } if(m_attr.hour) { text += QString("\x20%1\x20" + tr("h") + "\x20").arg(ofs/3600); ofs %= 3600; } if(m_attr.min) { text += QString("\x20%1\x20" + tr("m") + "\x20").arg(ofs/60); ofs %= 60; } if(m_attr.sec) { text += QString("\x20%1\x20" + tr("s") + "\x20").arg(ofs); } QFont font; QTextOption opt; font.setFamily(m_attr.fontFamily); font.setPointSize(m_attr.fontSize); font.setBold(m_attr.fontBold); font.setItalic(m_attr.fontItalics); font.setUnderline(m_attr.fontUnderline); MACRO_FONT_FANG_JUCHI_2(font) opt.setAlignment(Qt::AlignCenter); QBrush bshBackground = LoAppTools::getInstance()->getBrush(m_attr.backgroundColor); if(bshBackground != Qt::NoBrush) { painter->fillRect(rect(), bshBackground); } painter->save(); painter->setRenderHint(QPainter::Antialiasing, false); painter->setPen(m_attr.textColor); painter->setFont(font); painter->drawText(rect(), text, opt); painter->restore(); eObject::paint(painter, option, widget); } QWidget* eTimer::wAttr() { QWidget *wObj = eObject::wAttr(); QWidget *w = wAttrElement(); static_cast(w->layout())->insertWidget(0, wObj); return w; } QWidget* eTimer::wAttrElement() { eTimerAttr *w = new eTimerAttr(m_attr); connect(w, SIGNAL(sAttrChanged(const eTimer::Data &)), this, SLOT(onAttrChanged(const eTimer::Data &))); return w; } QJsonObject eTimer::elementJson() const { QJsonObject oRoot; QJsonObject oWidget; QJsonObject oPlay; auto at = LoAppTools::getInstance(); oRoot["elementType"] = "Timer"; oRoot["elementTypeId"] = type(); oRoot["geometry"] = eObject::elementJson(); oWidget["xWard"] = m_attr.xWard; oWidget["targetDateTime"] = m_attr.targetDateTime.toString("yyyy-MM-dd HH:mm:ss"); oWidget["day"] = m_attr.day; oWidget["hour"] = m_attr.hour; oWidget["min"] = m_attr.min; oWidget["sec"] = m_attr.sec; oWidget["text"] = m_attr.text; oWidget["multiline"] = m_attr.multiline; oWidget["fontFamily"] = m_attr.fontFamily; oWidget["fontSize"] = m_attr.fontSize; oWidget["fontBold"] = m_attr.fontBold; oWidget["fontItalics"] = m_attr.fontItalics; oWidget["fontUnderline"] = m_attr.fontUnderline; oWidget["textColor"] = at->color2Int(m_attr.textColor); oWidget["backgroundColor"] = at->color2Int(m_attr.backgroundColor); oRoot["widget"] = oWidget; oPlay["duration"] = m_attr.playDuration; oRoot["play"] = oPlay; return oRoot; } void eTimer::onAttrChanged(const eTimer::Data &data) { m_attr = data; updateGeometry(); }