瀏覽代碼

状态配置和容器(部分)界面分离

Menglan_Luo 2 年之前
父節點
當前提交
63277659f9
共有 15 個文件被更改,包括 1302 次插入893 次删除
  1. 6 0
      ConfigurableTool.pro
  2. 13 22
      actionSettingDialog.cpp
  3. 7 5
      actionSettingDialog.h
  4. 1 0
      collAnim.cpp
  5. 85 0
      dataManager.cpp
  6. 21 1
      dataManager.h
  7. 14 536
      mainwindow.cpp
  8. 4 66
      mainwindow.h
  9. 0 263
      mainwindow.ui
  10. 72 0
      pool.cpp
  11. 27 0
      pool.h
  12. 241 0
      pool.ui
  13. 441 0
      statusConfig.cpp
  14. 93 0
      statusConfig.h
  15. 277 0
      statusConfig.ui

+ 6 - 0
ConfigurableTool.pro

@@ -20,8 +20,10 @@ SOURCES += \
     plistcpp/plistdate.cpp \
     plistcpp/pugixml.cpp \
     plistcpp/redream.cpp \
+    pool.cpp \
     readJsonSrc.cpp \
     resfiledialog.cpp \
+    statusConfig.cpp \
     statusEffectAnim.cpp
 
 HEADERS += \
@@ -302,8 +304,10 @@ HEADERS += \
     plisthpp/pugiconfig.hpp \
     plisthpp/pugixml.hpp \
     plisthpp/redream.h \
+    pool.h \
     readJsonSrc.h \
     resfiledialog.h \
+    statusConfig.h \
     statusEffectAnim.h
 
 FORMS += \
@@ -311,7 +315,9 @@ FORMS += \
     changenamedialog.ui \
     collAnim.ui \
     mainwindow.ui \
+    pool.ui \
     resfiledialog.ui \
+    statusConfig.ui \
     statusEffectAnim.ui
 
 # Default rules for deployment.

+ 13 - 22
actionSettingDialog.cpp

@@ -1,5 +1,6 @@
 #include "actionSettingDialog.h"
 #include "ui_actionSettingDialog.h"
+#include "dataManager.h"
 #include <QPushButton>
 #include <QFormLayout>
 #include <QComboBox>
@@ -21,20 +22,25 @@ ActionSettingDialog::~ActionSettingDialog()
     delete ui;
 }
 
-void ActionSettingDialog::setDialogUi(QVector<ReadJsonSrc::Fields> fields, QMap<QString, QString> data,QStringList listItems)
+void ActionSettingDialog::setDialogUi(QString actionName,QString elem,int statusIndex, int row)
 {
-    fieldVec = fields;
+    curRow = row;
+    curStatusIndex = statusIndex;
+    curElem = elem;
+    curActionName = actionName;
     QFormLayout* formlayout = new QFormLayout();
-    for(const auto &i:fields){
+    QMap<QString,QString> data = DataManager::getInstance()->getStatusConfigData(elem,statusIndex).eventConfig[row].actionConfig;
+    for(const auto &i:DataManager::getInstance()->getTempFields("actionTemp",actionName)){
         if(i.type == "list"){
             QComboBox* combo = new QComboBox;
-            combo->addItems(listItems);
+            if(i.src == "animations"){
+                combo->addItems(DataManager::getInstance()->getList(elem,DataManager::ListType::Anim));
+            }
             QString val;
             if(data.find(i.name) != data.end()) val = data[i.name];
             else val = i.defaultVal;
             int index = combo->findText(val);
             combo->setCurrentIndex(index);
-            connect(combo,SIGNAL(currentTextChanged(QString)),this,SLOT(onComboBoxTextChanged(QString)));
             formlayout->addRow(i.name,combo);
         }
         else if(i.type == "input"){
@@ -42,34 +48,18 @@ void ActionSettingDialog::setDialogUi(QVector<ReadJsonSrc::Fields> fields, QMap<
             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);
         }
     }
     ui->widget->setLayout(formlayout);
 }
 
-void ActionSettingDialog::onComboBoxTextChanged(QString arg)
-{
-    QComboBox *box = dynamic_cast<QComboBox*>(this->sender());
-    QFormLayout* formlayout = dynamic_cast<QFormLayout*>(ui->widget->layout());
-    QLabel *label = dynamic_cast<QLabel*>(formlayout->labelForField(box));
-    std::cout<<qPrintable(label->text())<<": "<<qPrintable(arg)<<std::endl;
-}
-
-void ActionSettingDialog::onLineEditTextChanged()
-{
-    QLineEdit *edit = dynamic_cast<QLineEdit*>(this->sender());
-    QFormLayout* formlayout = dynamic_cast<QFormLayout*>(ui->widget->layout());
-    QLabel *label = dynamic_cast<QLabel*>(formlayout->labelForField(edit));
-    std::cout<<qPrintable(label->text())<<": "<<qPrintable(edit->text())<<std::endl;
-}
-
 //点击应用,保存数据
 void ActionSettingDialog::on_buttonBox_accepted()
 {
     QFormLayout* formlayout = dynamic_cast<QFormLayout*>(ui->widget->layout());
     int itemCout = formlayout->count();
+    QVector<ReadJsonSrc::Fields> fieldVec = DataManager::getInstance()->getTempFields("actionTemp",curActionName);
     for(int itemIndex=1;itemIndex<itemCout;itemIndex+=2){
         QLayoutItem* item = formlayout->itemAt(itemIndex);
         int i = itemIndex/2;
@@ -84,5 +74,6 @@ void ActionSettingDialog::on_buttonBox_accepted()
             std::cout<<qPrintable(fieldVec[i].name)<<": "<<qPrintable(edit->text())<<std::endl;
         }
     }
+    DataManager::getInstance()->changeActionConfigData(curElem,curStatusIndex,curRow,dataMap);
 }
 

+ 7 - 5
actionSettingDialog.h

@@ -15,17 +15,19 @@ class ActionSettingDialog : public QDialog
 public:
     explicit ActionSettingDialog(QWidget *parent = nullptr);
     ~ActionSettingDialog();
-    void setDialogUi(QVector<ReadJsonSrc::Fields> fields,QMap<QString,QString> data,QStringList listItems);
-    QMap<QString,QString> dataMap;
+//    void setDialogUi(QVector<ReadJsonSrc::Fields> fields,QMap<QString,QString> data,QStringList listItems);
+    void setDialogUi(QString actionName,QString elem,int statusIndex,int row);
 
 private slots:
     void on_buttonBox_accepted();
-    void onLineEditTextChanged();
-    void onComboBoxTextChanged(QString arg1);
 
 private:
     Ui::ActionSettingDialog *ui;
-    QVector<ReadJsonSrc::Fields> fieldVec;
+    int curRow;
+    int curStatusIndex;
+    QString curActionName;
+    QString curElem;
+    QMap<QString,QString> dataMap;
 };
 
 #endif // ACTIONSETTINGDIALOG_H

+ 1 - 0
collAnim.cpp

@@ -19,6 +19,7 @@ CollAnim::CollAnim(QWidget *parent) :
 CollAnim::~CollAnim()
 {
     delete ui;
+    delete formlayout;
 }
 
 void CollAnim::setUi(QString elem)

+ 85 - 0
dataManager.cpp

@@ -1,4 +1,5 @@
 #include "dataManager.h"
+#include <iostream>
 
 DataManager* DataManager::getInstance()
 {
@@ -47,6 +48,15 @@ QStringList DataManager::getList(QString elem,ListType listType)
     else if(listType == ListType::AnimType){
         for(const auto &i:jsonTemp->templateMap["collAnimTemp"]) list.push_back(i.name);
     }
+    else if(listType == ListType::StatusVal){
+        for(const auto &i:elements[elem]->statusConfig) list.push_back(i.statusValue);
+    }
+    else if(listType == ListType::Events){
+        for(const auto &i:jsonTemp->templateMap["eventTemp"]) list.push_back(i.name);
+    }
+    else if(listType == ListType::Actions){
+        for(const auto &i:jsonTemp->templateMap["actionTemp"]) list.push_back(i.name);
+    }
     return list;
 }
 
@@ -192,3 +202,78 @@ void DataManager::changeCollAnimName(QString elem,int index,QString newName)
 {
     elements[elem]->collAnim[index].name = newName;
 }
+
+//状态配置
+ElemPropertyData::StatusConfig DataManager::getStatusConfigData(QString elem,int index)
+{
+    return elements[elem]->statusConfig[index];
+}
+
+void DataManager::changeEventTable(QString elem,QString newData,int statusIndex,int row,int column)
+{
+    QVector<ElemPropertyData::EventConfig> &eventTable = elements[elem]->statusConfig[statusIndex].eventConfig;
+    if(column == 0) eventTable[row].name = newData;
+    else if(column == 2) eventTable[row].changeMagnitude = newData.toInt();
+    else if(column == 3) eventTable[row].specialEffect = newData;
+    else if(column == 5) eventTable[row].triggerAction = newData;
+}
+void DataManager::changeActionConfigData(QString elem, int statusIndex, int row, QMap<QString, QString> data)
+{
+    elements[elem]->statusConfig[statusIndex].eventConfig[row].actionConfig = data;
+}
+void DataManager::setEventTableCheckBox(QString elem, int statusIndex, int row, int column, int state)
+{
+    QVector<ElemPropertyData::EventConfig> &eventTable = elements[elem]->statusConfig[statusIndex].eventConfig;
+    if(column == 1) eventTable[row].consisColor = state;
+    else if(column == 4) eventTable[row].elimATLattices = state;
+}
+void DataManager::setFundCheckBox(QString elem, int statusIndex, CheckType checkType, int state)
+{
+    if(checkType == CheckType::Dropable) elements[elem]->statusConfig[statusIndex].dropable = state;
+    else if(checkType == CheckType::MultiHit) elements[elem]->statusConfig[statusIndex].multiHit = state;
+    else if(checkType == CheckType::NeedColl) elements[elem]->statusConfig[statusIndex].needCollect = state;
+}
+bool DataManager::existStatusVal(QString elem, QString statusVal)
+{
+    if(elements[elem]->getStatusValIndex(statusVal) == -1) return false;
+    return true;
+}
+void DataManager::addStatus(QString elem, QString statusVal)
+{
+    ElemPropertyData::StatusConfig status(statusVal);
+    elements[elem]->statusConfig.push_back(status);
+}
+//TODO: 删除状态值时出现数组越界
+void DataManager::delStatus(QString elem, int index)
+{
+    std::cout<<"current index:"<<index<<std::endl;
+    std::cout<<"statusConfig size:"<<elements[elem]->statusConfig.size()<<std::endl;
+    std::cout<<qPrintable(elements[elem]->statusConfig[index].statusValue)<<std::endl;
+    elements[elem]->statusConfig.remove(index);
+}
+void DataManager::changeStatusVal(QString elem, int index, QString newVal)
+{
+    elements[elem]->statusConfig[index].statusValue = newVal;
+}
+void DataManager::changeStatusFundVal(QString elem, StatusDataType type, QString newData,int index)
+{
+    if(type == StatusDataType::ClickAnim) elements[elem]->statusConfig[index].clickAnim = newData;
+    else if(type == StatusDataType::InitAnim) elements[elem]->statusConfig[index].initAnim = newData;
+    else if(type == StatusDataType::CollAnim) elements[elem]->statusConfig[index].collAnim = newData;
+    else if(type == StatusDataType::CollTar) elements[elem]->statusConfig[index].collTargetType = newData;
+}
+void DataManager::addEvent(QString elem, int index)
+{
+    ElemPropertyData::EventConfig event;
+    elements[elem]->statusConfig[index].eventConfig.push_back(event);
+}
+void DataManager::delEvent(QString elem, int statusIndex, int row)
+{
+    elements[elem]->statusConfig[statusIndex].eventConfig.remove(row);
+}
+
+//容器池
+ElemPropertyData::ContainerConfig DataManager::getContainData(QString elem,int index)
+{
+    return elements[elem]->container[index];
+}

+ 21 - 1
dataManager.h

@@ -12,7 +12,7 @@ public:
     QVector<ReadJsonSrc::Fields> getTempFields(QString key,QString name);
     ///更新模板
     void updateTempData();
-    enum class ListType{Anim,CollAnim,Pool,AnimType};
+    enum class ListType{Anim,CollAnim,Pool,AnimType,StatusVal,Events,Actions};
     ///获取某一元素对应的动画、收集动画、容器列表
     QStringList getList(QString elem,ListType listType);
     ///检查是否存在此元素
@@ -56,6 +56,26 @@ public:
     void delCollAnim(QString elem,int index);
     void changeCollAnimName(QString elem,int index,QString newName);
 
+    //状态配置
+    ElemPropertyData::StatusConfig getStatusConfigData(QString elem,int index);
+    void changeEventTable(QString elem,QString newData,int statusIndex, int row,int column);
+    void changeActionConfigData(QString elem,int statusIndex,int row,QMap<QString,QString> data);
+    void setEventTableCheckBox(QString elem,int statusIndex,int row,int column,int state);
+    bool existStatusVal(QString elem,QString statusVal);
+    void addStatus(QString elem,QString statusVal);
+    void delStatus(QString elem,int index);
+    void changeStatusVal(QString elem,int index,QString newVal);
+    enum class StatusDataType {InitAnim,ClickAnim,CollTar,CollAnim};
+    ///改变基础属性值(表格以外)
+    void changeStatusFundVal(QString elem,StatusDataType type,QString newData,int index);
+    enum class CheckType{MultiHit,Dropable,NeedColl,Color,Lattice};
+    ///改变基础属性中的勾选值
+    void setFundCheckBox(QString elem,int statusIndex,CheckType checkType,int state);
+    void addEvent(QString elem,int index);
+    void delEvent(QString elem,int statusIndex,int row);
+
+    //容器池
+    ElemPropertyData::ContainerConfig getContainData(QString elem,int index);
 private:
     DataManager();
     ~DataManager();

+ 14 - 536
mainwindow.cpp

@@ -22,23 +22,16 @@ MainWindow::MainWindow(QWidget *parent)
     : QMainWindow(parent)
     , ui(new Ui::MainWindow)
 {
-    jsonTemp = new ReadJsonSrc(":/file/file/template.json");
     ui->setupUi(this);
     QPixmap pix(":/icon/icon/pic.png");
     ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
     this->setAcceptDrops(true);
-    ui->tableWidget_containerPool->setHorizontalHeaderLabels({"键值","资源名","初始时间线","点击时间线","影响时间线","消失时间线","消失z-Order"});
-    ui->tableWidget_childElem->setHorizontalHeaderLabels({"名称","使用的池子"});
-    ui->tableWidget_event->setHorizontalHeaderLabels({"事件名称","是否需要颜色一致","状态变化幅度","特效","根据格子数量消除","触发动作","触发动作设置"});
     ui->tabWidget->setCurrentIndex(0);
-    ui->lineEdit_collectionType->setReadOnly(true);
-//    updateTempRelatedUi();
 }
 
 MainWindow::~MainWindow()
 {
     delete ui;
-    delete jsonTemp;
 }
 
 ///创建普通下拉选项
@@ -70,16 +63,6 @@ QComboBox* MainWindow::createTimelineBox(QString chosenTimeline,QString fileName
     return timeLine;
 }
 
-///创建事件下拉选项
-QComboBox* MainWindow::createEventBox(QString chosenEvent)
-{
-    QStringList list;
-    for(const auto &i:jsonTemp->templateMap["eventTemp"]) list.push_back(i.name);
-    QComboBox* event = createBox(chosenEvent,list);
-    connect(event,SIGNAL(currentTextChanged(QString)),this,SLOT(onEventBoxTextChanged(QString)));
-    return event;
-}
-
 ///创建一个使用池子下拉选项
 QComboBox* MainWindow::createPoolBox(QString chosenPool)
 {
@@ -91,76 +74,6 @@ QComboBox* MainWindow::createPoolBox(QString chosenPool)
     return pools;
 }
 
-///创建一个checkBox
-QCheckBox* MainWindow::createCheckBox(bool chosen)
-{
-    QCheckBox* check = new QCheckBox;
-    if(chosen) check->setCheckState(Qt::Checked);
-    else check->setCheckState(Qt::Unchecked);
-    connect(check,SIGNAL(stateChanged(int)),this,SLOT(onCheckBoxStateChanged(int)));
-    return check;
-}
-
-///创建一个特效下拉选项
-QComboBox* MainWindow::createEffectBox(QString chosenEffect)
-{
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    QStringList list;
-    for(const auto &i:elem->statusEffect){
-        list.push_back(i.name);
-    }
-    QComboBox* effect = createBox(chosenEffect,list);
-    connect(effect,SIGNAL(currentTextChanged(QString)),this,SLOT(onEventBoxTextChanged(QString)));
-    return effect;
-}
-
-///创建一个触发动作
-QComboBox* MainWindow::createTriggerAction(QString chosenAction)
-{
-    QStringList actionlist;
-    for(const auto &i:jsonTemp->templateMap["actionTemp"]) actionlist.push_back(i.name);
-    QComboBox* actions = createBox(chosenAction,actionlist);
-    connect(actions,SIGNAL(currentTextChanged(QString)),this,SLOT(onEventBoxTextChanged(QString)));
-    return actions;
-}
-
-///创建一个触发动作设置按钮
-QPushButton* MainWindow::createSetButton()
-{
-    QPushButton* setAction = new QPushButton("设置");
-    connect(setAction,SIGNAL(clicked()),this,SLOT(onSetActionButtonClicked()));
-    return setAction;
-}
-
-///动画删除或改名后其它下拉选项的更新
-void MainWindow::updateAnimComboBox(QString changedAnim)
-{
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    //状态配置界面
-    if(ui->listWidget_status->currentItem() != nullptr){
-        int index = ui->listWidget_status->currentRow();
-        if(elem->statusConfig[index].initAnim == changedAnim) ui->comboBox_initAnim->setCurrentIndex(0);
-        if(elem->statusConfig[index].clickAnim == changedAnim) ui->comboBox_clickAnim->setCurrentIndex(0);
-        int rowNum = ui->tableWidget_event->rowCount();
-        for(int i=0;i<rowNum;i++){
-            QComboBox *effect = qobject_cast<QComboBox*>(ui->tableWidget_event->cellWidget(i,3));
-            if(effect->currentText() == changedAnim) effect->setCurrentIndex(0);
-        }
-    }
-}
-
-///收集动画删除或改名后下拉选项更新
-void MainWindow::updateCollAnimComboBox(QString changedAnim)
-{
-    std::cout<<"收集动画改变,更新下拉选项"<<std::endl;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    //状态配置界面
-    if(ui->listWidget_status->currentItem() != nullptr){
-        int index = ui->listWidget_status->currentRow();
-        if(elem->statusConfig[index].collAnim == changedAnim) ui->comboBox_collectAnimation->setCurrentIndex(0);
-    }
-}
-
 ///切换元素时重置界面数据
 void MainWindow::setUi(QString elem)
 {
@@ -170,6 +83,10 @@ void MainWindow::setUi(QString elem)
         ui->tabWidget->addTab(animUi,"状态与效果动画");
         collAnimUi = new CollAnim();
         ui->tabWidget->addTab(collAnimUi,"收集动画");
+        statusConfigUi = new StatusConfig();
+        ui->tabWidget->addTab(statusConfigUi,"状态配置");
+        poolUi = new Pool();
+        ui->tabWidget->addTab(poolUi,"容器");
         firstSelectElem = false;
     }
     //基础元素区域的设置
@@ -185,49 +102,10 @@ void MainWindow::setUi(QString elem)
     //设置状态与效果动画表格显示
     animUi->setUi(elem);
     collAnimUi->setUi(elem);
+    statusConfigUi->setUi(elem);
+    poolUi->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++){
@@ -382,172 +260,6 @@ void MainWindow::onPoolsTextChanged(const QString &arg1)
     elem->childElem[row].container = arg1;
 }
 
-///事件配置checkBox状态发生改变
-void MainWindow::onCheckBoxStateChanged(int state)
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
-    //获取checkBox所在位置
-    QCheckBox *check = dynamic_cast<QCheckBox*>(this->sender());
-    int x = check->frameGeometry().x();
-    int y = check->frameGeometry().y();
-    QModelIndex index = ui->tableWidget_event->indexAt(QPoint(x,y));
-    int row = index.row();
-    int column = index.column();
-    //修改数据
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    int statusIndex = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text());
-    ElemPropertyData::EventConfig &eventData = elem->statusConfig[statusIndex].eventConfig[row];
-    //是否需要颜色一致
-    if(column == 1){
-        if(state == 0) eventData.consisColor = false;
-        else eventData.consisColor = true;
-        std::cout<<"颜色是否需要一致状态:"<<state<<std::endl;
-    }
-    else if(column == 4){
-        if(state == 0) eventData.elimATLattices = false;
-        else eventData.elimATLattices = true;
-        std::cout<<"根据格子数量消除状态:"<<state<<std::endl;
-    }
-    std::cout<<"row:"<<row<<"\tcolumn:"<<column<<std::endl;
-}
-
-///事件配置ComboBox选择发生改变
-void MainWindow::onEventBoxTextChanged(const QString &arg1)
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
-    //获取特效列表所在位置
-    QComboBox *box = dynamic_cast<QComboBox*>(this->sender());
-    int x = box->frameGeometry().x();
-    int y = box->frameGeometry().y();
-    QModelIndex index = ui->tableWidget_event->indexAt(QPoint(x,y));
-    int row = index.row();
-    int column = index.column();
-    //修改数据
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    int statusIndex = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text());
-    QVector<ElemPropertyData::EventConfig> &eventTable = elem->statusConfig[statusIndex].eventConfig;
-    if(column == 0) eventTable[row].name = arg1;
-    else if(column == 3) eventTable[row].specialEffect = arg1;
-    else if(column == 5) eventTable[row].triggerAction = arg1;
-    std::cout<<"row:"<<row<<"\tcolumn:"<<column<<std::endl;
-}
-
-///动作配置中的设置点击后
-void MainWindow::onSetActionButtonClicked()
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
-    //获取设置按钮所在位置
-    QPushButton *button = dynamic_cast<QPushButton*>(this->sender());
-    int x = button->frameGeometry().x();
-    int y = button->frameGeometry().y();
-    QModelIndex index = ui->tableWidget_event->indexAt(QPoint(x,y));
-    int row = index.row();
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    int statusIndex = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text());
-    QVector<ElemPropertyData::EventConfig> &eventTable = elem->statusConfig[statusIndex].eventConfig;
-    QString action = eventTable[row].triggerAction;
-    std::cout<<"row:"<<row<<std::endl;
-    std::cout<<qPrintable(action)<<std::endl;
-    createSetWindow(action,row);
-}
-
-///点击动作配置的设置按钮后生成新窗口
-void MainWindow::createSetWindow(QString actionName,int row)
-{
-    QVector<ReadJsonSrc::Template> tempVec = jsonTemp->templateMap["actionTemp"];
-    int index = jsonTemp->getTemplateIndex("actionTemp",actionName);
-    if(index == -1){
-        std::cout<<"未找到"<<qPrintable(actionName)<<"该动作配置模板"<<std::endl;
-        return;
-    }
-    QVector<ReadJsonSrc::Fields> fields = tempVec[index].fields;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    //由于目前list只有动画,所以只做了一种情况;后期如果有多种list,可以将函数参数改为map
-    QStringList list;
-    for(const auto &i:elem->statusEffect) list.push_back(i.name);
-    ActionSettingDialog setDialog;
-    QMap<QString,QString> &dataMap = elem->statusConfig[ui->listWidget_status->currentRow()].eventConfig[row].actionConfig;
-    setDialog.setDialogUi(fields,dataMap,list);
-    setDialog.exec();
-    if(!setDialog.dataMap.empty()) dataMap = setDialog.dataMap;
-}
-
-
-//生成模板并更新状态配置的数据
-void MainWindow::on_pushButton_genTemp_clicked()
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->count() > 0) return;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    for(int i=0;i<elem->maxLayer.toInt();i++){
-        ui->listWidget_status->addItem(QString::number(i));
-        ElemPropertyData::StatusConfig status(QString::number(i));
-        elem->statusConfig.push_back(status);
-    }
-}
-
-//添加状态,若已经生成最大层数全部状态则按钮无效
-void MainWindow::on_pushButton_addStatus_clicked()
-{
-    if(ui->listWidget_elem->currentItem() == nullptr) return;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    QString statusName;
-    for(int i=0;i<elem->maxLayer.toInt();i++){
-        if(elem->getStatusValIndex(QString::number(i)) == -1){
-            statusName = QString::number(i);
-            break;
-        }
-    }
-    if(!statusName.isEmpty()){
-        ui->listWidget_status->addItem(statusName);
-        ElemPropertyData::StatusConfig status(statusName);
-        elem->statusConfig.push_back(status);
-    }
-}
-
-//TODO: 删除状态值对应的数据
-void MainWindow::on_pushButton_delStatus_clicked()
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
-    QMessageBox::StandardButton reply = QMessageBox::question(this,"删除状态","确定要删除此状态吗?");
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    if(reply == QMessageBox::Yes){
-        for(int i=0;i<elem->statusConfig.size();i++){
-            if(elem->statusConfig[i].statusValue == ui->listWidget_status->currentItem()->text()){
-                elem->statusConfig.remove(i);
-                break;
-            }
-        }
-        delete ui->listWidget_status->takeItem(ui->listWidget_status->currentRow());
-    }
-}
-
-//修改状态值,检查修改后的状态值是否合法,并转移数据
-void MainWindow::on_listWidget_status_itemDoubleClicked(QListWidgetItem *item)
-{
-    ChangeNameDialog newName;
-    newName.setModal(true);
-    newName.exec();
-    QString name = newName.getNewName();
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    if(!name.isEmpty()){
-        //TODO: 检查状态值合法性并转移数据
-        bool isNum;double tmp = name.toDouble(&isNum);
-        int maxlayer = ui->lineEdit_maxlayer->text().toInt();
-        int statusNum = name.toInt();
-        if(!isNum ||statusNum < 0 || statusNum >= maxlayer){
-            QMessageBox::critical(this,"错误","状态值必须是大于等于0且小于最大层数的数字");
-            return;
-        }
-        if(elem->getStatusValIndex(name) == -1){
-            QMessageBox::critical(this,"警告","该状态值已存在");
-            return;
-        }
-        int index = elem->getStatusValIndex(item->text());
-        elem->statusConfig[index].statusValue = name;
-        item->setText(name);
-    }
-}
-
 
 void MainWindow::on_pushButton_addContainer_clicked()
 {
@@ -675,36 +387,6 @@ void MainWindow::on_pushButton_delKey_clicked()
     }
 }
 
-void MainWindow::setPoolUi(QString poolName)
-{
-    if(ui->listWidget_elem->currentItem() == nullptr) return;
-    isSetUi = true;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    ElemPropertyData::ContainerConfig poolData = elem->container[elem->getPoolIndex(poolName)];
-    int contIndex = ui->comboBox_container->findText(poolData.type);
-    if(contIndex == -1) contIndex=0;
-    ui->comboBox_container->setCurrentIndex(contIndex);
-    int rowNum = ui->tableWidget_containerPool->rowCount();
-    for(int i=0;i<rowNum;i++){
-        ui->tableWidget_containerPool->removeRow(0);
-    }
-    for(const auto &i:poolData.table){
-        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(i.res);
-        // 此单元格不可编辑
-        res->setFlags(res->flags() & ~Qt::ItemIsEditable);
-        ui->tableWidget_containerPool->setItem(rowNum,1,res);
-        ui->tableWidget_containerPool->setCellWidget(rowNum,2,createTimelineBox(i.initTimeline,i.res,TimelineType::Pool));
-        ui->tableWidget_containerPool->setCellWidget(rowNum,3,createTimelineBox(i.clickTimeline,i.res,TimelineType::Pool));
-        ui->tableWidget_containerPool->setCellWidget(rowNum,4,createTimelineBox(i.effectTimeline,i.res,TimelineType::Pool));
-        ui->tableWidget_containerPool->setCellWidget(rowNum,5,createTimelineBox(i.vanishTimeline,i.res,TimelineType::Pool));
-        ui->tableWidget_containerPool->setItem(rowNum,6,new QTableWidgetItem(i.zOrder));
-    }
-    isSetUi = false;
-}
-
 void MainWindow::on_tableWidget_containerPool_cellDoubleClicked(int row, int column)
 {
     if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr) return;
@@ -828,208 +510,14 @@ void MainWindow::on_tableWidget_childElem_cellDoubleClicked(int row, int column)
     childElemTableItemChanged = true;
 }
 
-void MainWindow::on_checkBox_multiHit_stateChanged(int arg1)
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr || isSetUi) return;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    int index = ui->listWidget_status->currentRow();
-    if(arg1){
-        elem->statusConfig[index].multiHit = true;
-    }
-    else{
-        elem->statusConfig[index].multiHit = false;
-    }
-}
-
-
-void MainWindow::on_checkBox_dropable_stateChanged(int arg1)
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr || isSetUi) return;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    int index = ui->listWidget_status->currentRow();
-    if(arg1){
-        elem->statusConfig[index].dropable = true;
-    }
-    else{
-        elem->statusConfig[index].dropable = false;
-    }
-}
-
-
-void MainWindow::on_checkBox_needCollect_stateChanged(int arg1)
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr || isSetUi) return;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    int index = ui->listWidget_status->currentRow();
-    if(arg1){
-        elem->statusConfig[index].needCollect = true;
-        ui->lineEdit_collectionType->setReadOnly(false);
-    }
-    else{
-        elem->statusConfig[index].needCollect = false;
-        ui->lineEdit_collectionType->setReadOnly(true);
-    }
-}
-
-
-void MainWindow::on_lineEdit_collectionType_editingFinished()
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    int index = ui->listWidget_status->currentRow();
-    ElemPropertyData::StatusConfig &data = elem->statusConfig[index];
-    data.collTargetType = ui->lineEdit_collectionType->text();
-    std::cout<<"收集的目标类型"<<qPrintable(data.collTargetType)<<std::endl;
-}
-
-
-
-void MainWindow::on_pushButton_addEvent_clicked()
-{
-    if(ui->listWidget_elem->currentItem()==nullptr || ui->listWidget_status->currentItem() == nullptr) return;
-    int rowNum = ui->tableWidget_event->rowCount();
-    ui->tableWidget_event->insertRow(rowNum);
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    ElemPropertyData::EventConfig event;
-    int index = ui->listWidget_status->currentRow();
-    elem->statusConfig[index].eventConfig.push_back(event);
-    ui->tableWidget_event->setCellWidget(rowNum,0,createEventBox("尚未选择"));
-    ui->tableWidget_event->setCellWidget(rowNum,1,createCheckBox(false));
-    ui->tableWidget_event->setCellWidget(rowNum,3,createEffectBox("尚未选择"));
-    ui->tableWidget_event->setCellWidget(rowNum,4,createCheckBox(false));
-    ui->tableWidget_event->setCellWidget(rowNum,5,createTriggerAction("尚未选择"));
-    ui->tableWidget_event->setCellWidget(rowNum,6,createSetButton());
-}
-
-
-void MainWindow::on_listWidget_status_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || current == nullptr) return;
-    isSetUi = true;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    int index = elem->getStatusValIndex(current->text());
-    ElemPropertyData::StatusConfig statusData = elem->statusConfig[index];
-    int comboIndex;
-    //初始化动画
-    comboIndex = ui->comboBox_initAnim->findText(statusData.initAnim);
-    if(comboIndex == -1) comboIndex = 0;
-    ui->comboBox_initAnim->setCurrentIndex(comboIndex);
-    //点击动画
-    comboIndex = ui->comboBox_clickAnim->findText(statusData.clickAnim);
-    if(comboIndex == -1) comboIndex = 0;
-    ui->comboBox_clickAnim->setCurrentIndex(comboIndex);
-    //收集动画
-    comboIndex = ui->comboBox_collectAnimation->findText(statusData.collAnim);
-    if(comboIndex == -1) comboIndex = 0;
-    ui->comboBox_collectAnimation->setCurrentIndex(comboIndex);
-    //多重打击
-    if(statusData.multiHit) ui->checkBox_multiHit->setCheckState(Qt::Checked);
-    else ui->checkBox_multiHit->setCheckState(Qt::Unchecked);
-    //可掉落
-    if(statusData.dropable) ui->checkBox_multiHit->setCheckState(Qt::Checked);
-    else ui->checkBox_dropable->setCheckState(Qt::Unchecked);
-    //是否需要收集
-    ui->lineEdit_collectionType->clear();
-    if(statusData.needCollect){
-        ui->checkBox_needCollect->setCheckState(Qt::Checked);
-        ui->lineEdit_collectionType->setReadOnly(false);
-        std::cout<<"收集的目标类型"<<qPrintable(statusData.collTargetType)<<std::endl;
-        ui->lineEdit_collectionType->setText(statusData.collTargetType);
-    }
-    else{
-        ui->checkBox_needCollect->setCheckState(Qt::Unchecked);
-        ui->lineEdit_collectionType->setReadOnly(true);
-    }
-    //事件配置
-    int rowNum = ui->tableWidget_event->rowCount();
-    for(int i=0;i<rowNum;i++){
-        ui->tableWidget_event->removeRow(0);
-    }
-    for(const auto &i:statusData.eventConfig){
-        rowNum = ui->tableWidget_event->rowCount();
-        ui->tableWidget_event->insertRow(rowNum);
-        //事件名称
-        ui->tableWidget_event->setCellWidget(rowNum,0,createEventBox(i.name));
-        std::cout<<"重置状态配置ui:事件名称:"<<qPrintable(i.name)<<std::endl;
-        //是否需要颜色一致
-        ui->tableWidget_event->setCellWidget(rowNum,1,createCheckBox(i.consisColor));
-        //tableWidget_event
-        ui->tableWidget_event->setItem(rowNum,2,new QTableWidgetItem(i.changeMagnitude));
-        //特效
-        ui->tableWidget_event->setCellWidget(rowNum,3,createEffectBox(i.specialEffect));
-        //根据格子数量消除
-        ui->tableWidget_event->setCellWidget(rowNum,4,createCheckBox(i.elimATLattices));
-        //触发动作
-        ui->tableWidget_event->setCellWidget(rowNum,5,createTriggerAction(i.triggerAction));
-        //触发动作设置
-        ui->tableWidget_event->setCellWidget(rowNum,6,createSetButton());
-    }
-    isSetUi = false;
-}
-
-void MainWindow::on_tableWidget_event_cellDoubleClicked(int row, int column)
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
-    if(column == 2) eventTableItemChanged = true;
-}
-
-//状态变化幅度合法性检查及数据保存
-void MainWindow::on_tableWidget_event_itemChanged(QTableWidgetItem *item)
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
-    if(!eventTableItemChanged) return;
-    eventTableItemChanged = false;
-    int column = item->column();
-    int row = item->row();
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    int index = ui->listWidget_status->currentRow();
-    QVector<ElemPropertyData::EventConfig> &eventVec = elem->statusConfig[index].eventConfig;
-    if(column == 2){
-        bool ok;double a = item->text().toDouble(&ok);
-        int val = item->text().toInt();
-        if(!ok || val<0){
-            QMessageBox::critical(this,"警告","状态变化幅度是大于0的数字");
-            ui->tableWidget_event->item(row,2)->setText(QString::number(eventVec[row].changeMagnitude));
-            return;
-        }
-        std::cout<<"状态变化幅度发生改变,新值为:"<<val<<std::endl;
-        eventVec[row].changeMagnitude = val;
-    }
-}
-
-
-void MainWindow::on_comboBox_initAnim_currentTextChanged(const QString &arg1)
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr || isSetUi) return;
-    std::cout<<"初始化动画:"<<qPrintable(arg1)<<std::endl;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    int index = ui->listWidget_status->currentRow();
-    elem->statusConfig[index].initAnim = arg1;
-}
-
-
-void MainWindow::on_comboBox_clickAnim_currentTextChanged(const QString &arg1)
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr || isSetUi) return;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    int index = ui->listWidget_status->currentRow();
-    elem->statusConfig[index].clickAnim = arg1;
-}
-
-
-void MainWindow::on_comboBox_collectAnimation_currentTextChanged(const QString &arg1)
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr || isSetUi) return;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    int index = ui->listWidget_status->currentRow();
-    elem->statusConfig[index].collAnim = arg1;
-}
 
 ///模板更新后更新与模板配置相关的界面显示
 void MainWindow::updateTempRelatedUi()
 {
     //重新设置收集动画界面
     collAnimUi->setCollectAnimUi();
+    //重置状态配置的模板相关界面
+    statusConfigUi->setAnimComboBox();
 
 //    //状态配置
 //    int rowNum = ui->tableWidget_event->rowCount();
@@ -1102,27 +590,17 @@ void MainWindow::on_comboBox_container_currentTextChanged(const QString &arg1)
     std::cout<<"容器池第"<<poolIndex<<"行容器类型改变:"<<qPrintable(arg1)<<std::endl;
 }
 
-///删除事件
-void MainWindow::on_pushButton_delEvent_clicked()
-{
-    if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
-    if(ui->tableWidget_event->currentRow() == -1) return;
-    ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
-    QMessageBox::StandardButton reply = QMessageBox::question(this,"删除事件","确定要删除此事件吗?");
-    if(reply == QMessageBox::Yes){
-        int curRow = ui->tableWidget_event->currentRow();
-        QVector<ElemPropertyData::EventConfig> &eventTable = elem->statusConfig[ui->listWidget_status->currentRow()].eventConfig;
-        eventTable.remove(curRow);
-        ui->tableWidget_event->removeRow(curRow);
-    }
-}
-
 
 void MainWindow::on_tabWidget_currentChanged(int index)
 {
     //更新下拉选项
-    if(index == 3){
+    if(index == 2){
         collAnimUi->setCollAnimWidget();
     }
+    else if(index == 3){
+        statusConfigUi->setAnimComboBox();
+    }
 }
 
+
+

+ 4 - 66
mainwindow.h

@@ -8,6 +8,8 @@
 #include "readJsonSrc.h"
 #include "statusEffectAnim.h"
 #include "collAnim.h"
+#include "statusConfig.h"
+#include "pool.h"
 #include <QMap>
 #include <QComboBox>
 #include <QCheckBox>
@@ -32,18 +34,6 @@ private slots:
 
     void on_pushButton_chooseFile_clicked();
 
-//    void on_pushButton_addAnimation_clicked();
-
-//    void on_pushButton_addCollectAnim_clicked();
-
-//    void on_pushButton_delCollectAnim_clicked();
-
-//    void on_listWidget_collectAnim_itemDoubleClicked(QListWidgetItem *item);
-
-    void on_pushButton_addStatus_clicked();
-
-    void on_pushButton_delStatus_clicked();
-
     void on_pushButton_addContainer_clicked();
 
     void on_pushButton_delContainer_clicked();
@@ -64,16 +54,6 @@ private slots:
 
     void on_spinBox_drop_valueChanged(int arg1);
 
-//    void on_comboBox_animationType_currentTextChanged(const QString &arg1);
-
-//    void on_comboBox_animation_currentTextChanged(const QString &arg1);
-
-//    void on_listWidget_collectAnim_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
-
-    void on_pushButton_genTemp_clicked();
-
-    void on_listWidget_status_itemDoubleClicked(QListWidgetItem *item);
-
     void on_tableWidget_containerPool_cellDoubleClicked(int row, int column);
 
     void on_tableWidget_containerPool_itemChanged(QTableWidgetItem *item);
@@ -92,48 +72,14 @@ private slots:
 
     void on_tableWidget_childElem_cellDoubleClicked(int row, int column);
 
-    void on_checkBox_multiHit_stateChanged(int arg1);
-
-    void on_checkBox_dropable_stateChanged(int arg1);
-
-    void on_checkBox_needCollect_stateChanged(int arg1);
-
-    void on_lineEdit_collectionType_editingFinished();
-
-    void on_pushButton_addEvent_clicked();
-
     void onPoolTimelineTextChanged(const QString &arg1);
 
     void onPoolsTextChanged(const QString &arg1);
 
-    void on_listWidget_status_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
-
-    void on_tableWidget_event_cellDoubleClicked(int row, int column);
-
-    void on_tableWidget_event_itemChanged(QTableWidgetItem *item);
-
-    void onCheckBoxStateChanged(int state);
-
-    void on_comboBox_initAnim_currentTextChanged(const QString &arg1);
-
-    void on_comboBox_clickAnim_currentTextChanged(const QString &arg1);
-
-    void on_comboBox_collectAnimation_currentTextChanged(const QString &arg1);
-
-    void onEventBoxTextChanged(const QString &arg1);
-
-    void onSetActionButtonClicked();
-
     void on_reloadTempFile_triggered();
 
     void on_comboBox_container_currentTextChanged(const QString &arg1);
 
-    void on_pushButton_delEvent_clicked();
-
-//    void onLineEditTextChanged();
-
-//    void onComboBoxTextChanged(QString arg1);
-
     void on_tabWidget_currentChanged(int index);
 
 private:
@@ -155,23 +101,15 @@ private:
     QComboBox* createBox(QString choice,QStringList list);
     QComboBox* createTimelineBox(QString chosenTimeline,QString filename,TimelineType type);
     QComboBox* createPoolBox(QString chosenPool);
-    QCheckBox* createCheckBox(bool chosen);
-    QComboBox* createTriggerAction(QString chosenAction);
-    QComboBox* createEffectBox(QString chosenEffect);
-    QComboBox* createEventBox(QString chosenEvent);
-    QPushButton* createSetButton();
-    void updateAnimComboBox(QString changedAnim);
-    void updateCollAnimComboBox(QString changedAnim);
     void updateTempRelatedUi();
-    ReadJsonSrc* jsonTemp;
     //表示当前正在设置ui界面,改变时不要触发任何数据保存
     bool isSetUi = false;
-    void createSetWindow(QString actionName,int row);
-    void setCollAnimWidget();
 
     //四个ui子界面
     bool firstSelectElem = true;
     StatusEffectAnim* animUi;
     CollAnim* collAnimUi;
+    StatusConfig* statusConfigUi;
+    Pool* poolUi;
 };
 #endif // MAINWINDOW_H

+ 0 - 263
mainwindow.ui

@@ -192,269 +192,6 @@
           <property name="elideMode">
            <enum>Qt::ElideRight</enum>
           </property>
-          <widget class="QWidget" name="tab_statusConfiguration_2">
-           <attribute name="title">
-            <string>状态配置</string>
-           </attribute>
-           <layout class="QHBoxLayout" name="horizontalLayout_32">
-            <item>
-             <widget class="QSplitter" name="splitter_4">
-              <property name="orientation">
-               <enum>Qt::Horizontal</enum>
-              </property>
-              <widget class="QWidget" name="layoutWidget">
-               <layout class="QVBoxLayout" name="verticalLayout_13">
-                <item>
-                 <widget class="QListWidget" name="listWidget_status"/>
-                </item>
-                <item>
-                 <layout class="QHBoxLayout" name="horizontalLayout_30">
-                  <item>
-                   <widget class="QPushButton" name="pushButton_addStatus">
-                    <property name="text">
-                     <string>添加</string>
-                    </property>
-                   </widget>
-                  </item>
-                  <item>
-                   <widget class="QPushButton" name="pushButton_delStatus">
-                    <property name="text">
-                     <string>删除</string>
-                    </property>
-                   </widget>
-                  </item>
-                 </layout>
-                </item>
-                <item>
-                 <widget class="QPushButton" name="pushButton_genTemp">
-                  <property name="text">
-                   <string>生成模板</string>
-                  </property>
-                 </widget>
-                </item>
-               </layout>
-              </widget>
-              <widget class="QWidget" name="layoutWidget">
-               <layout class="QVBoxLayout" name="verticalLayout_15">
-                <item>
-                 <layout class="QVBoxLayout" name="verticalLayout_5">
-                  <item>
-                   <layout class="QHBoxLayout" name="horizontalLayout_25">
-                    <item>
-                     <widget class="QLabel" name="label_initialAnimation">
-                      <property name="text">
-                       <string>初始化动画:</string>
-                      </property>
-                     </widget>
-                    </item>
-                    <item>
-                     <widget class="QComboBox" name="comboBox_initAnim"/>
-                    </item>
-                    <item>
-                     <spacer name="horizontalSpacer_7">
-                      <property name="orientation">
-                       <enum>Qt::Horizontal</enum>
-                      </property>
-                      <property name="sizeHint" stdset="0">
-                       <size>
-                        <width>298</width>
-                        <height>18</height>
-                       </size>
-                      </property>
-                     </spacer>
-                    </item>
-                   </layout>
-                  </item>
-                  <item>
-                   <layout class="QHBoxLayout" name="horizontalLayout_23">
-                    <item>
-                     <widget class="QLabel" name="label_clickAnimation">
-                      <property name="text">
-                       <string>点击动画:</string>
-                      </property>
-                     </widget>
-                    </item>
-                    <item>
-                     <widget class="QComboBox" name="comboBox_clickAnim"/>
-                    </item>
-                    <item>
-                     <spacer name="horizontalSpacer_4">
-                      <property name="orientation">
-                       <enum>Qt::Horizontal</enum>
-                      </property>
-                      <property name="sizeHint" stdset="0">
-                       <size>
-                        <width>298</width>
-                        <height>18</height>
-                       </size>
-                      </property>
-                     </spacer>
-                    </item>
-                   </layout>
-                  </item>
-                  <item>
-                   <layout class="QHBoxLayout" name="horizontalLayout_24">
-                    <item>
-                     <widget class="QCheckBox" name="checkBox_multiHit">
-                      <property name="text">
-                       <string>支持多重打击</string>
-                      </property>
-                     </widget>
-                    </item>
-                    <item>
-                     <spacer name="horizontalSpacer_5">
-                      <property name="orientation">
-                       <enum>Qt::Horizontal</enum>
-                      </property>
-                      <property name="sizeHint" stdset="0">
-                       <size>
-                        <width>88</width>
-                        <height>20</height>
-                       </size>
-                      </property>
-                     </spacer>
-                    </item>
-                    <item>
-                     <widget class="QCheckBox" name="checkBox_dropable">
-                      <property name="text">
-                       <string>可掉落</string>
-                      </property>
-                     </widget>
-                    </item>
-                    <item>
-                     <spacer name="horizontalSpacer_6">
-                      <property name="orientation">
-                       <enum>Qt::Horizontal</enum>
-                      </property>
-                      <property name="sizeHint" stdset="0">
-                       <size>
-                        <width>138</width>
-                        <height>28</height>
-                       </size>
-                      </property>
-                     </spacer>
-                    </item>
-                   </layout>
-                  </item>
-                  <item>
-                   <layout class="QHBoxLayout" name="horizontalLayout_26">
-                    <item>
-                     <widget class="QCheckBox" name="checkBox_needCollect">
-                      <property name="text">
-                       <string>是否需要收集</string>
-                      </property>
-                     </widget>
-                    </item>
-                    <item>
-                     <spacer name="horizontalSpacer_8">
-                      <property name="orientation">
-                       <enum>Qt::Horizontal</enum>
-                      </property>
-                      <property name="sizeHint" stdset="0">
-                       <size>
-                        <width>40</width>
-                        <height>20</height>
-                       </size>
-                      </property>
-                     </spacer>
-                    </item>
-                    <item>
-                     <layout class="QHBoxLayout" name="horizontalLayout_27">
-                      <item>
-                       <widget class="QLabel" name="label_cellectionType">
-                        <property name="text">
-                         <string>收集的目标类型:</string>
-                        </property>
-                       </widget>
-                      </item>
-                      <item>
-                       <widget class="QLineEdit" name="lineEdit_collectionType"/>
-                      </item>
-                     </layout>
-                    </item>
-                    <item>
-                     <layout class="QHBoxLayout" name="horizontalLayout_28">
-                      <item>
-                       <widget class="QLabel" name="label_collectAnimation">
-                        <property name="text">
-                         <string>收集动画:</string>
-                        </property>
-                       </widget>
-                      </item>
-                      <item>
-                       <widget class="QComboBox" name="comboBox_collectAnimation"/>
-                      </item>
-                     </layout>
-                    </item>
-                   </layout>
-                  </item>
-                 </layout>
-                </item>
-                <item>
-                 <layout class="QVBoxLayout" name="verticalLayout_14">
-                  <item>
-                   <widget class="QLabel" name="label_eventConfiguration">
-                    <property name="text">
-                     <string>事件配置:</string>
-                    </property>
-                   </widget>
-                  </item>
-                  <item>
-                   <widget class="QTableWidget" name="tableWidget_event">
-                    <property name="rowCount">
-                     <number>0</number>
-                    </property>
-                    <property name="columnCount">
-                     <number>7</number>
-                    </property>
-                    <column/>
-                    <column/>
-                    <column/>
-                    <column/>
-                    <column/>
-                    <column/>
-                    <column/>
-                   </widget>
-                  </item>
-                  <item>
-                   <layout class="QHBoxLayout" name="horizontalLayout_31">
-                    <item>
-                     <widget class="QPushButton" name="pushButton_addEvent">
-                      <property name="text">
-                       <string>添加事件</string>
-                      </property>
-                     </widget>
-                    </item>
-                    <item>
-                     <widget class="QPushButton" name="pushButton_delEvent">
-                      <property name="text">
-                       <string>删除事件</string>
-                      </property>
-                     </widget>
-                    </item>
-                    <item>
-                     <spacer name="horizontalSpacer_11">
-                      <property name="orientation">
-                       <enum>Qt::Horizontal</enum>
-                      </property>
-                      <property name="sizeHint" stdset="0">
-                       <size>
-                        <width>40</width>
-                        <height>20</height>
-                       </size>
-                      </property>
-                     </spacer>
-                    </item>
-                   </layout>
-                  </item>
-                 </layout>
-                </item>
-               </layout>
-              </widget>
-             </widget>
-            </item>
-           </layout>
-          </widget>
           <widget class="QWidget" name="tab_container_2">
            <attribute name="title">
             <string>容器</string>

+ 72 - 0
pool.cpp

@@ -0,0 +1,72 @@
+#include "pool.h"
+#include "ui_pool.h"
+#include "dataManager.h"
+
+Pool::Pool(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::Pool)
+{
+    ui->setupUi(this);
+    ui->tableWidget_containerPool->setHorizontalHeaderLabels({"键值","资源名","初始时间线","点击时间线","影响时间线","消失时间线","消失z-Order"});
+    ui->tableWidget_childElem->setHorizontalHeaderLabels({"名称","使用的池子"});
+}
+
+Pool::~Pool()
+{
+    delete ui;
+}
+
+void Pool::setUi(QString elem)
+{
+    currentElem = elem;
+    //设置容器池
+    ui->listWidget_pool->clear();
+    ui->listWidget_pool->addItems(DataManager::getInstance()->getList(elem,DataManager::ListType::Pool));
+    //切换元素时容器尚未选中,先清除表格内容
+    int rowNum = ui->tableWidget_containerPool->rowCount();
+    for(int i=0;i<rowNum;i++){
+        ui->tableWidget_containerPool->removeRow(0);
+    }
+
+    //设置子元素界面
+    int 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));
+    }
+    setPoolUi();
+}
+
+void Pool::setPoolUi()
+{
+    int index = ui->listWidget_pool->currentRow();
+    isSetUi = true;
+    ElemPropertyData::ContainerConfig poolData = DataManager::getInstance()->getContainData(currentElem,index);
+    int contIndex = ui->comboBox_container->findText(poolData.type);
+    if(contIndex == -1) contIndex=0;
+    ui->comboBox_container->setCurrentIndex(contIndex);
+    int rowNum = ui->tableWidget_containerPool->rowCount();
+    for(int i=0;i<rowNum;i++){
+        ui->tableWidget_containerPool->removeRow(0);
+    }
+    for(const auto &i:poolData.table){
+        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(i.res);
+        // 此单元格不可编辑
+        res->setFlags(res->flags() & ~Qt::ItemIsEditable);
+        ui->tableWidget_containerPool->setItem(rowNum,1,res);
+        ui->tableWidget_containerPool->setCellWidget(rowNum,2,createTimelineBox(i.initTimeline,i.res,TimelineType::Pool));
+        ui->tableWidget_containerPool->setCellWidget(rowNum,3,createTimelineBox(i.clickTimeline,i.res,TimelineType::Pool));
+        ui->tableWidget_containerPool->setCellWidget(rowNum,4,createTimelineBox(i.effectTimeline,i.res,TimelineType::Pool));
+        ui->tableWidget_containerPool->setCellWidget(rowNum,5,createTimelineBox(i.vanishTimeline,i.res,TimelineType::Pool));
+        ui->tableWidget_containerPool->setItem(rowNum,6,new QTableWidgetItem(i.zOrder));
+    }
+    isSetUi = false;
+}

+ 27 - 0
pool.h

@@ -0,0 +1,27 @@
+#ifndef POOL_H
+#define POOL_H
+
+#include <QWidget>
+
+namespace Ui {
+class Pool;
+}
+
+class Pool : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit Pool(QWidget *parent = nullptr);
+    ~Pool();
+    void updateContainType();
+    void setUi(QString elem);
+
+private:
+    Ui::Pool *ui;
+    QString currentElem;
+    bool isSetUi = false;
+    void setPoolUi();
+};
+
+#endif // POOL_H

+ 241 - 0
pool.ui

@@ -0,0 +1,241 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Pool</class>
+ <widget class="QWidget" name="Pool">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>777</width>
+    <height>561</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QSplitter" name="splitter">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <widget class="QWidget" name="layoutWidget">
+      <layout class="QVBoxLayout" name="verticalLayout_10">
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_9">
+         <item>
+          <widget class="QLabel" name="label">
+           <property name="text">
+            <string>容器池:</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <spacer name="horizontalSpacer">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <widget class="QListWidget" name="listWidget_pool"/>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_15">
+         <item>
+          <widget class="QPushButton" name="pushButton_addContainer">
+           <property name="text">
+            <string>添加</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="pushButton_delContainer">
+           <property name="text">
+            <string>删除</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="layoutWidget_2">
+      <layout class="QVBoxLayout" name="verticalLayout_9">
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_29">
+         <item>
+          <widget class="QLabel" name="label_containerType">
+           <property name="text">
+            <string>容器类型:</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QComboBox" name="comboBox_container"/>
+         </item>
+         <item>
+          <spacer name="horizontalSpacer_9">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_14">
+         <item>
+          <widget class="QTableWidget" name="tableWidget_containerPool">
+           <property name="rowCount">
+            <number>0</number>
+           </property>
+           <property name="columnCount">
+            <number>7</number>
+           </property>
+           <column/>
+           <column/>
+           <column/>
+           <column/>
+           <column/>
+           <column/>
+           <column/>
+          </widget>
+         </item>
+         <item>
+          <layout class="QVBoxLayout" name="verticalLayout_8">
+           <item>
+            <widget class="QPushButton" name="pushButton_addKey">
+             <property name="text">
+              <string>添加</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QPushButton" name="pushButton_delKey">
+             <property name="text">
+              <string>删除</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <spacer name="verticalSpacer_2">
+             <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>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_10">
+     <item>
+      <widget class="QLabel" name="label_2">
+       <property name="text">
+        <string>子元素:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer_2">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_16">
+     <item>
+      <widget class="QTableWidget" name="tableWidget_childElem">
+       <property name="columnCount">
+        <number>2</number>
+       </property>
+       <column/>
+       <column/>
+      </widget>
+     </item>
+     <item>
+      <layout class="QVBoxLayout" name="verticalLayout_11">
+       <item>
+        <widget class="QPushButton" name="pushButton_addChildElem">
+         <property name="text">
+          <string>添加</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="pushButton_delChildElem">
+         <property name="text">
+          <string>删除</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <spacer name="verticalSpacer_3">
+         <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>
+     <item>
+      <spacer name="horizontalSpacer_10">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 441 - 0
statusConfig.cpp

@@ -0,0 +1,441 @@
+#include "statusConfig.h"
+#include "ui_statusConfig.h"
+#include "dataManager.h"
+#include "actionSettingDialog.h"
+#include "changenamedialog.h"
+#include <iostream>
+#include <QMessageBox>
+
+StatusConfig::StatusConfig(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::StatusConfig)
+{
+    ui->setupUi(this);
+    ui->tableWidget_event->setHorizontalHeaderLabels({"事件名称","是否需要颜色一致","状态变化幅度","特效","根据格子数量消除","触发动作","触发动作设置"});
+    ui->lineEdit_collectionType->setReadOnly(true);
+}
+
+StatusConfig::~StatusConfig()
+{
+    delete ui;
+}
+
+///创建普通下拉选项
+QComboBox* StatusConfig::createBox(QString choice,BoxType boxType)
+{
+    QComboBox* box = new QComboBox;
+    box->addItem("尚未选择");
+    if(boxType == BoxType::Event){
+        box->addItems(DataManager::getInstance()->getList(currentElem,DataManager::ListType::Events));
+    }
+    else if(boxType == BoxType::Effect){
+        box->addItems(DataManager::getInstance()->getList(currentElem,DataManager::ListType::Anim));
+    }
+    else if(boxType == BoxType::Action){
+        box->addItems(DataManager::getInstance()->getList(currentElem,DataManager::ListType::Actions));
+    }
+    connect(box,SIGNAL(currentTextChanged(QString)),this,SLOT(onEventBoxTextChanged(QString)));
+    int index = box->findText(choice);
+    if(index == -1)index = 0;
+    box->setCurrentIndex(index);
+    return box;
+}
+
+///创建一个checkBox
+QCheckBox* StatusConfig::createCheckBox(bool chosen)
+{
+    QCheckBox* check = new QCheckBox;
+    if(chosen) check->setCheckState(Qt::Checked);
+    else check->setCheckState(Qt::Unchecked);
+    connect(check,SIGNAL(stateChanged(int)),this,SLOT(onCheckBoxStateChanged(int)));
+    return check;
+}
+
+///创建一个触发动作设置按钮
+QPushButton* StatusConfig::createSetButton()
+{
+    QPushButton* setAction = new QPushButton("设置");
+    connect(setAction,SIGNAL(clicked()),this,SLOT(onSetActionButtonClicked()));
+    return setAction;
+}
+
+///事件配置checkBox状态发生改变
+void StatusConfig::onCheckBoxStateChanged(int state)
+{
+    int statusIndex = ui->listWidget_status->currentRow();
+    if(statusIndex == -1) return;
+    if(ui->listWidget_status->currentItem() == nullptr) return;
+    //获取checkBox所在位置
+    QCheckBox *check = dynamic_cast<QCheckBox*>(this->sender());
+    int x = check->frameGeometry().x();
+    int y = check->frameGeometry().y();
+    QModelIndex index = ui->tableWidget_event->indexAt(QPoint(x,y));
+    int row = index.row();
+    int column = index.column();
+    //修改数据
+    DataManager::getInstance()->setEventTableCheckBox(currentElem,statusIndex,row,column,state);
+}
+
+///事件配置ComboBox选择发生改变
+void StatusConfig::onEventBoxTextChanged(const QString &arg1)
+{
+    int statusIndex = ui->listWidget_status->currentRow();
+    if(statusIndex == -1) return;
+    //获取特效列表所在位置
+    QComboBox *box = dynamic_cast<QComboBox*>(this->sender());
+    int x = box->frameGeometry().x();
+    int y = box->frameGeometry().y();
+    QModelIndex index = ui->tableWidget_event->indexAt(QPoint(x,y));
+    int row = index.row();
+    int column = index.column();
+    //修改数据
+    DataManager::getInstance()->changeEventTable(currentElem,arg1,statusIndex,row,column);
+}
+
+///动作配置中的设置点击后
+void StatusConfig::onSetActionButtonClicked()
+{
+    int statusRow = ui->listWidget_status->currentRow();
+    if(statusRow == -1) return;
+    //获取设置按钮所在位置
+    QPushButton *button = dynamic_cast<QPushButton*>(this->sender());
+    int x = button->frameGeometry().x();
+    int y = button->frameGeometry().y();
+    QModelIndex index = ui->tableWidget_event->indexAt(QPoint(x,y));
+    int row = index.row();
+    QVector<ElemPropertyData::EventConfig> eventTable = DataManager::getInstance()->getStatusConfigData(currentElem,statusRow).eventConfig;
+    QString action = eventTable[row].triggerAction;
+    std::cout<<"row:"<<row<<std::endl;
+    std::cout<<qPrintable(action)<<std::endl;
+    createSetWindow(action,row);
+}
+
+///点击动作配置的设置按钮后生成新窗口
+void StatusConfig::createSetWindow(QString actionName,int row)
+{
+    int statusIndex = ui->listWidget_status->currentRow();
+    if(actionName == "尚未选择"){
+        QMap<QString,QString> nullMap;
+        DataManager::getInstance()->changeActionConfigData(currentElem,statusIndex,row,nullMap);
+        return;
+    }
+    ActionSettingDialog setDialog;
+    setDialog.setDialogUi(actionName,currentElem,statusIndex,row);
+    setDialog.exec();
+}
+
+///切换元素,重置全部ui
+void StatusConfig::setUi(QString elem)
+{
+    currentElem = elem;
+    //设置状态配置界面
+    ui->listWidget_status->clear();
+    ui->listWidget_status->addItems(DataManager::getInstance()->getList(elem,DataManager::ListType::StatusVal));
+    //切换元素时状态尚未选中,先清除事件表格内容
+    int rowCnt = ui->tableWidget_event->rowCount();
+    for(int i=0;i<rowCnt;i++){
+        ui->tableWidget_event->removeRow(0);
+    }
+    //设置收集动画和状态配置的comboBox
+    setAnimComboBox();
+    ui->lineEdit_collectionType->clear();
+}
+
+///重置容易变化的动画下拉选项
+void StatusConfig::setAnimComboBox()
+{
+    ui->comboBox_initAnim->clear();
+    ui->comboBox_clickAnim->clear();
+    ui->comboBox_collectAnimation->clear();
+    ui->comboBox_initAnim->addItem("尚未选择");
+    ui->comboBox_clickAnim->addItem("尚未选择");
+    ui->comboBox_collectAnimation->addItem("尚未选择");
+    QStringList animList = DataManager::getInstance()->getList(currentElem,DataManager::ListType::Anim);
+    ui->comboBox_clickAnim->addItems(animList);
+    ui->comboBox_initAnim->addItems(animList);
+    ui->comboBox_collectAnimation->addItems(DataManager::getInstance()->getList(currentElem,DataManager::ListType::CollAnim));
+    int row = ui->listWidget_status->currentRow();
+    if(row != -1) {
+        ElemPropertyData::StatusConfig statusData = DataManager::getInstance()->getStatusConfigData(currentElem,row);
+        setAnimIndex(statusData);
+        //表格中的特效选项更新
+        int rowNum = ui->tableWidget_event->rowCount();
+        QVector<ElemPropertyData::EventConfig> event = statusData.eventConfig;
+        for(int i=0;i<rowNum;i++){
+            ui->tableWidget_event->setCellWidget(i,3,createBox(event[i].specialEffect,BoxType::Effect));
+            ui->tableWidget_event->setCellWidget(i,0,createBox(event[i].name,BoxType::Event));
+            ui->tableWidget_event->setCellWidget(i,5,createBox(event[i].triggerAction,BoxType::Action));
+        }
+    }
+}
+
+///设置动画当前选择项
+void StatusConfig::setAnimIndex(ElemPropertyData::StatusConfig statusData)
+{
+    int comboIndex;
+    //初始化动画
+    comboIndex = ui->comboBox_initAnim->findText(statusData.initAnim);
+    if(comboIndex == -1) comboIndex = 0;
+    ui->comboBox_initAnim->setCurrentIndex(comboIndex);
+    //点击动画
+    comboIndex = ui->comboBox_clickAnim->findText(statusData.clickAnim);
+    if(comboIndex == -1) comboIndex = 0;
+    ui->comboBox_clickAnim->setCurrentIndex(comboIndex);
+    //收集动画
+    comboIndex = ui->comboBox_collectAnimation->findText(statusData.collAnim);
+    if(comboIndex == -1) comboIndex = 0;
+    ui->comboBox_collectAnimation->setCurrentIndex(comboIndex);
+}
+
+///切换状态,重置状态配置界面
+void StatusConfig::setStatusUi()
+{
+    int row = ui->listWidget_status->currentRow();
+    if(row == -1) return;
+    isSetUi = true;
+    ElemPropertyData::StatusConfig statusData = DataManager::getInstance()->getStatusConfigData(currentElem,row);
+    setAnimIndex(statusData);
+    //多重打击
+    if(statusData.multiHit) ui->checkBox_multiHit->setCheckState(Qt::Checked);
+    else ui->checkBox_multiHit->setCheckState(Qt::Unchecked);
+    //可掉落
+    if(statusData.dropable) ui->checkBox_dropable->setCheckState(Qt::Checked);
+    else ui->checkBox_dropable->setCheckState(Qt::Unchecked);
+    //是否需要收集
+    ui->lineEdit_collectionType->clear();
+    if(statusData.needCollect){
+        ui->checkBox_needCollect->setCheckState(Qt::Checked);
+        ui->lineEdit_collectionType->setReadOnly(false);
+        std::cout<<"收集的目标类型"<<qPrintable(statusData.collTargetType)<<std::endl;
+        ui->lineEdit_collectionType->setText(statusData.collTargetType);
+    }
+    else{
+        ui->checkBox_needCollect->setCheckState(Qt::Unchecked);
+        ui->lineEdit_collectionType->setReadOnly(true);
+    }
+    //事件配置
+    int rowNum = ui->tableWidget_event->rowCount();
+    for(int i=0;i<rowNum;i++){
+        ui->tableWidget_event->removeRow(0);
+    }
+    for(const auto &i:statusData.eventConfig){
+        rowNum = ui->tableWidget_event->rowCount();
+        ui->tableWidget_event->insertRow(rowNum);
+        //事件名称
+        ui->tableWidget_event->setCellWidget(rowNum,0,createBox(i.name,BoxType::Event));
+        std::cout<<"重置状态配置ui:事件名称:"<<qPrintable(i.name)<<std::endl;
+        //是否需要颜色一致
+        ui->tableWidget_event->setCellWidget(rowNum,1,createCheckBox(i.consisColor));
+        //tableWidget_event
+        ui->tableWidget_event->setItem(rowNum,2,new QTableWidgetItem(i.changeMagnitude));
+        //特效
+        ui->tableWidget_event->setCellWidget(rowNum,3,createBox(i.specialEffect,BoxType::Effect));
+        //根据格子数量消除
+        ui->tableWidget_event->setCellWidget(rowNum,4,createCheckBox(i.elimATLattices));
+        //触发动作
+        ui->tableWidget_event->setCellWidget(rowNum,5,createBox(i.triggerAction,BoxType::Action));
+        //触发动作设置
+        ui->tableWidget_event->setCellWidget(rowNum,6,createSetButton());
+    }
+    isSetUi = false;
+}
+
+///生成模板
+void StatusConfig::on_pushButton_genTemp_clicked()
+{
+    if(ui->listWidget_status->count() > 0) return;
+    int maxLayer = DataManager::getInstance()->getMaxLayer(currentElem).toInt();
+    for(int i=0;i<maxLayer;i++){
+        ui->listWidget_status->addItem(QString::number(i));
+        DataManager::getInstance()->addStatus(currentElem,QString::number(i));
+    }
+}
+
+///添加状态,若已经生成最大层数全部状态则按钮无效
+void StatusConfig::on_pushButton_addStatus_clicked()
+{
+    int maxLayer = DataManager::getInstance()->getMaxLayer(currentElem).toInt();
+    QString statusName;
+    for(int i=0;i<maxLayer;i++){
+        if(!DataManager::getInstance()->existStatusVal(currentElem,QString::number(i))){
+            statusName = QString::number(i);
+            break;
+        }
+    }
+    if(!statusName.isEmpty()){
+        ui->listWidget_status->addItem(statusName);
+        ElemPropertyData::StatusConfig status(statusName);
+        DataManager::getInstance()->addStatus(currentElem,statusName);
+    }
+}
+
+//TODO: 删除状态值时出现数组越界
+///删除状态
+void StatusConfig::on_pushButton_delStatus_clicked()
+{
+    int row = ui->listWidget_status->currentRow();
+    if(row == -1) return;
+    QMessageBox::StandardButton reply = QMessageBox::question(this,"删除状态","确定要删除此状态吗?");
+    if(reply == QMessageBox::Yes){
+        DataManager::getInstance()->delStatus(currentElem,row);
+        delete ui->listWidget_status->takeItem(ui->listWidget_status->currentRow());
+    }
+}
+
+///修改状态值,检查修改后的状态值是否合法,并转移数据
+void StatusConfig::on_listWidget_status_itemDoubleClicked(QListWidgetItem *item)
+{
+    ChangeNameDialog newName;
+    newName.setModal(true);
+    newName.exec();
+    QString name = newName.getNewName();
+    if(!name.isEmpty()){
+        //TODO: 检查状态值合法性并转移数据
+        bool isNum;double tmp = name.toDouble(&isNum);
+        int maxLayer = DataManager::getInstance()->getMaxLayer(currentElem).toInt();
+        int statusNum = name.toInt();
+        if(!isNum ||statusNum < 0 || statusNum >= maxLayer){
+            QMessageBox::critical(this,"错误","状态值必须是大于等于0且小于最大层数的数字");
+            return;
+        }
+        if(DataManager::getInstance()->existStatusVal(currentElem,name)){
+            QMessageBox::critical(this,"警告","该状态值已存在");
+            return;
+        }
+        int row = ui->listWidget_status->currentRow();
+        DataManager::getInstance()->changeStatusVal(currentElem,row,name);
+        item->setText(name);
+    }
+}
+
+///多重打击数据变化
+void StatusConfig::on_checkBox_multiHit_stateChanged(int arg1)
+{
+    int index = ui->listWidget_status->currentRow();
+    if(index == -1 || isSetUi) return;
+    DataManager::getInstance()->setFundCheckBox(currentElem,index,DataManager::CheckType::MultiHit,arg1);
+}
+
+///可掉落数据变化
+void StatusConfig::on_checkBox_dropable_stateChanged(int arg1)
+{
+    int index = ui->listWidget_status->currentRow();
+    if(index == -1 || isSetUi) return;
+    DataManager::getInstance()->setFundCheckBox(currentElem,index,DataManager::CheckType::Dropable,arg1);
+}
+
+///需要收集数据变化
+void StatusConfig::on_checkBox_needCollect_stateChanged(int arg1)
+{
+    int index = ui->listWidget_status->currentRow();
+    if(index == -1 || isSetUi) return;
+    DataManager::getInstance()->setFundCheckBox(currentElem,index,DataManager::CheckType::NeedColl,arg1);
+    if(arg1){
+        ui->lineEdit_collectionType->setReadOnly(false);
+    }
+    else{
+        ui->lineEdit_collectionType->setReadOnly(true);
+    }
+}
+
+///收集的目标类型变化
+void StatusConfig::on_lineEdit_collectionType_editingFinished()
+{
+    int index = ui->listWidget_status->currentRow();
+    if(index == -1) return;
+    DataManager::getInstance()->changeStatusFundVal(currentElem,DataManager::StatusDataType::CollTar,ui->lineEdit_collectionType->text(),index);
+}
+
+///添加事件
+void StatusConfig::on_pushButton_addEvent_clicked()
+{
+    int index = ui->listWidget_status->currentRow();
+    if(index == -1) return;
+    int rowNum = ui->tableWidget_event->rowCount();
+    ui->tableWidget_event->insertRow(rowNum);
+    ui->tableWidget_event->setCellWidget(rowNum,0,createBox("尚未选择",BoxType::Event));
+    ui->tableWidget_event->setCellWidget(rowNum,1,createCheckBox(false));
+    ui->tableWidget_event->setCellWidget(rowNum,3,createBox("尚未选择",BoxType::Effect));
+    ui->tableWidget_event->setCellWidget(rowNum,4,createCheckBox(false));
+    ui->tableWidget_event->setCellWidget(rowNum,5,createBox("尚未选择",BoxType::Action));
+    ui->tableWidget_event->setCellWidget(rowNum,6,createSetButton());
+    DataManager::getInstance()->addEvent(currentElem,index);
+}
+
+///事件表格双击改变数据
+void StatusConfig::on_tableWidget_event_cellDoubleClicked(int row, int column)
+{
+    if(ui->listWidget_status->currentItem() == nullptr) return;
+    if(column == 2) eventTableItemChanged = true;
+}
+
+///状态变化幅度合法性检查及数据保存
+void StatusConfig::on_tableWidget_event_itemChanged(QTableWidgetItem *item)
+{
+    int statusIndex = ui->listWidget_status->currentRow();
+    if(statusIndex == -1) return;
+    if(!eventTableItemChanged) return;
+    eventTableItemChanged = false;
+    int column = item->column();
+    int row = item->row();
+    QVector<ElemPropertyData::EventConfig> eventVec = DataManager::getInstance()->getStatusConfigData(currentElem,statusIndex).eventConfig;
+    if(column == 2){
+        bool ok;double a = item->text().toDouble(&ok);
+        int val = item->text().toInt();
+        if(!ok || val<0){
+            QMessageBox::critical(this,"警告","状态变化幅度是大于0的数字");
+            ui->tableWidget_event->item(row,2)->setText(QString::number(eventVec[row].changeMagnitude));
+            return;
+        }
+        std::cout<<"状态变化幅度发生改变,新值为:"<<val<<std::endl;
+        DataManager::getInstance()->changeEventTable(currentElem,item->text(),statusIndex,row,2);
+    }
+}
+
+///初始化动画数据修改
+void StatusConfig::on_comboBox_initAnim_currentTextChanged(const QString &arg1)
+{
+    int index = ui->listWidget_status->currentRow();
+    if(index==-1 || isSetUi) return;
+    std::cout<<"初始化动画:"<<qPrintable(arg1)<<std::endl;
+    DataManager::getInstance()->changeStatusFundVal(currentElem,DataManager::StatusDataType::InitAnim,arg1,index);
+}
+
+///点击动画数据修改
+void StatusConfig::on_comboBox_clickAnim_currentTextChanged(const QString &arg1)
+{
+    int index = ui->listWidget_status->currentRow();
+    if(index==-1 || isSetUi) return;
+    std::cout<<"初始化动画:"<<qPrintable(arg1)<<std::endl;
+    DataManager::getInstance()->changeStatusFundVal(currentElem,DataManager::StatusDataType::ClickAnim,arg1,index);
+}
+
+///收集动画数据修改
+void StatusConfig::on_comboBox_collectAnimation_currentTextChanged(const QString &arg1)
+{
+    int index = ui->listWidget_status->currentRow();
+    if(index==-1 || isSetUi) return;
+    std::cout<<"初始化动画:"<<qPrintable(arg1)<<std::endl;
+    DataManager::getInstance()->changeStatusFundVal(currentElem,DataManager::StatusDataType::CollAnim,arg1,index);
+}
+
+///删除事件
+void StatusConfig::on_pushButton_delEvent_clicked()
+{
+    int statusIndex = ui->listWidget_status->currentRow();
+    int row = ui->tableWidget_event->currentRow();
+    if(statusIndex == -1 || row == -1) return;
+    QMessageBox::StandardButton reply = QMessageBox::question(this,"删除事件","确定要删除此事件吗?");
+    if(reply == QMessageBox::Yes){
+        DataManager::getInstance()->delEvent(currentElem,statusIndex,row);
+        ui->tableWidget_event->removeRow(row);
+    }
+}
+
+///当前选中状态修改
+void StatusConfig::on_listWidget_status_currentRowChanged(int currentRow)
+{
+    if(currentRow == -1) return;
+    setStatusUi();
+}
+

+ 93 - 0
statusConfig.h

@@ -0,0 +1,93 @@
+#ifndef STATUSCONFIG_H
+#define STATUSCONFIG_H
+
+#include "elemPropertyData.h"
+#include <QWidget>
+#include <QComboBox>
+#include <QCheckBox>
+#include <QPushButton>
+#include <QListWidgetItem>
+#include <QTableWidgetItem>
+
+namespace Ui {
+class StatusConfig;
+}
+
+class StatusConfig : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit StatusConfig(QWidget *parent = nullptr);
+    ~StatusConfig();
+    ///切换元素,重置整个界面
+    void setUi(QString elem);
+    ///切换状态,重置状态配置界面
+    void setStatusUi();
+    ///重置变动可能较大的点击动画、初始动画和收集动画
+    void setAnimComboBox();
+
+private slots:
+    ///添加状态,若已经生成最大层数全部状态则按钮无效
+    void on_pushButton_addStatus_clicked();
+
+    ///生成模板
+    void on_pushButton_genTemp_clicked();
+
+    ///删除状态
+    void on_pushButton_delStatus_clicked();
+
+    ///修改状态值,检查修改后的状态值是否合法,并转移数据
+    void on_listWidget_status_itemDoubleClicked(QListWidgetItem *item);
+
+    void on_checkBox_multiHit_stateChanged(int arg1);
+
+    void on_checkBox_dropable_stateChanged(int arg1);
+
+    void on_checkBox_needCollect_stateChanged(int arg1);
+
+    void on_lineEdit_collectionType_editingFinished();
+
+    void on_comboBox_initAnim_currentTextChanged(const QString &arg1);
+
+    void on_comboBox_clickAnim_currentTextChanged(const QString &arg1);
+
+    void on_comboBox_collectAnimation_currentTextChanged(const QString &arg1);
+
+    void on_pushButton_addEvent_clicked();
+
+    void on_pushButton_delEvent_clicked();
+
+    void on_tableWidget_event_cellDoubleClicked(int row, int column);
+
+    void on_tableWidget_event_itemChanged(QTableWidgetItem *item);
+    ///事件配置checkBox状态发生改变
+    void onCheckBoxStateChanged(int state);
+    ///事件配置ComboBox选择发生改变
+    void onEventBoxTextChanged(const QString &arg1);
+    ///动作配置中的设置点击后
+    void onSetActionButtonClicked();
+
+    void on_listWidget_status_currentRowChanged(int currentRow);
+
+private:
+    Ui::StatusConfig *ui;
+    QString currentElem;
+    enum class BoxType{Event,Effect,Action};
+    ///创建事件、动作、特效的下拉选项
+    QComboBox* createBox(QString choice,BoxType boxType);
+    ///创建一个可勾选项
+    QCheckBox* createCheckBox(bool chosen);
+    ///创建一个触发动作设置按钮
+    QPushButton* createSetButton();
+    ///当前正在设置ui,不要保存改变的数据
+    bool isSetUi = false;
+    ///事件配置表格数据被双击修改
+    bool eventTableItemChanged = false;
+    ///设置动画当前选择的项
+    void setAnimIndex(ElemPropertyData::StatusConfig statusData);
+    ///点击动作配置的设置按钮后生成新窗口
+    void createSetWindow(QString actionName,int row);
+};
+
+#endif // STATUSCONFIG_H

+ 277 - 0
statusConfig.ui

@@ -0,0 +1,277 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>StatusConfig</class>
+ <widget class="QWidget" name="StatusConfig">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1051</width>
+    <height>549</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QHBoxLayout" name="horizontalLayout">
+   <item>
+    <widget class="QSplitter" name="splitter">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <widget class="QWidget" name="layoutWidget">
+      <layout class="QVBoxLayout" name="verticalLayout_13">
+       <item>
+        <widget class="QListWidget" name="listWidget_status"/>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_30">
+         <item>
+          <widget class="QPushButton" name="pushButton_addStatus">
+           <property name="text">
+            <string>添加</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="pushButton_delStatus">
+           <property name="text">
+            <string>删除</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <widget class="QPushButton" name="pushButton_genTemp">
+         <property name="text">
+          <string>生成模板</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="layoutWidget_2">
+      <layout class="QVBoxLayout" name="verticalLayout_15">
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_5">
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_25">
+           <item>
+            <widget class="QLabel" name="label_initialAnimation">
+             <property name="text">
+              <string>初始化动画:</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QComboBox" name="comboBox_initAnim"/>
+           </item>
+           <item>
+            <spacer name="horizontalSpacer_7">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>298</width>
+               <height>18</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_23">
+           <item>
+            <widget class="QLabel" name="label_clickAnimation">
+             <property name="text">
+              <string>点击动画:</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QComboBox" name="comboBox_clickAnim"/>
+           </item>
+           <item>
+            <spacer name="horizontalSpacer_4">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>298</width>
+               <height>18</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_24">
+           <item>
+            <widget class="QCheckBox" name="checkBox_multiHit">
+             <property name="text">
+              <string>支持多重打击</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <spacer name="horizontalSpacer_5">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>88</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item>
+            <widget class="QCheckBox" name="checkBox_dropable">
+             <property name="text">
+              <string>可掉落</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <spacer name="horizontalSpacer_6">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>138</width>
+               <height>28</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_26">
+           <item>
+            <widget class="QCheckBox" name="checkBox_needCollect">
+             <property name="text">
+              <string>是否需要收集</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <spacer name="horizontalSpacer_8">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>40</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item>
+            <layout class="QHBoxLayout" name="horizontalLayout_27">
+             <item>
+              <widget class="QLabel" name="label_cellectionType">
+               <property name="text">
+                <string>收集的目标类型:</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QLineEdit" name="lineEdit_collectionType"/>
+             </item>
+            </layout>
+           </item>
+           <item>
+            <layout class="QHBoxLayout" name="horizontalLayout_28">
+             <item>
+              <widget class="QLabel" name="label_collectAnimation">
+               <property name="text">
+                <string>收集动画:</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QComboBox" name="comboBox_collectAnimation"/>
+             </item>
+            </layout>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_14">
+         <item>
+          <widget class="QLabel" name="label_eventConfiguration">
+           <property name="text">
+            <string>事件配置:</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QTableWidget" name="tableWidget_event">
+           <property name="rowCount">
+            <number>0</number>
+           </property>
+           <property name="columnCount">
+            <number>7</number>
+           </property>
+           <column/>
+           <column/>
+           <column/>
+           <column/>
+           <column/>
+           <column/>
+           <column/>
+          </widget>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_31">
+           <item>
+            <widget class="QPushButton" name="pushButton_addEvent">
+             <property name="text">
+              <string>添加事件</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QPushButton" name="pushButton_delEvent">
+             <property name="text">
+              <string>删除事件</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <spacer name="horizontalSpacer_11">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>40</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>