Menglan_Luo преди 2 години
родител
ревизия
c9d2e8df5d
променени са 15 файла, в които са добавени 595 реда и са изтрити 744 реда
  1. 3 3
      ConfigurableTool.pro
  2. 190 0
      collAnim.cpp
  3. 47 0
      collAnim.h
  4. 78 0
      collAnim.ui
  5. 0 17
      collectionwindow.cpp
  6. 0 22
      collectionwindow.h
  7. 0 83
      collectionwindow.ui
  8. 77 6
      dataManager.cpp
  9. 19 2
      dataManager.h
  10. 1 3
      elemPropertyData.h
  11. 127 445
      mainwindow.cpp
  12. 16 20
      mainwindow.h
  13. 0 119
      mainwindow.ui
  14. 33 19
      statusEffectAnim.cpp
  15. 4 5
      statusEffectAnim.h

+ 3 - 3
ConfigurableTool.pro

@@ -11,7 +11,7 @@ CONFIG += c++11
 SOURCES += \
     actionSettingDialog.cpp \
     changenamedialog.cpp \
-    collectionwindow.cpp \
+    collAnim.cpp \
     dataManager.cpp \
     elemPropertyData.cpp \
     main.cpp \
@@ -292,7 +292,7 @@ HEADERS += \
     boost/utility/enable_if.hpp \
     boost/version.hpp \
     changenamedialog.h \
-    collectionwindow.h \
+    collAnim.h \
     dataManager.h \
     elemPropertyData.h \
     mainwindow.h \
@@ -309,7 +309,7 @@ HEADERS += \
 FORMS += \
     actionSettingDialog.ui \
     changenamedialog.ui \
-    collectionwindow.ui \
+    collAnim.ui \
     mainwindow.ui \
     resfiledialog.ui \
     statusEffectAnim.ui

+ 190 - 0
collAnim.cpp

@@ -0,0 +1,190 @@
+#include "collAnim.h"
+#include "ui_collAnim.h"
+#include "dataManager.h"
+#include "changenamedialog.h"
+#include <QLineEdit>
+#include <iostream>
+#include <QMessageBox>
+#include <QFormLayout>
+
+CollAnim::CollAnim(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::CollAnim)
+{
+    ui->setupUi(this);
+    formlayout = new QFormLayout;
+    ui->widget->setLayout(formlayout);
+}
+
+CollAnim::~CollAnim()
+{
+    delete ui;
+}
+
+void CollAnim::setUi(QString elem)
+{
+    currentElem = elem;
+    ui->listWidget_collectAnim->clear();
+    ui->listWidget_collectAnim->addItems(DataManager::getInstance()->getList(elem,DataManager::ListType::CollAnim));
+    //切换新元素的收集动画界面,尚未选中任何收集动画,清空所有数据及动态界面
+    int rowCout = formlayout->rowCount();
+    for(int i=0;i<rowCout;i++) formlayout->removeRow(0);
+    ui->comboBox_animType->clear();
+}
+
+QComboBox* CollAnim::createBox(QString choice,QStringList list)
+{
+    QComboBox* box = new QComboBox;
+    box->addItem("尚未选择");
+    box->addItems(list);
+    int index = box->findText(choice);
+    if(index == -1) index = 0;
+    box->setCurrentIndex(index);
+    return box;
+}
+
+///切换收集动画时设置页面显示
+void CollAnim::setCollectAnimUi()
+{
+    int row = ui->listWidget_collectAnim->currentRow();
+    if(row != -1){
+        isSetUi = true;
+        //重置动画类型选项
+        ui->comboBox_animType->clear();
+        ui->comboBox_animType->addItem("尚未选择");
+        ui->comboBox_animType->addItems(DataManager::getInstance()->getList(currentElem,DataManager::ListType::AnimType));
+        QString type = DataManager::getInstance()->getAnimType(currentElem,row);
+        int typeIndex = ui->comboBox_animType->findText(type);
+        if(typeIndex == -1){
+            typeIndex = 0;
+            DataManager::getInstance()->setAnimType(currentElem,"尚未选择",row);
+        }
+        ui->comboBox_animType->setCurrentIndex(typeIndex);
+        setCollAnimWidget();
+        isSetUi = false;
+    }
+}
+
+///设置收集动画动态界面
+void CollAnim::setCollAnimWidget()
+{
+    std::cout<<"设置收集动画动态界面"<<std::endl;
+    int row = ui->listWidget_collectAnim->currentRow();
+    if(row == -1) return;
+    QString animType = ui->comboBox_animType->currentText();
+    int rowCout = formlayout->rowCount();
+    for(int i=0;i<rowCout;i++) formlayout->removeRow(0);
+    if(animType == "尚未选择") return;
+    QVector<ReadJsonSrc::Fields> fields = DataManager::getInstance()->getTempFields("collAnimTemp",animType);
+    QMap<QString,QString> data = DataManager::getInstance()->getCollAnimDataMap(currentElem,row);
+    for(const auto &i:fields){
+        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;
+        }
+    }
+}
+
+///收集动画动态界面下拉选项数据变化时
+void CollAnim::onComboBoxTextChanged(QString arg)
+{
+    int row = ui->listWidget_collectAnim->currentRow();
+    if(row == -1) return;
+    QComboBox *box = dynamic_cast<QComboBox*>(this->sender());
+    QLabel *label = dynamic_cast<QLabel*>(formlayout->labelForField(box));
+    std::cout<<qPrintable(label->text())<<": "<<qPrintable(arg)<<std::endl;
+    DataManager::getInstance()->setCollAnimDataMapVal(currentElem,row,label->text(),arg);
+}
+
+///收集动画动态界面单行编辑数据变化时
+void CollAnim::onLineEditTextChanged()
+{
+    int row = ui->listWidget_collectAnim->currentRow();
+    if(row == -1) return;
+    QLineEdit *edit = dynamic_cast<QLineEdit*>(this->sender());
+    QLabel *label = dynamic_cast<QLabel*>(formlayout->labelForField(edit));
+    std::cout<<qPrintable(label->text())<<": "<<qPrintable(edit->text())<<std::endl;
+    DataManager::getInstance()->setCollAnimDataMapVal(currentElem,row,label->text(),edit->text());
+}
+
+///收集动画页面的动画类型发生变化
+void CollAnim::on_comboBox_animType_currentTextChanged(const QString &arg1)
+{
+    int index = ui->listWidget_collectAnim->currentRow();
+    if(index == -1 || isSetUi) return;
+    DataManager::getInstance()->setAnimType(currentElem,arg1,index);
+    setCollAnimWidget();
+}
+
+///添加收集动画
+void CollAnim::on_pushButton_addCollectAnim_clicked()
+{
+    QString collAnimName = "collAnim";
+    int id = 1;
+    while(1){
+        if(!DataManager::getInstance()->existCollAnim(currentElem,collAnimName)){
+            break;
+        }
+        collAnimName = "collAnim" + QString::number(id++);
+    }
+    ui->listWidget_collectAnim->addItem(new QListWidgetItem(collAnimName));
+    DataManager::getInstance()->addCollAnim(currentElem,collAnimName);
+}
+
+///删除收集动画
+void CollAnim::on_pushButton_delCollectAnim_clicked()
+{
+    int row = ui->listWidget_collectAnim->currentRow();
+    if(row == -1) return;
+    QMessageBox::StandardButton reply = QMessageBox::question(this,"删除收集动画","确定要删除此收集动画吗?");
+    if(reply == QMessageBox::Yes){
+        QString delName = ui->listWidget_collectAnim->currentItem()->text();
+        delete ui->listWidget_collectAnim->takeItem(row);
+        DataManager::getInstance()->delCollAnim(currentElem,row);
+    }
+}
+
+///收集动画改名
+void CollAnim::on_listWidget_collectAnim_itemDoubleClicked(QListWidgetItem *item)
+{
+    int row = ui->listWidget_collectAnim->currentRow();
+    ChangeNameDialog newName;
+    newName.setModal(true);
+    newName.exec();
+    QString name = newName.getNewName();
+    if(!name.isEmpty()){
+        if(DataManager::getInstance()->existCollAnim(currentElem,name)){
+            QMessageBox::critical(this,"警告","该收集动画名已存在!");
+            return;
+        }
+        DataManager::getInstance()->changeCollAnimName(currentElem,row,name);
+        item->setText(name);
+    }
+}
+
+///点击另一个收集动画
+void CollAnim::on_listWidget_collectAnim_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
+{
+    if(current != nullptr){
+        setCollectAnimUi();
+    }
+}

+ 47 - 0
collAnim.h

@@ -0,0 +1,47 @@
+#ifndef COLLANIM_H
+#define COLLANIM_H
+
+#include <QWidget>
+#include <QComboBox>
+#include <QListWidgetItem>
+#include <QFormLayout>
+
+namespace Ui {
+class CollAnim;
+}
+
+class CollAnim : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit CollAnim(QWidget *parent = nullptr);
+    ~CollAnim();
+    void setUi(QString elem);
+    void setCollectAnimUi();
+    void setCollAnimWidget();
+
+private slots:
+    void on_comboBox_animType_currentTextChanged(const QString &arg1);
+
+    void onComboBoxTextChanged(QString arg);
+
+    void onLineEditTextChanged();
+
+    void on_pushButton_addCollectAnim_clicked();
+
+    void on_pushButton_delCollectAnim_clicked();
+
+    void on_listWidget_collectAnim_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
+
+    void on_listWidget_collectAnim_itemDoubleClicked(QListWidgetItem *item);
+
+private:
+    Ui::CollAnim *ui;
+    QFormLayout* formlayout;
+    QString currentElem;
+    bool isSetUi;
+    QComboBox* createBox(QString choice,QStringList list);
+};
+
+#endif // COLLANIM_H

+ 78 - 0
collAnim.ui

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>CollAnim</class>
+ <widget class="QWidget" name="CollAnim">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>856</width>
+    <height>592</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <widget class="QSplitter" name="splitter">
+   <property name="geometry">
+    <rect>
+     <x>12</x>
+     <y>12</y>
+     <width>408</width>
+     <height>236</height>
+    </rect>
+   </property>
+   <property name="orientation">
+    <enum>Qt::Horizontal</enum>
+   </property>
+   <widget class="QWidget" name="layoutWidget">
+    <layout class="QVBoxLayout" name="verticalLayout_3">
+     <item>
+      <widget class="QListWidget" name="listWidget_collectAnim"/>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_21">
+       <item>
+        <widget class="QPushButton" name="pushButton_addCollectAnim">
+         <property name="text">
+          <string>添加</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="pushButton_delCollectAnim">
+         <property name="text">
+          <string>删除</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </widget>
+   <widget class="QWidget" name="layoutWidget">
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <layout class="QFormLayout" name="formLayout">
+       <item row="0" column="0">
+        <widget class="QLabel" name="label">
+         <property name="text">
+          <string>动画类型</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QComboBox" name="comboBox_animType"/>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <widget class="QWidget" name="widget" native="true"/>
+     </item>
+    </layout>
+   </widget>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 0 - 17
collectionwindow.cpp

@@ -1,17 +0,0 @@
-#include "collectionwindow.h"
-#include "ui_collectionwindow.h"
-
-CollectionWindow::CollectionWindow(QWidget *parent) :
-    QWidget(parent),
-    ui(new Ui::CollectionWindow)
-{
-    ui->setupUi(this);
-    //动画类型和动画两个下拉选项需要添加东西
-    ui->comboBox_animationType->addItem("fdsf");
-    ui->comboBox_animation->addItem("fjsdj");
-}
-
-CollectionWindow::~CollectionWindow()
-{
-    delete ui;
-}

+ 0 - 22
collectionwindow.h

@@ -1,22 +0,0 @@
-#ifndef COLLECTIONWINDOW_H
-#define COLLECTIONWINDOW_H
-
-#include <QWidget>
-
-namespace Ui {
-class CollectionWindow;
-}
-
-class CollectionWindow : public QWidget
-{
-    Q_OBJECT
-
-public:
-    explicit CollectionWindow(QWidget *parent = nullptr);
-    ~CollectionWindow();
-
-private:
-    Ui::CollectionWindow *ui;
-};
-
-#endif // COLLECTIONWINDOW_H

+ 0 - 83
collectionwindow.ui

@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>CollectionWindow</class>
- <widget class="QWidget" name="CollectionWindow">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>400</width>
-    <height>300</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <widget class="QWidget" name="">
-   <layout class="QHBoxLayout" name="horizontalLayout">
-    <item>
-     <widget class="QLabel" name="label_animationType">
-      <property name="text">
-       <string>动画类型:</string>
-      </property>
-     </widget>
-    </item>
-    <item>
-     <widget class="QComboBox" name="comboBox_animationType"/>
-    </item>
-   </layout>
-  </widget>
-  <widget class="QWidget" name="">
-   <layout class="QHBoxLayout" name="horizontalLayout_2">
-    <item>
-     <widget class="QLabel" name="label_animation">
-      <property name="text">
-       <string>动画:</string>
-      </property>
-     </widget>
-    </item>
-    <item>
-     <widget class="QComboBox" name="comboBox_animation"/>
-    </item>
-   </layout>
-  </widget>
-  <widget class="QWidget" name="">
-   <layout class="QHBoxLayout" name="horizontalLayout_3">
-    <item>
-     <widget class="QLabel" name="label_node">
-      <property name="text">
-       <string>节点:</string>
-      </property>
-     </widget>
-    </item>
-    <item>
-     <widget class="QLineEdit" name="lineEdit_node"/>
-    </item>
-   </layout>
-  </widget>
-  <widget class="QWidget" name="">
-   <property name="geometry">
-    <rect>
-     <x>20</x>
-     <y>220</y>
-     <width>175</width>
-     <height>23</height>
-    </rect>
-   </property>
-   <layout class="QHBoxLayout" name="horizontalLayout_4">
-    <item>
-     <widget class="QLabel" name="label_shadow">
-      <property name="text">
-       <string>阴影:</string>
-      </property>
-     </widget>
-    </item>
-    <item>
-     <widget class="QLineEdit" name="lineEdit_shadow"/>
-    </item>
-   </layout>
-  </widget>
- </widget>
- <resources/>
- <connections/>
-</ui>

+ 77 - 6
dataManager.cpp

@@ -16,6 +16,41 @@ DataManager::~DataManager()
     delete jsonTemp;
 }
 
+//模板配置
+QVector<ReadJsonSrc::Fields> DataManager::getTempFields(QString key, QString name)
+{
+    QVector<ReadJsonSrc::Fields> nullVec;
+    int index = jsonTemp->getTemplateIndex(key,name);
+    if(index == -1) return nullVec;
+    return jsonTemp->templateMap[key][index].fields;
+}
+
+void DataManager::updateTempData()
+{
+    ReadJsonSrc* tmp = jsonTemp;
+    jsonTemp = new ReadJsonSrc(":/file/file/template.json");
+    delete tmp;
+}
+
+QStringList DataManager::getList(QString elem,ListType listType)
+{
+    QStringList list;
+    if(listType == ListType::Anim){
+        for(const auto &i:elements[elem]->statusEffect) list.push_back(i.name);
+    }
+    else if(listType == ListType::CollAnim){
+        for(const auto &i:elements[elem]->collAnim) list.push_back(i.name);
+    }
+    else if(listType == ListType::Pool){
+        for(const auto &i:elements[elem]->container) list.push_back(i.poolName);
+    }
+    else if(listType == ListType::AnimType){
+        for(const auto &i:jsonTemp->templateMap["collAnimTemp"]) list.push_back(i.name);
+    }
+    return list;
+}
+
+//元素及其基础属性
 bool DataManager::existElem(QString elemName)
 {
     return elements.contains(elemName);
@@ -100,10 +135,6 @@ QStringList DataManager::getTimelineList(QString elem,QString filePath)
 {
     return elements[elem]->getTimelineList(filePath);
 }
-void DataManager::changeAnimTimeline(QString elem, QString timeline,int index)
-{
-    elements[elem]->statusEffect[index].timeline = timeline;
-}
 bool DataManager::existAnim(QString elem,QString animName)
 {
     if(elements[elem]->getAnimIndex(animName) == -1) return false;
@@ -117,7 +148,47 @@ void DataManager::delAnim(QString elem,int index)
 {
     elements[elem]->statusEffect.remove(index);
 }
-void DataManager::changeAnimName(QString elem, QString animName, int index)
+void DataManager::changeAnimTable(QString elem, QString newData, int row, int column)
+{
+    if(column == 0) elements[elem]->statusEffect[row].name = newData;
+    else if(column == 1) elements[elem]->statusEffect[row].res = newData;
+    else if (column == 2) elements[elem]->statusEffect[row].timeline = newData;
+    else if (column == 3) elements[elem]->statusEffect[row].zOrder = newData;
+}
+
+//收集动画
+QString DataManager::getAnimType(QString elem, int index)
+{
+    return elements[elem]->collAnim[index].type;
+}
+void DataManager::setAnimType(QString elem, QString newType, int index)
+{
+    elements[elem]->collAnim[index].type = newType;
+    elements[elem]->collAnim[index].dataMap.clear();
+}
+QMap<QString,QString> DataManager::getCollAnimDataMap(QString elem, int index)
+{
+    return elements[elem]->collAnim[index].dataMap;
+}
+void DataManager::setCollAnimDataMapVal(QString elem, int index, QString key, QString val)
+{
+    elements[elem]->collAnim[index].dataMap[key] = val;
+}
+bool DataManager::existCollAnim(QString elem, QString collAnimName)
+{
+    if(elements[elem]->getCollAnimIndex(collAnimName) == -1) return false;
+    return true;
+}
+void DataManager::addCollAnim(QString elem,QString collAnimName)
+{
+    ElemPropertyData::CollAnim collAnim(collAnimName);
+    elements[elem]->collAnim.push_back(collAnim);
+}
+void DataManager::delCollAnim(QString elem,int index)
+{
+    elements[elem]->collAnim.remove(index);
+}
+void DataManager::changeCollAnimName(QString elem,int index,QString newName)
 {
-    elements[elem]->statusEffect[index].name = animName;
+    elements[elem]->collAnim[index].name = newName;
 }

+ 19 - 2
dataManager.h

@@ -7,6 +7,14 @@ class DataManager
 {
 public:
     static DataManager* getInstance();
+    //配置模板
+    ///获取模板中的fields,key为模板名字,name为模板中的某一选项名
+    QVector<ReadJsonSrc::Fields> getTempFields(QString key,QString name);
+    ///更新模板
+    void updateTempData();
+    enum class ListType{Anim,CollAnim,Pool,AnimType};
+    ///获取某一元素对应的动画、收集动画、容器列表
+    QStringList getList(QString elem,ListType listType);
     ///检查是否存在此元素
     bool existElem(QString elemName);
     void addElem(QString elemName);
@@ -33,11 +41,20 @@ public:
     //状态与效果动画
     QVector<ElemPropertyData::StatusEffect> getAnimVec(QString elem);
     QStringList getTimelineList(QString elem,QString filePath);
-    void changeAnimTimeline(QString elem,QString timeline,int index);
     bool existAnim(QString elem,QString animName);
     void addAnim(QString elem,QString animName);
     void delAnim(QString elem,int index);
-    void changeAnimName(QString elem,QString animName,int index);
+    void changeAnimTable(QString elem,QString newData,int row,int column);
+
+    //收集动画
+    QString getAnimType(QString elem,int index);
+    void setAnimType(QString elem, QString newType, int index);
+    QMap<QString,QString> getCollAnimDataMap(QString elem,int index);
+    void setCollAnimDataMapVal(QString elem,int index,QString key,QString val);
+    bool existCollAnim(QString elem,QString collAnimName);
+    void addCollAnim(QString elem,QString collAnimName);
+    void delCollAnim(QString elem,int index);
+    void changeCollAnimName(QString elem,int index,QString newName);
 
 private:
     DataManager();

+ 1 - 3
elemPropertyData.h

@@ -30,9 +30,8 @@ public:
     struct CollAnim{
         QString name;
         QString type;
-        QString anim;
         QMap<QString,QString> dataMap;
-        CollAnim(QString collAnimName):name(collAnimName),type("尚未选择"),anim("尚未选择"){}
+        CollAnim(QString collAnimName):name(collAnimName),type("尚未选择"){}
     };
     QVector<CollAnim> collAnim;
 
@@ -91,7 +90,6 @@ public:
     QVector<ChildElem> childElem;
     bool isSingleContainerKey(QString poolKey,QString newKey);
     bool isSingleChildElemName(QString newName);
-    bool isSingleAnimName(QString newName);
     int getAnimIndex(QString animName);
     int getCollAnimIndex(QString name);
     int getStatusValIndex(QString statusVal);

+ 127 - 445
mainwindow.cpp

@@ -1,9 +1,9 @@
 #include "mainwindow.h"
 #include "ui_mainwindow.h"
 #include "changenamedialog.h"
-#include "collectionwindow.h"
 #include "resfiledialog.h"
 #include "actionSettingDialog.h"
+#include "statusEffectAnim.h"
 #include <QListWidgetItem>
 #include <QListWidget>
 #include <QLabel>
@@ -27,14 +27,12 @@ MainWindow::MainWindow(QWidget *parent)
     QPixmap pix(":/icon/icon/pic.png");
     ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
     this->setAcceptDrops(true);
-    ui->tableWidget_animation->setHorizontalHeaderLabels({"名称","资源","时间线","z-Order"});
     ui->tableWidget_containerPool->setHorizontalHeaderLabels({"键值","资源名","初始时间线","点击时间线","影响时间线","消失时间线","消失z-Order"});
     ui->tableWidget_childElem->setHorizontalHeaderLabels({"名称","使用的池子"});
     ui->tableWidget_event->setHorizontalHeaderLabels({"事件名称","是否需要颜色一致","状态变化幅度","特效","根据格子数量消除","触发动作","触发动作设置"});
     ui->tabWidget->setCurrentIndex(0);
     ui->lineEdit_collectionType->setReadOnly(true);
-    ui->widget_dynamic->setLayout(new QFormLayout);
-    updateTempRelatedUi();
+//    updateTempRelatedUi();
 }
 
 MainWindow::~MainWindow()
@@ -138,11 +136,6 @@ QPushButton* MainWindow::createSetButton()
 void MainWindow::updateAnimComboBox(QString changedAnim)
 {
     ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    //收集动画界面
-    if(ui->listWidget_collectAnim->currentItem() != nullptr){
-        int index = ui->listWidget_collectAnim->currentRow();
-        if(elem->collAnim[index].anim == changedAnim) ui->comboBox_animation->setCurrentIndex(0);
-    }
     //状态配置界面
     if(ui->listWidget_status->currentItem() != nullptr){
         int index = ui->listWidget_status->currentRow();
@@ -172,6 +165,13 @@ void MainWindow::updateCollAnimComboBox(QString changedAnim)
 void MainWindow::setUi(QString elem)
 {
     std::cout<<"切换成元素"<<qPrintable(elem)<<",刷新界面"<<std::endl;
+    if(firstSelectElem){
+        animUi = new StatusEffectAnim();
+        ui->tabWidget->addTab(animUi,"状态与效果动画");
+        collAnimUi = new CollAnim();
+        ui->tabWidget->addTab(collAnimUi,"收集动画");
+        firstSelectElem = false;
+    }
     //基础元素区域的设置
     QPixmap pix(DataManager::getInstance()->getIconPath(elem));
     ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
@@ -183,67 +183,62 @@ void MainWindow::setUi(QString elem)
 
     //TODO:调用各个界面的刷新显示
     //设置状态与效果动画表格显示
-
-
-    //设置收集动画的显示并聚焦到收集动画列表的最后一个元素
-    ui->listWidget_collectAnim->clear();
-    for(const auto &i:elem->collAnim){
-        ui->listWidget_collectAnim->addItem(i.name);
-    }
-//    ui->listWidget_collectAnim->item(0)->setSelected(true); // 设置选中
-
-    //设置状态配置界面
-    ui->listWidget_status->clear();
-    for(const auto &i:elem->statusConfig){
-        ui->listWidget_status->addItem(i.statusValue);
-    }
-    //切换元素时状态尚未选中,先清除事件表格内容
-    rowCnt = ui->tableWidget_event->rowCount();
-    for(int i=0;i<rowCnt;i++){
-        ui->tableWidget_event->removeRow(0);
-    }
-
-    //设置收集动画和状态配置的comboBox
-    ui->comboBox_initAnim->clear();
-    ui->comboBox_clickAnim->clear();
-    ui->comboBox_collectAnimation->clear();
-    ui->comboBox_animation->clear();
-    ui->comboBox_initAnim->addItem("尚未选择");
-    ui->comboBox_clickAnim->addItem("尚未选择");
-    ui->comboBox_collectAnimation->addItem("尚未选择");
-    ui->comboBox_animation->addItem("尚未选择");
-    for(const auto &i:elem->statusEffect){
-        ui->comboBox_clickAnim->addItem(i.name);
-        ui->comboBox_animation->addItem(i.name);
-        ui->comboBox_initAnim->addItem(i.name);
-    }
-    for(const auto &i:elem->collAnim){
-        ui->comboBox_collectAnimation->addItem(i.name);
-    }
-
-    //设置容器池界面
-    ui->listWidget_pool->clear();
-    for(const auto &i:elem->container){
-        ui->listWidget_pool->addItem(i.poolName);
-    }
-
-    //切换元素时容器尚未选中,先清除表格内容
-    int rowNum = ui->tableWidget_containerPool->rowCount();
-    for(int i=0;i<rowNum;i++){
-        ui->tableWidget_containerPool->removeRow(0);
-    }
-
-    //设置子元素界面
-    rowCnt = ui->tableWidget_childElem->rowCount();
-    for(int i=0;i<rowCnt;i++){
-        ui->tableWidget_childElem->removeRow(0);
-    }
-    for(const auto &i:elem->childElem){
-        int rowNum = ui->tableWidget_childElem->rowCount();
-        ui->tableWidget_childElem->insertRow(rowNum);
-        ui->tableWidget_childElem->setItem(rowNum,0,new QTableWidgetItem(i.name));
-        ui->tableWidget_childElem->setCellWidget(rowNum,1,createPoolBox(i.container));
-    }
+    animUi->setUi(elem);
+    collAnimUi->setUi(elem);
+
+
+//    //设置状态配置界面
+//    ui->listWidget_status->clear();
+//    for(const auto &i:elem->statusConfig){
+//        ui->listWidget_status->addItem(i.statusValue);
+//    }
+//    //切换元素时状态尚未选中,先清除事件表格内容
+//    rowCnt = ui->tableWidget_event->rowCount();
+//    for(int i=0;i<rowCnt;i++){
+//        ui->tableWidget_event->removeRow(0);
+//    }
+
+//    //设置收集动画和状态配置的comboBox
+//    ui->comboBox_initAnim->clear();
+//    ui->comboBox_clickAnim->clear();
+//    ui->comboBox_collectAnimation->clear();
+//    ui->comboBox_animation->clear();
+//    ui->comboBox_initAnim->addItem("尚未选择");
+//    ui->comboBox_clickAnim->addItem("尚未选择");
+//    ui->comboBox_collectAnimation->addItem("尚未选择");
+//    ui->comboBox_animation->addItem("尚未选择");
+//    for(const auto &i:elem->statusEffect){
+//        ui->comboBox_clickAnim->addItem(i.name);
+//        ui->comboBox_animation->addItem(i.name);
+//        ui->comboBox_initAnim->addItem(i.name);
+//    }
+//    for(const auto &i:elem->collAnim){
+//        ui->comboBox_collectAnimation->addItem(i.name);
+//    }
+
+//    //设置容器池界面
+//    ui->listWidget_pool->clear();
+//    for(const auto &i:elem->container){
+//        ui->listWidget_pool->addItem(i.poolName);
+//    }
+
+//    //切换元素时容器尚未选中,先清除表格内容
+//    int rowNum = ui->tableWidget_containerPool->rowCount();
+//    for(int i=0;i<rowNum;i++){
+//        ui->tableWidget_containerPool->removeRow(0);
+//    }
+
+//    //设置子元素界面
+//    rowCnt = ui->tableWidget_childElem->rowCount();
+//    for(int i=0;i<rowCnt;i++){
+//        ui->tableWidget_childElem->removeRow(0);
+//    }
+//    for(const auto &i:elem->childElem){
+//        int rowNum = ui->tableWidget_childElem->rowCount();
+//        ui->tableWidget_childElem->insertRow(rowNum);
+//        ui->tableWidget_childElem->setItem(rowNum,0,new QTableWidgetItem(i.name));
+//        ui->tableWidget_childElem->setCellWidget(rowNum,1,createPoolBox(i.container));
+//    }
 }
 
 void MainWindow::on_pushButton_chooseFile_clicked()
@@ -350,48 +345,6 @@ void MainWindow::on_listWidget_elem_currentItemChanged(QListWidgetItem *current,
    setUi(current->text());
 }
 
-//替换资源文件
-void MainWindow::on_tableWidget_animation_cellDoubleClicked(int row, int column)
-{
-    if(ui->listWidget_elem->currentItem()==nullptr) return;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    //表格内容修改flag
-    animTableItemChanged = true;
-    if(column == 1){
-        ResFileDialog res;
-        res.setModal(true);
-        res.exec();
-        QString fileName = res.getResName();
-        if(!fileName.isEmpty()){
-            QTableWidgetItem* res = new QTableWidgetItem(getFileName(fileName));
-            // 此单元格不可编辑
-            res->setFlags(res->flags() & ~Qt::ItemIsEditable);
-            ui->tableWidget_animation->setItem(row,1,res);
-            QComboBox* timeLine = createTimelineBox("",fileName,TimelineType::Animation);
-            ui->tableWidget_animation->setCellWidget(row,column+1,timeLine);
-            //保存当前数据
-            elem->statusEffect[row].res = fileName;
-        }
-    }
-}
-
-///动画区时间线数据发生改变
-void MainWindow::onTimelineTextChanged(const QString &arg1)
-{
-    if(ui->listWidget_elem->currentItem() == nullptr) return;
-    //获取时间线列表所在位置
-    std::cout<<"current timeline is:"<<qPrintable(arg1)<<std::endl;
-    QComboBox *timeline = dynamic_cast<QComboBox*>(this->sender());
-    int x = timeline->frameGeometry().x();
-    int y = timeline->frameGeometry().y();
-    QModelIndex index = ui->tableWidget_animation->indexAt(QPoint(x,y));
-    int row = index.row();
-    //修改数据
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    elem->statusEffect[row].timeline = timeline->currentText();
-    std::cout<<"row:"<<row<<std::endl;
-}
-
 ///容器池区时间线数据发生改变
 void MainWindow::onPoolTimelineTextChanged(const QString &arg1)
 {
@@ -519,274 +472,6 @@ void MainWindow::createSetWindow(QString actionName,int row)
     if(!setDialog.dataMap.empty()) dataMap = setDialog.dataMap;
 }
 
-void MainWindow::on_pushButton_addAnimation_clicked()
-{
-    if(ui->listWidget_elem->currentItem()==nullptr) return;
-    int rowNum = ui->tableWidget_animation->rowCount();
-    ui->tableWidget_animation->insertRow(rowNum);
-    QString elemName = ui->listWidget_elem->currentItem()->text();
-    ElemPropertyData* elem = elements[elemName];
-    QString animName = "anim";
-    int id = 1;
-    while(1){
-        if(elem->isSingleAnimName(animName)){
-            break;
-        }
-        animName = "anim" + QString::number(id++);
-    }
-    ui->tableWidget_animation->setItem(rowNum,0,new QTableWidgetItem(animName));
-    QTableWidgetItem* res = new QTableWidgetItem("双击添加资源文件");
-    // 此单元格不可编辑
-    res->setFlags(res->flags() & ~Qt::ItemIsEditable);
-    ui->tableWidget_animation->setItem(rowNum,1,res);
-    ui->tableWidget_animation->setCellWidget(rowNum,2,createBox("",{}));
-    ui->tableWidget_animation->setItem(rowNum,3,new QTableWidgetItem("0"));
-    elem->statusEffect.push_back(ElemPropertyData::StatusEffect(animName));
-    //更新与动画相关的下拉选项
-    ui->comboBox_initAnim->addItem(animName);
-    ui->comboBox_clickAnim->addItem(animName);
-    ui->comboBox_animation->addItem(animName);
-    //更新状态配置表格当前状态的特效下拉选项
-    if(ui->listWidget_status->currentItem() != nullptr){
-        int rowNum = ui->tableWidget_event->rowCount();
-        for(int i=0;i<rowNum;i++){
-            QComboBox *effect = qobject_cast<QComboBox*>(ui->tableWidget_event->cellWidget(i,3));
-            effect->addItem(animName);
-        }
-    }
-}
-
-
-void MainWindow::on_pushButton_delAnimation_clicked()
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->tableWidget_animation->currentRow() == -1) return;
-    QMessageBox::StandardButton reply = QMessageBox::question(this,"删除动画","确定要删除此动画吗?");
-    if(reply == QMessageBox::Yes){
-        int curRow = ui->tableWidget_animation->currentRow();
-        QString animName = ui->tableWidget_animation->item(curRow,0)->text();
-        QVector<ElemPropertyData::StatusEffect> &animVec = elements[ui->listWidget_elem->currentItem()->text()]->statusEffect;
-        animVec.remove(curRow);
-        ui->tableWidget_animation->removeRow(curRow);
-        //更新动画相关的下拉选项
-        updateAnimComboBox(animName);
-        ui->comboBox_initAnim->removeItem(ui->comboBox_initAnim->findText(animName));
-        ui->comboBox_clickAnim->removeItem(ui->comboBox_clickAnim->findText(animName));
-        ui->comboBox_animation->removeItem(ui->comboBox_animation->findText(animName));
-    }  
-}
-
-void MainWindow::on_tableWidget_animation_itemChanged(QTableWidgetItem *item)
-{
-    if(!animTableItemChanged) return;
-    animTableItemChanged = false;
-    int column = item->column();
-    int row = item->row();
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    QVector<ElemPropertyData::StatusEffect> &animVec = elem->statusEffect;
-    if(column == 0){
-        QString newName = ui->tableWidget_animation->item(row,0)->text();
-        if(!elem->isSingleAnimName(newName)){
-            QMessageBox::critical(this,"警告","该动画名已存在!");
-            ui->tableWidget_animation->item(row,0)->setText(animVec[row].name);
-            return;
-        }
-        std::cout<<"名字发生改变,新名字:"<<qPrintable(newName)<<std::endl;
-        //更新动画相关的下拉选项
-        updateAnimComboBox(animVec[row].name);
-        ui->comboBox_initAnim->removeItem(ui->comboBox_initAnim->findText(animVec[row].name));
-        ui->comboBox_clickAnim->removeItem(ui->comboBox_clickAnim->findText(animVec[row].name));
-        ui->comboBox_animation->removeItem(ui->comboBox_animation->findText(animVec[row].name));
-        ui->comboBox_initAnim->addItem(newName);
-        ui->comboBox_clickAnim->addItem(newName);
-        ui->comboBox_animation->addItem(newName);
-        animVec[row].name = newName;
-    }
-    //资源名发生修改
-    else if(column == 1){
-        std::cout<<"动画资源发生改变,新资源名:"<<qPrintable(ui->tableWidget_animation->item(row,1)->text())<<std::endl;
-    }
-    else{
-        bool ok;double a = ui->tableWidget_animation->item(row,3)->text().toDouble(&ok);
-        int zOrder = ui->tableWidget_animation->item(row,3)->text().toInt();
-        if(!ok || zOrder<0 || zOrder>100000){
-            QMessageBox::critical(this,"警告","z-Order值超出范围!");
-            ui->tableWidget_animation->item(row,3)->setText(animVec[row].zOrder);
-            return;
-        }
-        std::cout<<"z-Order值发生改变,新值为:"<<zOrder<<std::endl;
-        animVec[row].zOrder = item->text();
-    }
-}
-
-void MainWindow::on_pushButton_addCollectAnim_clicked()
-{
-    if(ui->listWidget_elem->currentItem() == nullptr) return;
-    QString collAnimName = "collAnim";
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    int id = 1;
-    while(1){
-        if(elem->getCollAnimIndex(collAnimName) == -1){
-            break;
-        }
-        collAnimName = "collAnim" + QString::number(id++);
-    }
-    ui->listWidget_collectAnim->addItem(new QListWidgetItem(collAnimName));
-    ElemPropertyData::CollAnim collAnim(collAnimName);
-    elem->collAnim.push_back(collAnim);
-    ui->comboBox_collectAnimation->addItem(collAnimName);
-//    ui->listWidget_collectAnim->item(ui->listWidget_collectAnim->count() - 1)->setSelected(true); // 设置选中
-//    ui->listWidget_collectAnim->scrollToBottom();
-}
-
-void MainWindow::on_pushButton_delCollectAnim_clicked()
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_collectAnim->currentItem() == nullptr) return;
-    QMessageBox::StandardButton reply = QMessageBox::question(this,"删除收集动画","确定要删除此收集动画吗?");
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    if(reply == QMessageBox::Yes){
-        QString delName = ui->listWidget_collectAnim->currentItem()->text();
-        QVector<ElemPropertyData::CollAnim> &collAnimVec = elem->collAnim;
-        collAnimVec.remove(ui->listWidget_collectAnim->currentRow());
-        delete ui->listWidget_collectAnim->takeItem(ui->listWidget_collectAnim->currentRow());
-        updateCollAnimComboBox(delName);
-        ui->comboBox_collectAnimation->removeItem(ui->comboBox_collectAnimation->findText(delName));
-    }
-}
-
-
-void MainWindow::on_listWidget_collectAnim_itemDoubleClicked(QListWidgetItem *item)
-{
-    ChangeNameDialog newName;
-    newName.setModal(true);
-    newName.exec();
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    QString name = newName.getNewName();
-    if(!name.isEmpty()){
-        if(elem->getCollAnimIndex(name) != -1){
-            QMessageBox::critical(this,"警告","该收集动画名已存在!");
-            return;
-        }
-        updateCollAnimComboBox(item->text());
-        ui->comboBox_collectAnimation->removeItem(ui->comboBox_collectAnimation->findText(item->text()));
-        ui->comboBox_collectAnimation->addItem(name);
-        elem->collAnim[elem->getCollAnimIndex(item->text())].name = name;
-        item->setText(name);
-    }
-}
-
-void MainWindow::on_comboBox_animationType_currentTextChanged(const QString &arg1)
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_collectAnim->currentItem() ==  nullptr || isSetUi) return;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    int index = ui->listWidget_collectAnim->currentRow();
-    elem->collAnim[index].type = arg1;
-    std::cout<<"收集动画第"<<index<<"行动画类型改变:"<<qPrintable(arg1)<<std::endl;
-    elem->collAnim[index].dataMap.clear();
-    setCollAnimWidget();
-}
-
-///设置收集动画动态界面
-void MainWindow::setCollAnimWidget()
-{
-    QString animType = ui->comboBox_animationType->currentText();
-    QFormLayout* formlayout = dynamic_cast<QFormLayout*>(ui->widget_dynamic->layout());
-    int rowCout = formlayout->rowCount();
-    for(int i=0;i<rowCout;i++) formlayout->removeRow(0);
-    if(animType == "尚未选择") return;
-    int index = jsonTemp->getTemplateIndex("collAnimTemp",animType);
-    if(index == -1) {
-        std::cout<<"未找到"<<qPrintable(animType)<<"收集动画类型对应模板"<<std::endl;
-        return;
-    }
-    QVector<ReadJsonSrc::Template> tempVec = jsonTemp->templateMap["collAnimTemp"];
-    QVector<ReadJsonSrc::Fields> fields = tempVec[index].fields;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    QMap<QString,QString> &data = elem->collAnim[ui->listWidget_collectAnim->currentRow()].dataMap;
-    for(const auto &i:fields){
-        if(i.type == "list"){
-            QStringList list;
-            if(i.src == "animations"){
-                for(const auto &anim:elem->statusEffect) list.push_back(anim.name);
-            }
-            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;
-        }
-    }
-}
-
-///收集动画动态界面下拉选项数据变化时
-void MainWindow::onComboBoxTextChanged(QString arg)
-{
-    QComboBox *box = dynamic_cast<QComboBox*>(this->sender());
-    QFormLayout* formlayout = dynamic_cast<QFormLayout*>(ui->widget_dynamic->layout());
-    QLabel *label = dynamic_cast<QLabel*>(formlayout->labelForField(box));
-    std::cout<<qPrintable(label->text())<<": "<<qPrintable(arg)<<std::endl;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    elem->collAnim[ui->listWidget_collectAnim->currentRow()].dataMap[label->text()] = arg;
-}
-
-///收集动画动态界面单行编辑数据变化时
-void MainWindow::onLineEditTextChanged()
-{
-    QLineEdit *edit = dynamic_cast<QLineEdit*>(this->sender());
-    QFormLayout* formlayout = dynamic_cast<QFormLayout*>(ui->widget_dynamic->layout());
-    QLabel *label = dynamic_cast<QLabel*>(formlayout->labelForField(edit));
-    std::cout<<qPrintable(label->text())<<": "<<qPrintable(edit->text())<<std::endl;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    elem->collAnim[ui->listWidget_collectAnim->currentRow()].dataMap[label->text()] = edit->text();
-}
-
-
-void MainWindow::on_comboBox_animation_currentTextChanged(const QString &arg1)
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_collectAnim->currentItem() ==  nullptr || isSetUi) return;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    int index = ui->listWidget_collectAnim->currentRow();
-    elem->collAnim[index].anim = arg1;
-}
-
-//设置收集动画显示
-void MainWindow::setCollectAnimUi(QString collectAnimName)
-{
-    if(ui->listWidget_collectAnim->currentItem() != nullptr){
-        isSetUi = true;
-        ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-        ElemPropertyData::CollAnim collAnimData = elem->collAnim[elem->getCollAnimIndex(collectAnimName)];
-        int typeIndex = ui->comboBox_animationType->findText(collAnimData.type);
-        if(typeIndex == -1){
-            typeIndex = 0;
-            elem->collAnim[ui->listWidget_collectAnim->currentRow()].type = "尚未选择";
-        }
-        ui->comboBox_animationType->setCurrentIndex(typeIndex);
-        setCollAnimWidget();
-        int index = ui->comboBox_animation->findText(collAnimData.anim);
-        if(index == -1) index = 0;
-        ui->comboBox_animation->setCurrentIndex(index);
-        isSetUi = false;
-    }
-}
-
-void MainWindow::on_listWidget_collectAnim_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
-{
-    //TODO: 或许需要另外保存当前界面的数据
-    if(current != nullptr){
-        setCollectAnimUi(current->text());
-    }
-}
 
 //生成模板并更新状态配置的数据
 void MainWindow::on_pushButton_genTemp_clicked()
@@ -1007,7 +692,7 @@ void MainWindow::setPoolUi(QString poolName)
         int rowNum = ui->tableWidget_containerPool->rowCount();
         ui->tableWidget_containerPool->insertRow(rowNum);
         ui->tableWidget_containerPool->setItem(rowNum,0,new QTableWidgetItem(i.key));
-        QTableWidgetItem* res = new QTableWidgetItem(getFileName(i.res));
+        QTableWidgetItem* res = new QTableWidgetItem(i.res);
         // 此单元格不可编辑
         res->setFlags(res->flags() & ~Qt::ItemIsEditable);
         ui->tableWidget_containerPool->setItem(rowNum,1,res);
@@ -1031,7 +716,7 @@ void MainWindow::on_tableWidget_containerPool_cellDoubleClicked(int row, int col
         res.exec();
         QString fileName = res.getResName();
         if(!fileName.isEmpty()){
-            ui->tableWidget_containerPool->setItem(row,column,new QTableWidgetItem(getFileName(fileName)));
+            ui->tableWidget_containerPool->setItem(row,column,new QTableWidgetItem(fileName));
             ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
             int index = ui->listWidget_pool->currentRow();
             elem->container[index].table[row].res = fileName;
@@ -1343,71 +1028,67 @@ void MainWindow::on_comboBox_collectAnimation_currentTextChanged(const QString &
 ///模板更新后更新与模板配置相关的界面显示
 void MainWindow::updateTempRelatedUi()
 {
-    isSetUi = true;
-    //收集动画
-    ui->comboBox_animationType->clear();
-    ui->comboBox_animationType->addItem("尚未选择");
-    for(const auto &i:jsonTemp->templateMap["collAnimTemp"]) ui->comboBox_animationType->addItem(i.name);
-    //状态配置
-    int rowNum = ui->tableWidget_event->rowCount();
-    for(int i=0;i<rowNum;i++){
-        //事件名称配置
-        ui->tableWidget_event->setCellWidget(i,0,createEventBox("尚未选择"));
-        ui->tableWidget_event->setCellWidget(i,5,createTriggerAction("尚未选择"));
-    }
-    //容器池
-    ui->comboBox_container->clear();
-    ui->comboBox_container->addItem("尚未选择");
-    for(const auto &i:jsonTemp->templateMap["poolTemp"]) ui->comboBox_container->addItem(i.name);
-    int animIndex = 0,poolIndex = 0;
-
-    //若当前界面选择的选项没有被改变,仍然保持当前选项
-    if(ui->listWidget_elem->currentItem() != nullptr){
-        ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-        //收集动画
-        if(ui->listWidget_collectAnim->currentItem() != nullptr) {
-            int index = ui->listWidget_collectAnim->currentRow();
-            std::cout<<"当前选择的收集动画类型:"<<qPrintable(elem->collAnim[index].type)<<std::endl;
-            animIndex = ui->comboBox_animationType->findText(elem->collAnim[index].type);
-            if(animIndex == -1){
-                animIndex = 0;
-                elem->collAnim[ui->listWidget_collectAnim->currentRow()].type = "尚未选择";
-            }
-            setCollAnimWidget();
-        }
-        //容器池
-        if(ui->listWidget_pool->currentItem() != nullptr){
-            int index = ui->listWidget_pool->currentRow();
-            std::cout<<"当前选择的容器类型:"<<qPrintable(elem->container[index].type)<<std::endl;
-            poolIndex = ui->comboBox_container->findText(elem->container[index].type);
-            if(poolIndex == -1) poolIndex = 0;
-        }
-        //事件配置
-        if(ui->listWidget_status->currentItem() != nullptr){
-            int index = ui->listWidget_status->currentRow();
-            int rowNum = ui->tableWidget_event->rowCount();
-            for(int i=0;i<rowNum;i++){
-                //事件配置
-                QComboBox* nameBox = dynamic_cast<QComboBox*>(ui->tableWidget_event->cellWidget(i,0));
-                QComboBox* actionBox = dynamic_cast<QComboBox*>(ui->tableWidget_event->cellWidget(i,5));
-                int eindex = nameBox->findText(elem->statusConfig[index].eventConfig[i].name);
-                if(eindex != -1) nameBox->setCurrentIndex(eindex);
-                std::cout<<"当前触发动作:"<<qPrintable(elem->statusConfig[index].eventConfig[i].triggerAction)<<std::endl;
-                int aindex = actionBox->findText(elem->statusConfig[index].eventConfig[i].triggerAction);
-                if(aindex != -1) actionBox->setCurrentIndex(aindex);
-            }
-        }
-    }
-    ui->comboBox_animationType->setCurrentIndex(animIndex);
-    ui->comboBox_container->setCurrentIndex(poolIndex);
-    isSetUi = false;
+    //重新设置收集动画界面
+    collAnimUi->setCollectAnimUi();
+
+//    //状态配置
+//    int rowNum = ui->tableWidget_event->rowCount();
+//    for(int i=0;i<rowNum;i++){
+//        //事件名称配置
+//        ui->tableWidget_event->setCellWidget(i,0,createEventBox("尚未选择"));
+//        ui->tableWidget_event->setCellWidget(i,5,createTriggerAction("尚未选择"));
+//    }
+//    //容器池
+//    ui->comboBox_container->clear();
+//    ui->comboBox_container->addItem("尚未选择");
+//    for(const auto &i:jsonTemp->templateMap["poolTemp"]) ui->comboBox_container->addItem(i.name);
+//    int animIndex = 0,poolIndex = 0;
+
+//    //若当前界面选择的选项没有被改变,仍然保持当前选项
+//    if(ui->listWidget_elem->currentItem() != nullptr){
+//        ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
+//        //收集动画
+//        if(ui->listWidget_collectAnim->currentItem() != nullptr) {
+//            int index = ui->listWidget_collectAnim->currentRow();
+//            std::cout<<"当前选择的收集动画类型:"<<qPrintable(elem->collAnim[index].type)<<std::endl;
+//            animIndex = ui->comboBox_animationType->findText(elem->collAnim[index].type);
+//            if(animIndex == -1){
+//                animIndex = 0;
+//                elem->collAnim[ui->listWidget_collectAnim->currentRow()].type = "尚未选择";
+//            }
+//            setCollAnimWidget();
+//        }
+//        //容器池
+//        if(ui->listWidget_pool->currentItem() != nullptr){
+//            int index = ui->listWidget_pool->currentRow();
+//            std::cout<<"当前选择的容器类型:"<<qPrintable(elem->container[index].type)<<std::endl;
+//            poolIndex = ui->comboBox_container->findText(elem->container[index].type);
+//            if(poolIndex == -1) poolIndex = 0;
+//        }
+//        //事件配置
+//        if(ui->listWidget_status->currentItem() != nullptr){
+//            int index = ui->listWidget_status->currentRow();
+//            int rowNum = ui->tableWidget_event->rowCount();
+//            for(int i=0;i<rowNum;i++){
+//                //事件配置
+//                QComboBox* nameBox = dynamic_cast<QComboBox*>(ui->tableWidget_event->cellWidget(i,0));
+//                QComboBox* actionBox = dynamic_cast<QComboBox*>(ui->tableWidget_event->cellWidget(i,5));
+//                int eindex = nameBox->findText(elem->statusConfig[index].eventConfig[i].name);
+//                if(eindex != -1) nameBox->setCurrentIndex(eindex);
+//                std::cout<<"当前触发动作:"<<qPrintable(elem->statusConfig[index].eventConfig[i].triggerAction)<<std::endl;
+//                int aindex = actionBox->findText(elem->statusConfig[index].eventConfig[i].triggerAction);
+//                if(aindex != -1) actionBox->setCurrentIndex(aindex);
+//            }
+//        }
+//    }
+//    ui->comboBox_animationType->setCurrentIndex(animIndex);
+//    ui->comboBox_container->setCurrentIndex(poolIndex);
+//    isSetUi = false;
 }
 
 void MainWindow::on_reloadTempFile_triggered()
 {
-    ReadJsonSrc* tmp = jsonTemp;
-    jsonTemp = new ReadJsonSrc(":/file/file/template.json");
-    delete tmp;
+    DataManager::getInstance()->updateTempData();
     updateTempRelatedUi();
 }
 
@@ -1439,8 +1120,9 @@ void MainWindow::on_pushButton_delEvent_clicked()
 
 void MainWindow::on_tabWidget_currentChanged(int index)
 {
-    if(index==1 && ui->listWidget_collectAnim->currentItem()!=nullptr){
-        setCollAnimWidget();
+    //更新下拉选项
+    if(index == 3){
+        collAnimUi->setCollAnimWidget();
     }
 }
 

+ 16 - 20
mainwindow.h

@@ -6,6 +6,8 @@
 #include <QTableWidgetItem>
 #include "elemPropertyData.h"
 #include "readJsonSrc.h"
+#include "statusEffectAnim.h"
+#include "collAnim.h"
 #include <QMap>
 #include <QComboBox>
 #include <QCheckBox>
@@ -30,13 +32,13 @@ private slots:
 
     void on_pushButton_chooseFile_clicked();
 
-    void on_pushButton_addAnimation_clicked();
+//    void on_pushButton_addAnimation_clicked();
 
-    void on_pushButton_addCollectAnim_clicked();
+//    void on_pushButton_addCollectAnim_clicked();
 
-    void on_pushButton_delCollectAnim_clicked();
+//    void on_pushButton_delCollectAnim_clicked();
 
-    void on_listWidget_collectAnim_itemDoubleClicked(QListWidgetItem *item);
+//    void on_listWidget_collectAnim_itemDoubleClicked(QListWidgetItem *item);
 
     void on_pushButton_addStatus_clicked();
 
@@ -50,12 +52,6 @@ private slots:
 
     void on_listWidget_elem_itemDoubleClicked(QListWidgetItem *item);
 
-    void on_tableWidget_animation_cellDoubleClicked(int row, int column);
-
-    void on_pushButton_delAnimation_clicked();
-
-    void on_tableWidget_animation_itemChanged(QTableWidgetItem *item);
-
     void on_listWidget_elem_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
 
     void on_lineEdit_name_editingFinished();
@@ -68,15 +64,11 @@ private slots:
 
     void on_spinBox_drop_valueChanged(int arg1);
 
-    void on_comboBox_animationType_currentTextChanged(const QString &arg1);
+//    void on_comboBox_animationType_currentTextChanged(const QString &arg1);
 
-    void on_comboBox_animation_currentTextChanged(const QString &arg1);
+//    void on_comboBox_animation_currentTextChanged(const QString &arg1);
 
-    void onTimelineTextChanged(const QString &arg1);
-
-    void on_listWidget_collectAnim_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
-
-//    void on_tabWidget_currentChanged(int index);
+//    void on_listWidget_collectAnim_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
 
     void on_pushButton_genTemp_clicked();
 
@@ -138,9 +130,9 @@ private slots:
 
     void on_pushButton_delEvent_clicked();
 
-    void onLineEditTextChanged();
+//    void onLineEditTextChanged();
 
-    void onComboBoxTextChanged(QString arg1);
+//    void onComboBoxTextChanged(QString arg1);
 
     void on_tabWidget_currentChanged(int index);
 
@@ -159,7 +151,6 @@ private:
     bool eventTableItemChanged = false;
     void setCollectAnimUi(QString collectAnimName);
     void setPoolUi(QString poolName);
-    QString getFileName(QString filePath);
     enum class TimelineType{Animation,Pool};
     QComboBox* createBox(QString choice,QStringList list);
     QComboBox* createTimelineBox(QString chosenTimeline,QString filename,TimelineType type);
@@ -177,5 +168,10 @@ private:
     bool isSetUi = false;
     void createSetWindow(QString actionName,int row);
     void setCollAnimWidget();
+
+    //四个ui子界面
+    bool firstSelectElem = true;
+    StatusEffectAnim* animUi;
+    CollAnim* collAnimUi;
 };
 #endif // MAINWINDOW_H

+ 0 - 119
mainwindow.ui

@@ -192,125 +192,6 @@
           <property name="elideMode">
            <enum>Qt::ElideRight</enum>
           </property>
-          <widget class="QWidget" name="tab_effect_2">
-           <attribute name="title">
-            <string> 状态与效果动画</string>
-           </attribute>
-           <layout class="QHBoxLayout" name="horizontalLayout_8">
-            <item>
-             <widget class="QTableWidget" name="tableWidget_animation">
-              <property name="rowCount">
-               <number>0</number>
-              </property>
-              <property name="columnCount">
-               <number>4</number>
-              </property>
-              <column/>
-              <column/>
-              <column/>
-              <column/>
-             </widget>
-            </item>
-            <item>
-             <layout class="QVBoxLayout" name="verticalLayout_4">
-              <item>
-               <widget class="QPushButton" name="pushButton_addAnimation">
-                <property name="text">
-                 <string>添加动画</string>
-                </property>
-               </widget>
-              </item>
-              <item>
-               <widget class="QPushButton" name="pushButton_delAnimation">
-                <property name="text">
-                 <string>删除动画</string>
-                </property>
-               </widget>
-              </item>
-              <item>
-               <spacer name="verticalSpacer">
-                <property name="orientation">
-                 <enum>Qt::Vertical</enum>
-                </property>
-                <property name="sizeHint" stdset="0">
-                 <size>
-                  <width>20</width>
-                  <height>40</height>
-                 </size>
-                </property>
-               </spacer>
-              </item>
-             </layout>
-            </item>
-           </layout>
-          </widget>
-          <widget class="QWidget" name="tab_collection_2">
-           <attribute name="title">
-            <string>收集动画</string>
-           </attribute>
-           <layout class="QHBoxLayout" name="horizontalLayout_18">
-            <item>
-             <layout class="QVBoxLayout" name="verticalLayout_3">
-              <item>
-               <widget class="QListWidget" name="listWidget_collectAnim"/>
-              </item>
-              <item>
-               <layout class="QHBoxLayout" name="horizontalLayout_21">
-                <item>
-                 <widget class="QPushButton" name="pushButton_addCollectAnim">
-                  <property name="text">
-                   <string>添加</string>
-                  </property>
-                 </widget>
-                </item>
-                <item>
-                 <widget class="QPushButton" name="pushButton_delCollectAnim">
-                  <property name="text">
-                   <string>删除</string>
-                  </property>
-                 </widget>
-                </item>
-               </layout>
-              </item>
-             </layout>
-            </item>
-            <item>
-             <layout class="QVBoxLayout" name="verticalLayout_7">
-              <item>
-               <layout class="QHBoxLayout" name="horizontalLayout_20">
-                <item>
-                 <widget class="QLabel" name="label_animationType_2">
-                  <property name="text">
-                   <string>动画类型:</string>
-                  </property>
-                 </widget>
-                </item>
-                <item>
-                 <widget class="QComboBox" name="comboBox_animationType"/>
-                </item>
-               </layout>
-              </item>
-              <item>
-               <layout class="QHBoxLayout" name="horizontalLayout_17">
-                <item>
-                 <widget class="QLabel" name="label_animation_2">
-                  <property name="text">
-                   <string>动画:</string>
-                  </property>
-                 </widget>
-                </item>
-                <item>
-                 <widget class="QComboBox" name="comboBox_animation"/>
-                </item>
-               </layout>
-              </item>
-              <item>
-               <widget class="QWidget" name="widget_dynamic" native="true"/>
-              </item>
-             </layout>
-            </item>
-           </layout>
-          </widget>
           <widget class="QWidget" name="tab_statusConfiguration_2">
            <attribute name="title">
             <string>状态配置</string>

+ 33 - 19
statusEffectAnim.cpp

@@ -1,6 +1,7 @@
 #include "statusEffectAnim.h"
 #include "ui_statusEffectAnim.h"
 #include "dataManager.h"
+#include "resfiledialog.h"
 #include <iostream>
 #include <QMessageBox>
 
@@ -18,12 +19,6 @@ StatusEffectAnim::~StatusEffectAnim()
     delete ui;
 }
 
-StatusEffectAnim* StatusEffectAnim::getInstance()
-{
-    static StatusEffectAnim anim;
-    return &anim;
-}
-
 QString StatusEffectAnim::getFileName(QString filePath)
 {
     if(filePath == "双击添加资源文件") return filePath;
@@ -74,7 +69,7 @@ void StatusEffectAnim::onTimelineTextChanged(const QString &arg1)
     QModelIndex index = ui->tableWidget_animation->indexAt(QPoint(x,y));
     int row = index.row();
     //修改数据
-    DataManager::getInstance()->changeAnimTimeline(currentElem,arg1,row);
+    DataManager::getInstance()->changeAnimTable(currentElem,arg1,row,2);
 }
 
 void StatusEffectAnim::setUi(QString elem)
@@ -139,31 +134,50 @@ void StatusEffectAnim::on_tableWidget_animation_itemChanged(QTableWidgetItem *it
     animTableItemChanged = false;
     int column = item->column();
     int row = item->row();
-    QVector<ElemPropertyData::StatusEffect> animVec = elem->statusEffect;
+    QVector<ElemPropertyData::StatusEffect> animVec = DataManager::getInstance()->getAnimVec(currentElem);
     if(column == 0){
-        QString newName = ui->tableWidget_animation->item(row,0)->text();
-        if(!DataManager::getInstance()->existAnim(currentElem,newName)){
+        QString newName = item->text();
+        if(DataManager::getInstance()->existAnim(currentElem,newName)){
             QMessageBox::critical(this,"警告","该动画名已存在!");
             ui->tableWidget_animation->item(row,0)->setText(animVec[row].name);
             return;
         }
         std::cout<<"名字发生改变,新名字:"<<qPrintable(newName)<<std::endl;
-        DataManager::getInstance()->changeAnimName(currentElem,newName,row);
-    }
-    //资源名发生修改
-    else if(column == 1){
-        std::cout<<"动画资源发生改变,新资源名:"<<qPrintable(ui->tableWidget_animation->item(row,1)->text())<<std::endl;
+        DataManager::getInstance()->changeAnimTable(currentElem,newName,row,0);
     }
-    else{
-        bool ok;double a = ui->tableWidget_animation->item(row,3)->text().toDouble(&ok);
-        int zOrder = ui->tableWidget_animation->item(row,3)->text().toInt();
+    else if(column == 3){
+        QString nZOrder = item->text();
+        bool ok;double a = nZOrder.toDouble(&ok);
+        int zOrder = nZOrder.toInt();
         if(!ok || zOrder<0 || zOrder>100000){
             QMessageBox::critical(this,"警告","z-Order值超出范围!");
             ui->tableWidget_animation->item(row,3)->setText(animVec[row].zOrder);
             return;
         }
         std::cout<<"z-Order值发生改变,新值为:"<<zOrder<<std::endl;
-        animVec[row].zOrder = item->text();
+        DataManager::getInstance()->changeAnimTable(currentElem,nZOrder,row,3);
     }
 }
 
+//替换资源文件
+void StatusEffectAnim::on_tableWidget_animation_cellDoubleClicked(int row, int column)
+{
+    //表格内容修改flag
+    animTableItemChanged = true;
+    if(column == 1){
+        ResFileDialog res;
+        res.setModal(true);
+        res.exec();
+        QString fileName = res.getResName();
+        if(!fileName.isEmpty()){
+            QTableWidgetItem* res = new QTableWidgetItem(getFileName(fileName));
+            // 此单元格不可编辑
+            res->setFlags(res->flags() & ~Qt::ItemIsEditable);
+            ui->tableWidget_animation->setItem(row,1,res);
+            QComboBox* timeLine = createTimelineBox("",fileName);
+            ui->tableWidget_animation->setCellWidget(row,2,timeLine);
+            //保存当前数据
+            DataManager::getInstance()->changeAnimTable(currentElem,fileName,row,1);
+        }
+    }
+}

+ 4 - 5
statusEffectAnim.h

@@ -15,7 +15,8 @@ class StatusEffectAnim : public QWidget
     Q_OBJECT
 
 public:
-    static StatusEffectAnim* getInstance();
+    explicit StatusEffectAnim(QWidget *parent = nullptr);
+    ~StatusEffectAnim();
     void setUi(QString elem);
     ///将路径名转换成文件名
     QString getFileName(QString filePath);
@@ -27,14 +28,12 @@ private slots:
 
     void on_pushButton_delAnimation_clicked();
 
-
     void on_tableWidget_animation_itemChanged(QTableWidgetItem *item);
 
+    void on_tableWidget_animation_cellDoubleClicked(int row, int column);
+
 private:
     Ui::StatusEffectAnim *ui;
-    QMap<QString,QVector<StatusEffectAnim>> Anims;
-    StatusEffectAnim(QWidget *parent = nullptr);
-    ~StatusEffectAnim();
     QString currentElem;
     QComboBox* createTimelineBox(QString chosenTimeline,QString filename);
     QComboBox* createBox(QString choice,QStringList list);