#include "wpageitem.h" #include "wpageattr.h" #include "wpageitemwidget.h" #include "wProgramManager/wEditProgram/wElement/eobject.h" #include "wProgramManager/wEditProgram/wElement/etext.h" #include "wProgramManager/wEditProgram/wElement/ephoto.h" #include "wProgramManager/wEditProgram/wElement/emovie.h" #include "wProgramManager/wEditProgram/wElement/egif.h" #include "wProgramManager/wEditProgram/wElement/edclock.h" #include "wProgramManager/wEditProgram/wElement/eaclock.h" #include "wProgramManager/wEditProgram/wElement/etemp.h" #include "wProgramManager/wEditProgram/wElement/eweather.h" #include "wProgramManager/wEditProgram/wElement/etimer.h" #include "wProgramManager/wEditProgram/wElement/ewindow.h" wPageItem::wPageItem(const QJsonDocument &json, const QString &path, const QSize &resolution, QListWidget *view, int type) : QObject(view), QListWidgetItem(view, type), m_jRoot(json), m_jOldRoot(json), m_strProgramItemPath(path), m_resolution(resolution) { init(); } wPageItem::wPageItem(const wPageItem &other) : QObject(other.listWidget()), QListWidgetItem(other), m_jRoot(other.jRoot()), m_jOldRoot(other.jRoot()), m_strProgramItemPath(other.pRoot()), m_resolution(other.resolution()) { init(); } wPageItem::~wPageItem() { m_scene->deleteLater(); // delete m_scene; // Crash when app closing. } void wPageItem::init() { QRectF rect(0, 0, m_resolution.width(), m_resolution.height()); m_scene = new QGraphicsScene(); m_scene->setObjectName("wDrawingScene"); m_scene->setSceneRect(rect); QPen pen(Qt::black); QBrush bsh(Qt::black); auto wBackground = m_scene->addRect(rect, pen, bsh); auto flags = wBackground->flags(); flags &= ~QGraphicsItem::ItemIsMovable; flags &= ~QGraphicsItem::ItemIsSelectable; flags &= ~QGraphicsItem::ItemIsFocusable; wBackground->setFlags(flags); m_wBackground = wBackground; QJsonArray elements = m_jRoot["elements"].toArray(); int n = elements.count(); for(int i=0; iaddItem(element); element->setRLimit(QRectF(0, 0, m_resolution.width(), m_resolution.height())); } } void wPageItem::connectCiTieSignal(wDrawingBoard *drawingboard) { QStringList flist; QList list = m_scene->items(); foreach(QGraphicsItem *item, list) { if(item->type() > QGraphicsItem::UserType) { eObject *element = static_cast(item); if(element!=nullptr) { connect(element,SIGNAL(sigCiTie(bool,int)),drawingboard,SLOT(OnCiTieProcess(bool,int))); } } } } void wPageItem::disconnectCiTieSignal(wDrawingBoard *drawingboard) { QStringList flist; QList list = m_scene->items(); foreach(QGraphicsItem *item, list) { if(item->type() > QGraphicsItem::UserType) { eObject *element = static_cast(item); if(element!=nullptr) { disconnect(element,SIGNAL(sigCiTie(bool,int)),drawingboard,SLOT(OnCiTieProcess(bool,int))); } } } } QStringList wPageItem::filesList() const { QStringList flist; QList list = m_scene->items(); foreach(QGraphicsItem *item, list) { if(item->type() > QGraphicsItem::UserType) { eObject *element = static_cast(item); if(element->interactiveType() == eObject::Dynamic) flist.append(element->filesList()); } } return flist; } //创建左边幻灯片,返回改项组件指针 wPageItemWidget* wPageItem::wPage(bool newOne) { if(newOne) { m_wPage = new wPageItemWidget(m_scene); m_wPage->onRepeatChanged(jRoot()["repeat"].toInt()); } return m_wPage; } //创建右边页属性组件,返回页属性组件指针 wPageAttr *wPageItem::wAttr(bool newOne){ if(newOne) { m_wPageAttr = new wPageAttr(this); m_globalstrSavePath=m_strProgramItemPath;//+MACRO_FENGEFU + m_jRoot["name"].toString(); } return m_wPageAttr; } void wPageItem::save(const QString &pParent){ //pagelist中的一个pageitem,在节目名的目录下,根据pageitem的pagename创建文件夹,文件夹中包含page.json QString pRoot = pParent + MACRO_FENGEFU + name(); QDir dRoot(pRoot); if(!dRoot.exists()) {//如果目录不存在则创建目录 QDir dParent(pParent); dParent.mkdir(name()); } if(dRoot.exists()) { QJsonArray oElements; QJsonObject oRoot = m_jRoot.object(); QList list = m_scene->items(); //循环查找元素,将元素写入page.json foreach(QGraphicsItem *item, list) { if(item->type() > QGraphicsItem::UserType) { eObject *element = static_cast(item); if(element->interactiveType() == eObject::Dynamic && element->save(pRoot)) oElements.append(element->elementJson()); } } oRoot["elements"] = oElements; m_jRoot.setObject(oRoot); m_strProgramItemPath = pRoot; QFile f(pRoot + "\\page.json"); f.open(QIODevice::WriteOnly); f.write(m_jRoot.toJson()); f.close(); } } //更新页属性参数到page.json void wPageItem::updateJson() { QJsonObject oRoot = m_jRoot.object(); QJsonArray oElements; QList list = m_scene->items(); foreach(QGraphicsItem *item, list) { if(item->type() > QGraphicsItem::UserType) { eObject *element = static_cast(item); if(element->interactiveType() == eObject::Dynamic) oElements.append(element->elementJson()); } } oRoot["elements"] = oElements; m_jRoot.setObject(oRoot); } bool wPageItem::IsChange(const QJsonDocument &OldJsonDocument) { // QJsonObject oRoot1 = m_jOldRoot.object(); updateJson(); QJsonObject oRoot = m_jRoot.object(); QJsonObject oOldRoot = OldJsonDocument.object(); if(oRoot["name"]!=oOldRoot["name"]) return true; if(oRoot["order"]!=oOldRoot["order"]) return true; if(oRoot["repeat"]!=oOldRoot["repeat"]) return true; if(oRoot["validDate"]!=oOldRoot["validDate"]) return true; if(oRoot["plans"]!=oOldRoot["plans"]) return true; QJsonArray oElements = oRoot["elements"].toArray(); QJsonArray oOldElements = oOldRoot["elements"].toArray(); int n = oElements.count(); for(int i=0; isetSceneRect(rect); m_wBackground->setRect(rect); m_wPage->updateScale(m_scene); QList list = m_scene->items(); foreach(QGraphicsItem *item, list) { if(item->type() > QGraphicsItem::UserType) { eObject *element = static_cast(item); if(element->interactiveType() == eObject::Dynamic) element->setRLimit(QRectF(0, 0, w, h)); } } m_scene->update(m_scene->sceneRect()); } void wPageItem::playElements() { QList list = m_scene->items(); foreach(QGraphicsItem *item, list) { if(item->type() > QGraphicsItem::UserType) { eObject *element = static_cast(item); if(element->interactiveType() == eObject::Dynamic) emit element->sPlayBQ(); } } } void wPageItem::stopElements() { QList list = m_scene->items(); foreach(QGraphicsItem *item, list) { if(item->type() > QGraphicsItem::UserType) { eObject *element = static_cast(item); if(element->interactiveType() == eObject::Dynamic) emit element->sStopBQ(); } } } //使用json键值对更新json文档 void wPageItem::onAttrUpdated(const QJsonObject &json) { QJsonObject oRoot = m_jRoot.object(); oRoot["name"] = json["name"]; oRoot["repeat"] = json["repeat"]; oRoot["validDate"] = json["validDate"]; oRoot["plans"] = json["plans"]; m_jRoot.setObject(oRoot); }