Sfoglia il codice sorgente

修复ui中的一些bug,添加app数据保存

Menglan_Luo 2 anni fa
parent
commit
26880be498
6 ha cambiato i file con 330 aggiunte e 20 eliminazioni
  1. 4 4
      collAnim.cpp
  2. 17 9
      dataManager.cpp
  3. 272 2
      elemPropertyData.cpp
  4. 28 2
      elemPropertyData.h
  5. 3 1
      pool.cpp
  6. 6 2
      statusConfig.cpp

+ 4 - 4
collAnim.cpp

@@ -24,6 +24,7 @@ CollAnim::~CollAnim()
 
 void CollAnim::setUi(QString elem)
 {
+    isSetUi = true;
     currentElem = elem;
     ui->listWidget_collectAnim->clear();
     ui->listWidget_collectAnim->addItems(DataManager::getInstance()->getList(elem,DataManager::ListType::CollAnim));
@@ -31,6 +32,7 @@ void CollAnim::setUi(QString elem)
     int rowCout = formlayout->rowCount();
     for(int i=0;i<rowCout;i++) formlayout->removeRow(0);
     ui->comboBox_animType->clear();
+    isSetUi = false;
 }
 
 QComboBox* CollAnim::createBox(QString choice,QStringList list)
@@ -79,29 +81,27 @@ void CollAnim::setCollAnimWidget()
     QVector<ReadJsonSrc::Fields> fields = DataManager::getInstance()->getTempFields("collAnimTemp",animType);
     QMap<QString,QString> data = DataManager::getInstance()->getCollAnimDataMap(currentElem,row);
     for(const auto &i:fields){
+        QString val;
         if(i.type == "list"){
             QStringList list;
             //后期再根据配置模板添加其它列表
             if(i.src == "animations"){
                 list = DataManager::getInstance()->getList(currentElem,DataManager::ListType::Anim);
             }
-            QString val;
             if(data.find(i.name) != data.end()) val = data[i.name];
             else val = i.defaultVal;
             QComboBox* combo = createBox(val,list);
             connect(combo,SIGNAL(currentTextChanged(QString)),this,SLOT(onComboBoxTextChanged(QString)));
             formlayout->addRow(i.name,combo);
-            data[i.name] = val;
         }
         else if(i.type == "input"){
-            QString val;
             if(data.find(i.name) != data.end()) val = data[i.name];
             else val = i.defaultVal;
             QLineEdit* edit = new QLineEdit(val);
             connect(edit,SIGNAL(editingFinished()),this,SLOT(onLineEditTextChanged()));
             formlayout->addRow(i.name,edit);
-            data[i.name] = val;
         }
+        DataManager::getInstance()->setCollAnimDataMapVal(currentElem,row,i.name,val);
     }
 }
 

+ 17 - 9
dataManager.cpp

@@ -2,6 +2,7 @@
 #include <iostream>
 #include <QFile>
 #include <QJsonDocument>
+#include <QApplication>
 
 DataManager* DataManager::getInstance()
 {
@@ -363,13 +364,15 @@ void DataManager::delChildElem(QString elem, int index)
 ///加载数据
 bool DataManager::loadData()
 {
-    QFile loadFile("data.json");
+//    QFile loadFile(":/file/file/data.json");
+    QFile loadFile("/Users/menglanluo/Desktop/export.json");
     if(!loadFile.open(QIODevice::ReadOnly)){
         qWarning("can't open data file!");
         return false;
     }
     QJsonDocument loadDoc(QJsonDocument::fromJson(loadFile.readAll()));
     read(loadDoc.object());
+    loadFile.close();
     return true;
 }
 
@@ -382,7 +385,7 @@ void DataManager::read(const QJsonObject &json)
     {
         QString elem = keys[i];
         elements[elem] = new ElemPropertyData();
-        elements[elem]->readFundData(json[elem].toObject());
+        elements[elem]->readData(json[elem].toObject());
     }
 }
 
@@ -394,7 +397,7 @@ void DataManager::write(QJsonObject &json) const
     {
         QString elem = keys[i];
         QJsonObject obj;
-        elements[elem]->writeFundData(obj);
+        elements[elem]->writeData(obj);
         json.insert(elem,obj);
     }
 }
@@ -402,13 +405,18 @@ void DataManager::write(QJsonObject &json) const
 ///保存数据
 bool DataManager::saveData()
 {
-    QFile saveFile("data.json");
-    if(!saveFile.open(QIODevice::WriteOnly)){
-        qWarning("can't open data file!");
-        return false;
-    }
     QJsonObject dataObj;
     write(dataObj);
-    saveFile.write(QJsonDocument(dataObj).toJson());
+    //资源文件不支持写?
+//    QFile file(":/file/file/data.json");
+    QFile file("/Users/menglanluo/Desktop/export.json");
+    if(!file.open(QIODevice::WriteOnly)){
+        qDebug()<<"file open failed!";
+        return false;
+    }
+    QJsonDocument jdoc;
+    jdoc.setObject(dataObj);
+    file.write(jdoc.toJson(QJsonDocument::Indented));
+    file.close();
     return true;
 }

+ 272 - 2
elemPropertyData.cpp

@@ -1,5 +1,6 @@
 #include "elemPropertyData.h"
 #include "plisthpp/redream.h"
+#include <QJsonArray>
 
 ElemPropertyData::ElemPropertyData()
 {
@@ -76,7 +77,7 @@ QList<QString> ElemPropertyData::getTimelineList(QString filePath)
     return timelineListMap[filePath];
 }
 
-void ElemPropertyData::readFundData(const QJsonObject &json)
+void ElemPropertyData::readData(const QJsonObject &json)
 {
     if(json.contains("labelName") && json["labelName"].isString()){
         labelName = json["labelName"].toString();
@@ -96,14 +97,283 @@ void ElemPropertyData::readFundData(const QJsonObject &json)
     if(json.contains("iconPath") && json["iconPath"].isString()){
         iconPath = json["iconPath"].toString();
     }
+    //状态与效果动画
+    if(json.contains("anims") && json["anims"].isArray()){
+        readStatusEffect(json["anims"].toArray());
+    }
+    //收集动画
+    if(json.contains("collAnim") && json["collAnim"].isArray()){
+        readCollAnim(json["collAnim"].toArray());
+    }
+    //状态配置
+    if(json.contains("statusConfig") && json["statusConfig"].isArray()){
+        readStatusConfigData(json["statusConfig"].toArray());
+    }
+    //容器配置
+    if(json.contains("container") && json["container"].isArray()){
+        readContainerConfig(json["container"].toArray());
+    }
+    //子元素配置
+    if(json.contains("childElem") && json["childElem"].isArray()){
+        readChildElem(json["childElem"].toArray());
+    }
 }
 
-void ElemPropertyData::writeFundData(QJsonObject &json) const
+void ElemPropertyData::writeData(QJsonObject &json) const
 {
+    //基础属性
     json["labelName"] = labelName;
     json["size"] = size;
     json["maxLayer"] = maxLayer;
     json["score"] = score;
     json["dropConfig"] = dropConfig;
     json["iconPath"] = iconPath;
+    json.insert("anims",writeStatusEffect());
+    json.insert("collAnim",writeCollAnim());
+    json.insert("statusConfig",writeStatusConfigData());
+    json.insert("container",writeContainerConfig());
+    json.insert("childElem",writeChildElem());
+}
+
+///读入状态与效果动画数据
+void ElemPropertyData::readStatusEffect(const QJsonArray &arr)
+{
+    statusEffect.clear();
+    statusEffect.reserve(arr.size());
+    for(int i = 0;i < arr.size();i++){
+        QJsonObject animObj = arr[i].toObject();
+        StatusEffect anim(animObj["name"].toString());
+        anim.res = animObj["res"].toString();
+        anim.timeline = animObj["timeline"].toString();
+        anim.zOrder = animObj["zOrder"].toString();
+        statusEffect.append(anim);
+    }
+}
+
+///写入状态与效果动画数据
+QJsonArray ElemPropertyData::writeStatusEffect() const
+{
+    QJsonArray animArray;
+    for(const StatusEffect &anim:statusEffect)
+    {
+        QJsonObject animObj;
+        animObj["name"] = anim.name;
+        animObj["res"] = anim.res;
+        animObj["timeline"] = anim.timeline;
+        animObj["zOrder"] = anim.zOrder;
+        animArray.append(animObj);
+    }
+    return animArray;
+}
+
+///读入收集动画数据
+void ElemPropertyData::readCollAnim(const QJsonArray &arr)
+{
+    collAnim.clear();
+    collAnim.reserve(arr.size());
+    for(int i=0;i<arr.size();i++){
+        QJsonObject collAnimObj = arr[i].toObject();
+        CollAnim coll(collAnimObj["name"].toString());
+        coll.type = collAnimObj["type"].toString();
+        coll.dataMap = readStrStrMap(collAnimObj["dataMap"].toObject());
+        collAnim.append(coll);
+    }
+}
+
+///读一个string-string map数据
+QMap<QString,QString> ElemPropertyData::readStrStrMap(const QJsonObject &obj)
+{
+    QMap<QString,QString> data;
+    QStringList keys = obj.keys();
+    for(int i=0;i<keys.size();i++)
+    {
+        QString key = keys[i];
+        data[key] = obj[key].toString();
+    }
+    return data;
+}
+
+///写收集动画数据
+QJsonArray ElemPropertyData::writeCollAnim() const
+{
+    QJsonArray collAnimArray;
+    for(const CollAnim &coll:collAnim){
+        QJsonObject collAnimObj;
+        collAnimObj["name"] = coll.name;
+        collAnimObj["type"] = coll.type;
+        collAnimObj["dataMap"] = writeStrStrMap(coll.dataMap);
+        collAnimArray.append(collAnimObj);
+    }
+    return collAnimArray;
+}
+///写string-string map数据
+QJsonObject ElemPropertyData::writeStrStrMap(const QMap<QString,QString> &data) const
+{
+    QStringList keys = data.keys();
+    QJsonObject dataObj;
+    for(int i=0;i<keys.size();i++)
+    {
+        QString key = keys[i];
+        dataObj.insert(key,data[key]);
+    }
+    return dataObj;
+}
+///读状态配置数据
+void ElemPropertyData::readStatusConfigData(const QJsonArray &arr)
+{
+    statusConfig.clear();
+    statusConfig.reserve(arr.size());
+    for(int i=0;i<arr.size();i++){
+        QJsonObject statusConfigObj = arr[i].toObject();
+        StatusConfig configData(statusConfigObj["statusValue"].toString());
+        configData.initAnim = statusConfigObj["initAnim"].toString();
+        configData.clickAnim = statusConfigObj["clickAnim"].toString();
+        configData.multiHit = statusConfigObj["multiHit"].toBool();
+        configData.dropable = statusConfigObj["dropable"].toBool();
+        configData.needCollect = statusConfigObj["needCollect"].toBool();
+        configData.collTargetType = statusConfigObj["collTargetType"].toString();
+        configData.collAnim = statusConfigObj["collAnim"].toString();
+        configData.eventConfig = readEventConfig(statusConfigObj["eventConfig"].toArray());
+        statusConfig.append(configData);
+    }
+}
+///读事件配置表格数据
+QVector<ElemPropertyData::EventConfig> ElemPropertyData::readEventConfig(const QJsonArray &arr)
+{
+    QVector<ElemPropertyData::EventConfig> eventTable;
+    eventTable.reserve(arr.size());
+    for(int i=0;i<arr.size();i++){
+        QJsonObject eventObj = arr[i].toObject();
+        EventConfig event;
+        event.name = eventObj["name"].toString();
+        event.consisColor = eventObj["consisColor"].toBool();
+        event.changeMagnitude = eventObj["changeMagnitude"].toInt();
+        event.specialEffect = eventObj["specialEffect"].toString();
+        event.elimATLattices = eventObj["elimATLattices"].toBool();
+        event.triggerAction = eventObj["triggerAction"].toString();
+        event.actionConfig = readStrStrMap(eventObj["actionConfig"].toObject());
+        eventTable.append(event);
+    }
+    return eventTable;
+}
+///写状态配置数据
+QJsonArray ElemPropertyData::writeStatusConfigData() const
+{
+    QJsonArray statusConfigArray;
+    for(const StatusConfig &status:statusConfig){
+        QJsonObject statusObj;
+        statusObj["statusValue"] = status.statusValue;
+        statusObj["initAnim"] = status.initAnim;
+        statusObj["clickAnim"] = status.clickAnim;
+        statusObj["multiHit"] = status.multiHit;
+        statusObj["dropable"] = status.dropable;
+        statusObj["needCollect"] = status.needCollect;
+        statusObj["collTargetType"] = status.collTargetType;
+        statusObj["collAnim"] = status.collAnim;
+        statusObj.insert("eventConfig",writeEventConfig(status.eventConfig));
+        statusConfigArray.append(statusObj);
+    }
+    return statusConfigArray;
+}
+///写事件配置表格数据
+QJsonArray ElemPropertyData::writeEventConfig(const QVector<EventConfig> &eventConfig) const
+{
+    QJsonArray eventArray;
+    for(const EventConfig &event:eventConfig){
+        QJsonObject eventObj;
+        eventObj["name"] = event.name;
+        eventObj["consisColor"] = event.consisColor;
+        eventObj["changeMagnitude"] = event.changeMagnitude;
+        eventObj["specialEffect"] = event.specialEffect;
+        eventObj["elimATLattices"] = event.elimATLattices;
+        eventObj["triggerAction"] = event.triggerAction;
+        eventObj.insert("actionConfig",writeStrStrMap(event.actionConfig));
+        eventArray.append(eventObj);
+    }
+    return eventArray;
+}
+///读容器池数据
+void ElemPropertyData::readContainerConfig(const QJsonArray &arr)
+{
+    container.clear();
+    container.reserve(arr.size());
+    for(int i=0;i<arr.size();i++){
+        QJsonObject poolObj = arr[i].toObject();
+        ContainerConfig pool(poolObj["poolName"].toString());
+        pool.type = poolObj["type"].toString();
+        pool.table = readContainerTable(poolObj["table"].toArray());
+        container.append(pool);
+    }
+}
+///读容器池表格数据
+QVector<ElemPropertyData::ContainTable> ElemPropertyData::readContainerTable(const QJsonArray &arr)
+{
+    QVector<ContainTable> table;
+    for(int i=0;i<arr.size();i++){
+        QJsonObject containObj = arr[i].toObject();
+        ContainTable contain(containObj["key"].toString());
+        contain.res = containObj["res"].toString();
+        contain.initTimeline = containObj["initTimeline"].toString();
+        contain.clickTimeline = containObj["clickTimeline"].toString();
+        contain.effectTimeline = containObj["effectTimeline"].toString();
+        contain.vanishTimeline = containObj["vanishTimeline"].toString();
+        contain.zOrder = containObj["zOrder"].toString();
+        table.append(contain);
+    }
+    return table;
+}
+///写容器池数据
+QJsonArray ElemPropertyData::writeContainerConfig() const
+{
+    QJsonArray containConfigArray;
+    for(const ContainerConfig &contain:container){
+        QJsonObject containObj;
+        containObj["poolName"] = contain.poolName;
+        containObj["type"] = contain.type;
+        containObj["table"] = writeContainerTable(contain.table);
+        containConfigArray.append(containObj);
+    }
+    return containConfigArray;
+}
+///写容器池表格数据
+QJsonArray ElemPropertyData::writeContainerTable(const QVector<ContainTable> &containTable) const
+{
+    QJsonArray tableArray;
+    for(const ContainTable &table:containTable){
+        QJsonObject tableObj;
+        tableObj["key"] = table.key;
+        tableObj["res"] = table.res;
+        tableObj["initTimeline"] = table.initTimeline;
+        tableObj["clickTimeline"] = table.clickTimeline;
+        tableObj["effectTimeline"] = table.effectTimeline;
+        tableObj["vanishTimeline"] = table.vanishTimeline;
+        tableObj["zOrder"] = table.zOrder;
+        tableArray.append(tableObj);
+    }
+    return tableArray;
+}
+///读子元素数据
+void ElemPropertyData::readChildElem(const QJsonArray &arr)
+{
+    childElem.clear();
+    childElem.reserve(arr.size());
+    for(int i=0;i<arr.size();i++)
+    {
+        QJsonObject childElemObj = arr[i].toObject();
+        ChildElem elem(childElemObj["name"].toString());
+        elem.container = childElemObj["container"].toString();
+        childElem.append(elem);
+    }
+}
+///写子元素数据
+QJsonArray ElemPropertyData::writeChildElem() const
+{
+    QJsonArray elemArray;
+    for(const ChildElem &elem:childElem){
+        QJsonObject childElemObj;
+        childElemObj["name"] = elem.name;
+        childElemObj["container"] = elem.container;
+        elemArray.append(childElemObj);
+    }
+    return elemArray;
 }

+ 28 - 2
elemPropertyData.h

@@ -98,8 +98,34 @@ public:
     int getPoolIndex(QString poolName);
     QList<QString> getTimelineList(QString filePath);
     QMap<QString,QList<QString>> timelineListMap;
-    void readFundData(const QJsonObject &json);
-    void writeFundData(QJsonObject &json) const;
+
+    //读写数据
+    void readData(const QJsonObject &json);
+    void writeData(QJsonObject &json) const;
+    //状态与效果动画
+    void readStatusEffect(const QJsonArray &arr);
+    QJsonArray writeStatusEffect() const;
+    //收集动画
+    void readCollAnim(const QJsonArray &arr);
+    QJsonArray writeCollAnim() const;
+    //读写<str,str> map
+    QMap<QString,QString> readStrStrMap(const QJsonObject &obj);
+    QJsonObject writeStrStrMap(const QMap<QString,QString> &data) const;
+    //读写状态配置数据
+    void readStatusConfigData(const QJsonArray &arr);
+    QJsonArray writeStatusConfigData() const;
+    //读写事件配置表格数据
+    QVector<EventConfig> readEventConfig(const QJsonArray &arr);
+    QJsonArray writeEventConfig(const QVector<EventConfig> &eventConfig) const;
+    //读写容器池数据
+    void readContainerConfig(const QJsonArray &arr);
+    QJsonArray writeContainerConfig() const;
+    //读写容器表格数据
+    QVector<ContainTable> readContainerTable(const QJsonArray &arr);
+    QJsonArray writeContainerTable(const QVector<ContainTable> &containTable) const;
+    //读写子元素数据
+    void readChildElem(const QJsonArray &arr);
+    QJsonArray writeChildElem() const;
 };
 
 #endif // ELEMPROPERTYDATA_H

+ 3 - 1
pool.cpp

@@ -55,6 +55,7 @@ QComboBox* Pool::createPoolBox(QString chosenPool)
 
 void Pool::setUi(QString elem)
 {
+    isSetUi = true;
     currentElem = elem;
     //设置容器池
     ui->listWidget_pool->clear();
@@ -78,6 +79,7 @@ void Pool::setUi(QString elem)
         ui->tableWidget_childElem->setCellWidget(rowNum,1,createPoolBox(i.container));
     }
     setPoolUi();
+    isSetUi = false;
 }
 
 void Pool::setPoolUi()
@@ -387,7 +389,7 @@ void Pool::on_tableWidget_childElem_cellDoubleClicked(int row, int column)
     childElemTableItemChanged = true;
 }
 
-///子元素表格选择的容器池改变
+///容器池表格选择的容器类型改变
 void Pool::on_comboBox_container_currentTextChanged(const QString &arg1)
 {
     int poolIndex = ui->listWidget_pool->currentRow();

+ 6 - 2
statusConfig.cpp

@@ -63,7 +63,7 @@ QPushButton* StatusConfig::createSetButton()
 void StatusConfig::onCheckBoxStateChanged(int state)
 {
     int statusIndex = ui->listWidget_status->currentRow();
-    if(statusIndex == -1) return;
+    if(statusIndex == -1 || isSetUi) return;
     if(ui->listWidget_status->currentItem() == nullptr) return;
     //获取checkBox所在位置
     QCheckBox *check = dynamic_cast<QCheckBox*>(this->sender());
@@ -80,7 +80,7 @@ void StatusConfig::onCheckBoxStateChanged(int state)
 void StatusConfig::onEventBoxTextChanged(const QString &arg1)
 {
     int statusIndex = ui->listWidget_status->currentRow();
-    if(statusIndex == -1) return;
+    if(statusIndex == -1 || isSetUi) return;
     //获取特效列表所在位置
     QComboBox *box = dynamic_cast<QComboBox*>(this->sender());
     int x = box->frameGeometry().x();
@@ -127,6 +127,7 @@ void StatusConfig::createSetWindow(QString actionName,int row)
 ///切换元素,重置全部ui
 void StatusConfig::setUi(QString elem)
 {
+    isSetUi = true;
     currentElem = elem;
     //设置状态配置界面
     ui->listWidget_status->clear();
@@ -139,11 +140,13 @@ void StatusConfig::setUi(QString elem)
     //设置收集动画和状态配置的comboBox
     setAnimComboBox();
     ui->lineEdit_collectionType->clear();
+    isSetUi = false;
 }
 
 ///重置容易变化的动画下拉选项
 void StatusConfig::setAnimComboBox()
 {
+    isSetUi = true;
     ui->comboBox_initAnim->clear();
     ui->comboBox_clickAnim->clear();
     ui->comboBox_collectAnimation->clear();
@@ -167,6 +170,7 @@ void StatusConfig::setAnimComboBox()
             ui->tableWidget_event->setCellWidget(i,5,createBox(event[i].triggerAction,BoxType::Action));
         }
     }
+    isSetUi = false;
 }
 
 ///设置动画当前选择项