浏览代码

增加功能,修改bug,完善导出配置功能

Menglan_Luo 2 年之前
父节点
当前提交
a91c8a5fd4

+ 6 - 6
ConfigurableTool.pro

@@ -12,8 +12,9 @@ SOURCES += \
     actionSettingDialog.cpp \
     changenamedialog.cpp \
     collAnim.cpp \
-    dataManager.cpp \
-    elemPropertyData.cpp \
+    datacpp/dataManager.cpp \
+    datacpp/elemPropertyData.cpp \
+    datacpp/readJsonSrc.cpp \
     main.cpp \
     mainwindow.cpp \
     plistcpp/plist.cpp \
@@ -21,7 +22,6 @@ SOURCES += \
     plistcpp/pugixml.cpp \
     plistcpp/redream.cpp \
     pool.cpp \
-    readJsonSrc.cpp \
     resfiledialog.cpp \
     statusConfig.cpp \
     statusEffectAnim.cpp
@@ -295,8 +295,9 @@ HEADERS += \
     boost/version.hpp \
     changenamedialog.h \
     collAnim.h \
-    dataManager.h \
-    elemPropertyData.h \
+    datahpp/dataManager.h \
+    datahpp/elemPropertyData.h \
+    datahpp/readJsonSrc.h \
     mainwindow.h \
     plisthpp/Plist.hpp \
     plisthpp/PlistDate.hpp \
@@ -305,7 +306,6 @@ HEADERS += \
     plisthpp/pugixml.hpp \
     plisthpp/redream.h \
     pool.h \
-    readJsonSrc.h \
     resfiledialog.h \
     statusConfig.h \
     statusEffectAnim.h

+ 1 - 0
Resources.qrc

@@ -5,5 +5,6 @@
     </qresource>
     <qresource prefix="/file">
         <file>file/template.json</file>
+        <file>file/data.json</file>
     </qresource>
 </RCC>

+ 1 - 1
actionSettingDialog.cpp

@@ -1,6 +1,6 @@
 #include "actionSettingDialog.h"
 #include "ui_actionSettingDialog.h"
-#include "dataManager.h"
+#include "datahpp/dataManager.h"
 #include <QPushButton>
 #include <QFormLayout>
 #include <QComboBox>

+ 1 - 1
actionSettingDialog.h

@@ -1,7 +1,7 @@
 #ifndef ACTIONSETTINGDIALOG_H
 #define ACTIONSETTINGDIALOG_H
 
-#include "readJsonSrc.h"
+#include "datahpp/readJsonSrc.h"
 #include <QDialog>
 
 namespace Ui {

+ 1 - 1
collAnim.cpp

@@ -1,6 +1,6 @@
 #include "collAnim.h"
 #include "ui_collAnim.h"
-#include "dataManager.h"
+#include "datahpp/dataManager.h"
 #include "changenamedialog.h"
 #include <QLineEdit>
 #include <iostream>

+ 46 - 46
collAnim.ui

@@ -13,65 +13,65 @@
   <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">
+  <layout class="QHBoxLayout" name="horizontalLayout_2">
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,3">
      <item>
-      <widget class="QListWidget" name="listWidget_collectAnim"/>
-     </item>
-     <item>
-      <layout class="QHBoxLayout" name="horizontalLayout_21">
+      <layout class="QVBoxLayout" name="verticalLayout_3">
        <item>
-        <widget class="QPushButton" name="pushButton_addCollectAnim">
-         <property name="text">
-          <string>添加</string>
-         </property>
-        </widget>
+        <widget class="QListWidget" name="listWidget_collectAnim"/>
        </item>
        <item>
-        <widget class="QPushButton" name="pushButton_delCollectAnim">
-         <property name="text">
-          <string>删除</string>
-         </property>
-        </widget>
+        <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>
-    </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>
+      <layout class="QVBoxLayout" name="verticalLayout" stretch="1,5">
+       <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">
+           <property name="minimumSize">
+            <size>
+             <width>200</width>
+             <height>0</height>
+            </size>
+           </property>
+          </widget>
+         </item>
+        </layout>
        </item>
-       <item row="0" column="1">
-        <widget class="QComboBox" name="comboBox_animType"/>
+       <item>
+        <widget class="QWidget" name="widget" native="true"/>
        </item>
       </layout>
      </item>
-     <item>
-      <widget class="QWidget" name="widget" native="true"/>
-     </item>
     </layout>
-   </widget>
-  </widget>
+   </item>
+  </layout>
  </widget>
  <resources/>
  <connections/>

二进制
datacpp/.DS_Store


+ 62 - 15
dataManager.cpp → datacpp/dataManager.cpp

@@ -1,8 +1,9 @@
-#include "dataManager.h"
+#include "datahpp/dataManager.h"
 #include <iostream>
 #include <QFile>
 #include <QJsonDocument>
 #include <QApplication>
+#include <QDir>
 
 DataManager* DataManager::getInstance()
 {
@@ -22,6 +23,24 @@ DataManager::~DataManager()
     saveData();
 }
 
+QString DataManager::getFileName(QString filePath)
+{
+    if(filePath == "双击添加资源文件") return filePath;
+    int size = filePath.count();
+    int pos = 0;
+    for(int i=size-1;i>=0;i--){
+        if(filePath[i] == '/'){
+            pos = i+1;
+            break;
+        }
+    }
+    QString fileName;
+    for(int i=pos;i<size;i++){
+        fileName.push_back(filePath[i]);
+    }
+    return fileName;
+}
+
 //模板配置
 QVector<ReadJsonSrc::Fields> DataManager::getTempFields(QString key, QString name)
 {
@@ -112,9 +131,9 @@ void DataManager::changeScore(QString elem, QString val)
 {
     elements[elem]->score = val;
 }
-void DataManager::changeDropConfig(QString elem, QString val)
+void DataManager::changeDropConfig(QString elem, int index)
 {
-    elements[elem]->dropConfig = val;
+    elements[elem]->dropConfig = static_cast<ElemPropertyData::DROPOPT>(index);
 }
 void DataManager::changeIconPath(QString elem, QString iconPath)
 {
@@ -144,9 +163,9 @@ QString DataManager::getScore(QString elem)
 {
     return elements[elem]->score;
 }
-QString DataManager::getDropConfig(QString elem)
+int DataManager::getDropConfig(QString elem)
 {
-    return  elements[elem]->dropConfig;
+    return  static_cast<int>(elements[elem]->dropConfig);
 }
 QString DataManager::getIconPath(QString elem)
 {
@@ -266,8 +285,8 @@ bool DataManager::existStatusVal(QString elem, QString statusVal)
 void DataManager::addStatus(QString elem, QString statusVal)
 {
     ElemPropertyData::StatusConfig status(statusVal);
-    if(elements[elem]->dropConfig == "可掉落") status.dropable = true;
-    if(elements[elem]->dropConfig == "不可掉落") status.dropable = false;
+    if(elements[elem]->dropConfig == ElemPropertyData::DROPOPT::DROPABLE) status.dropable = true;
+    if(elements[elem]->dropConfig == ElemPropertyData::DROPOPT::NOTDROPABLE) status.dropable = false;
     elements[elem]->statusConfig.push_back(status);
 }
 //TODO: 删除状态值时出现数组越界
@@ -389,8 +408,7 @@ void DataManager::delChildElem(QString elem, int index)
 ///加载数据
 bool DataManager::loadData()
 {
-//    QFile loadFile(":/file/file/data.json");
-    QFile loadFile("/Users/menglanluo/Desktop/data.json");
+    QFile loadFile(QDir::homePath() + "/Documents/RedInterstitialData/ElemsConf/data.json");
     if(!loadFile.open(QIODevice::ReadOnly)){
         qWarning("can't open data file!");
         return false;
@@ -432,9 +450,7 @@ bool DataManager::saveData()
 {
     QJsonObject dataObj;
     write(dataObj);
-    //资源文件不支持写?
-//    QFile file(":/file/file/data.json");
-    QFile file("/Users/menglanluo/Desktop/data.json");
+    QFile file(QDir::homePath() + "/Documents/RedInterstitialData/ElemsConf/data.json");
     if(!file.open(QIODevice::WriteOnly)){
         qDebug()<<"file open failed!";
         return false;
@@ -448,6 +464,17 @@ bool DataManager::saveData()
 
 
 //导出数据
+///检查标识值是否重复
+bool DataManager::findElemLabelName(QString elem,QString labelName)
+{
+    QStringList elems= elements.keys();
+    for(int i=0;i<elems.size();i++)
+    {
+        if(elem!=elems[i] && labelName==elements[elems[i]]->labelName)
+            return true;
+    }
+    return false;
+}
 ///数据导出合法性检查
 bool DataManager::exportIsValid()
 {
@@ -462,6 +489,10 @@ bool DataManager::exportIsValid()
             exportMessage = elemMessage+"\n标识值必须是大于0的数字!";
             return false;
         }
+        if(findElemLabelName(key,data->labelName)){
+            exportMessage = "元素标识值重复!";
+            return false;
+        }
         if(data->maxLayer.toInt() <= 0){
             exportMessage = elemMessage+"\n最大层数必须是大于0的数字!";
             return false;
@@ -617,7 +648,7 @@ QVector<QVector<int>> DataManager::getGridPos(QString str)
     return posNumPairs;
 }
 
-bool DataManager::exportData()
+bool DataManager::exportData(QString fileName)
 {
     if(!exportIsValid()) return false;
     //导出为json
@@ -630,13 +661,15 @@ bool DataManager::exportData()
         elements[elem]->exportData(obj);
         dataObj.insert(elements[elem]->labelName,obj);
     }
-    QFile file("/Users/menglanluo/Desktop/export.json");
+    QFile file(fileName);
     if(!file.open(QIODevice::WriteOnly)){
         qDebug()<<"file open failed!";
         return false;
     }
+    QJsonObject elemObj;
+    elemObj["elements"] = dataObj;
     QJsonDocument jdoc;
-    jdoc.setObject(dataObj);
+    jdoc.setObject(elemObj);
     file.write(jdoc.toJson(QJsonDocument::Indented));
     file.close();
     return true;
@@ -647,3 +680,17 @@ QString DataManager::getTempId(QString key, QString name)
     int index = jsonTemp->getTemplateIndex(key,name);
     return jsonTemp->templateMap[key][index].id;
 }
+
+QString DataManager::getTempFieldId(QString key, QString name, QString fieldName)
+{
+    int nameIndex = jsonTemp->getTemplateIndex(key,name);
+    QVector<ReadJsonSrc::Fields> fields = jsonTemp->templateMap[key][nameIndex].fields;
+    for(int i=0;i<fields.size();i++)
+    {
+        if(fields[i].name == fieldName)
+            return fields[i].id;
+    }
+    QString str;
+    return str;
+}
+

+ 22 - 21
elemPropertyData.cpp → datacpp/elemPropertyData.cpp

@@ -1,6 +1,6 @@
-#include "elemPropertyData.h"
+#include "datahpp/elemPropertyData.h"
 #include "plisthpp/redream.h"
-#include "dataManager.h"
+#include "datahpp/dataManager.h"
 #include <QJsonArray>
 
 ElemPropertyData::ElemPropertyData()
@@ -9,7 +9,7 @@ ElemPropertyData::ElemPropertyData()
     labelName = "0";
     maxLayer = "1";
     score = "50";
-    dropConfig = "随状态而定";
+    dropConfig = DROPOPT::DROPABLE;
     canBeLinked = false;
     canMoveAway = false;
 }
@@ -98,7 +98,7 @@ void ElemPropertyData::readData(const QJsonObject &json)
         score = json["score"].toString();
     }
     if(json.contains("dropConfig") && json["maxLayer"].isString()){
-        dropConfig = json["dropConfig"].toString();
+        dropConfig = static_cast<DROPOPT>(json["dropConfig"].toInt());
     }
     if(json.contains("iconPath") && json["iconPath"].isString()){
         iconPath = json["iconPath"].toString();
@@ -138,7 +138,7 @@ void ElemPropertyData::writeData(QJsonObject &json) const
     json["pos"] = pos;
     json["maxLayer"] = maxLayer;
     json["score"] = score;
-    json["dropConfig"] = dropConfig;
+    json["dropConfig"] = static_cast<int>(dropConfig);
     json["iconPath"] = iconPath;
     json["canBeLinked"] = canBeLinked;
     json["canMoveAway"] = canMoveAway;
@@ -397,17 +397,18 @@ QJsonArray ElemPropertyData::writeChildElem() const
 void ElemPropertyData::exportData(QJsonObject &json) const
 {
     //基础元素
-    json["maxNum"] = maxLayer;
+    json["maxNum"] = maxLayer.toInt();
     json["canBeLinked"] = canBeLinked;
     //canDrop是一个bool值,导出的什么数据?在状态配置中导出?
     json["canMoveAway"] = canMoveAway;
-    json["beatScore"] = score;
+    json["beatScore"] = score.toInt();
     json["gridPos"] = exportGridPos();
     json["animation"] = exportAnim();
     json["states"] = exportStates();
     //容器池
     json["subitem_pools"] = exportPools();
     //子元素
+    json["subitems"] = exportChildElems();
     //收集动画
     json["collectConfig"] = exportCollAnim();
 }
@@ -432,7 +433,7 @@ QJsonObject ElemPropertyData::exportAnim() const
     for(int i=0;i<statusEffect.size();i++)
     {
         QJsonObject animObj;
-        animObj["showCcbi"] = statusEffect[i].res;
+        animObj["showCcbi"] = DataManager::getFileName(statusEffect[i].res);
         animObj["showAnim"] = statusEffect[i].timeline;
         animObj["localZOrder"] = statusEffect[i].zOrder.toInt();
         json.insert(statusEffect[i].name,animObj);
@@ -454,14 +455,13 @@ QJsonObject ElemPropertyData::exportAnim() const
          //收集
         if(statusConfig[i].needCollect){
             QJsonObject collObj;
-            collObj["goalType"] = statusConfig[i].collTargetType;
-            //TODO:确定收集动画的key
-            collObj["collAnim"] = statusConfig[i].collAnim;
+            collObj["goalType"] = statusConfig[i].collTargetType.toInt();
+            collObj["collConf"] = statusConfig[i].collAnim;
             statusObj["collect"] = collObj;
         }
         //事件
         QJsonObject eventObj;
-        QVector<EventConfig> eventVec;
+        QVector<EventConfig> eventVec = statusConfig[i].eventConfig;
         for(int j=0;j<eventVec.size();j++)
         {
             QJsonObject obj;
@@ -485,11 +485,11 @@ QJsonObject ElemPropertyData::exportAnim() const
          QJsonObject poolObj;
          poolObj["method"] = DataManager::getInstance()->getTempId("poolTemp",container[i].type);
          QJsonObject tableObj;
-         QVector<ContainTable> table;
+         QVector<ContainTable> table = container[i].table;
          for(int j=0;j<table.size();j++)
          {
              QJsonObject keyObj;
-             keyObj["res"] = table[i].res;
+             keyObj["res"] = DataManager::getFileName(table[i].res);
              keyObj["init"] = table[i].initTimeline;
              keyObj["tap"] = table[i].clickTimeline;
              keyObj["affect"] = table[i].effectTimeline;
@@ -506,11 +506,12 @@ QJsonObject ElemPropertyData::exportAnim() const
 QJsonArray ElemPropertyData::exportChildElems() const
 {
     QJsonArray childElemArray;
-//    for(int i=0;i<childElem.size();i++)
-//    {
-//        QJsonObject childElemObj;
-
-//    }
+    for(int i=0;i<childElem.size();i++)
+    {
+        QJsonObject childElemObj;
+        childElemObj[childElem[i].name] = childElem[i].container;
+        childElemArray.append(childElemObj);
+    }
     return childElemArray;
 }
 ///导出收集动画
@@ -525,8 +526,8 @@ QJsonObject ElemPropertyData::exportCollAnim() const
         QStringList dataKeys = data.keys();
         for(int j=0;j<dataKeys.size();j++)
         {
-            QString dataKey = dataKeys[i];
-            QString objKey = DataManager::getInstance()->getTempId("collAnimTemp",dataKey);
+            QString dataKey = dataKeys[j];
+            QString objKey = DataManager::getInstance()->getTempFieldId("collAnimTemp",collAnim[i].type,dataKey);
             collAnimObj[objKey] = data[dataKey];
         }
         obj[collAnim[i].name] = collAnimObj;

+ 1 - 1
readJsonSrc.cpp → datacpp/readJsonSrc.cpp

@@ -1,4 +1,4 @@
-#include "readJsonSrc.h"
+#include "datahpp/readJsonSrc.h"
 #include <QJsonDocument>
 #include <QJsonObject>
 #include <QFile>

+ 11 - 5
dataManager.h → datahpp/dataManager.h

@@ -1,12 +1,14 @@
 #ifndef DATAMANAGER_H
 #define DATAMANAGER_H
-#include "elemPropertyData.h"
-#include "readJsonSrc.h"
+#include "datahpp/elemPropertyData.h"
+#include "datahpp/readJsonSrc.h"
 
 class DataManager
 {
 public:
     static DataManager* getInstance();
+    //去除文件路径,获取文件名字
+    static QString getFileName(QString filePath);
     //配置模板
     ///获取模板中的fields,key为模板名字,name为模板中的某一选项名
     QVector<ReadJsonSrc::Fields> getTempFields(QString key,QString name);
@@ -28,7 +30,7 @@ public:
     ///修改最大层数
     void changeMaxLayer(QString elem,QString val);
     void changeScore(QString elem,QString val);
-    void changeDropConfig(QString elem,QString val);
+    void changeDropConfig(QString elem,int index);
     void changeIconPath(QString elem,QString iconPath);
     void changeLinkedState(QString elem,int state);
     void changeMoveAwayState(QString elem,int state);
@@ -37,7 +39,7 @@ public:
     QString getPos(QString elem);
     QString getMaxLayer(QString elem);
     QString getScore(QString elem);
-    QString getDropConfig(QString elem);
+    int getDropConfig(QString elem);
     QString getIconPath(QString elem);
     bool getLinkedState(QString elem);
     bool getMoveAwayState(QString elem);
@@ -105,10 +107,11 @@ public:
     void write(QJsonObject &json) const;
 
     //导出数据
-    bool exportData();
+    bool exportData(QString fileName);
     QString getExportMessage();
     static QVector<QVector<int>> getGridPos(QString str);
     QString getTempId(QString key,QString name);
+    QString getTempFieldId(QString key,QString name,QString fieldName);
 
 private:
     DataManager();
@@ -117,7 +120,10 @@ private:
     QMap<QString,ElemPropertyData*> elements;
     ReadJsonSrc* jsonTemp;
     QString exportMessage;
+    ///检查当前数据导出是否合法
     bool exportIsValid();
+    ///寻找标识值是否重复出现
+    bool findElemLabelName(QString elem,QString labelName);
 };
 
 #endif // DATAMANAGER_H

+ 2 - 1
elemPropertyData.h → datahpp/elemPropertyData.h

@@ -8,13 +8,14 @@
 class ElemPropertyData
 {
 public:
+    enum class DROPOPT{BYSTATE,DROPABLE,NOTDROPABLE};
     ElemPropertyData();
     //基础属性
     QString labelName;
     QString pos;
     QString maxLayer;
     QString score;
-    QString dropConfig;
+    DROPOPT dropConfig;
     QString iconPath;
     bool canBeLinked;
     bool canMoveAway;

+ 0 - 0
readJsonSrc.h → datahpp/readJsonSrc.h


+ 26 - 22
mainwindow.cpp

@@ -16,7 +16,7 @@
 #include <QUrl>
 #include <QFormLayout>
 #include <QDialogButtonBox>
-#include "dataManager.h"
+#include "datahpp/dataManager.h"
 
 MainWindow::MainWindow(QWidget *parent)
     : QMainWindow(parent)
@@ -65,7 +65,7 @@ void MainWindow::setUi(QString elem)
     ui->lineEdit_pos->setText(DataManager::getInstance()->getPos(elem));
     ui->lineEdit_maxlayer->setText(DataManager::getInstance()->getMaxLayer(elem));
     ui->lineEdit_score->setText(DataManager::getInstance()->getScore(elem));
-    ui->comboBox_dropConfig->setCurrentIndex(ui->comboBox_dropConfig->findText(DataManager::getInstance()->getDropConfig(elem)));
+    ui->comboBox_dropConfig->setCurrentIndex(DataManager::getInstance()->getDropConfig(elem));
     if(DataManager::getInstance()->getLinkedState(elem)) ui->checkBox_canBeLinked->setCheckState(Qt::Checked);
     else ui->checkBox_canBeLinked->setCheckState(Qt::Unchecked);
     if(DataManager::getInstance()->getMoveAwayState(elem)) ui->checkBox_canMoveAway->setCheckState(Qt::Checked);
@@ -84,9 +84,9 @@ void MainWindow::on_pushButton_chooseFile_clicked()
     //如果未选中列表中的按钮,无法触发此按钮
     if(ui->listWidget_elem->currentItem() == nullptr) return;
     QString elem = ui->listWidget_elem->currentItem()->text();
-    QString file_name = QFileDialog::getOpenFileName(this,"Open a file",QDir::homePath());
+    QString file_name = QFileDialog::getOpenFileName(this,"选择文件",QDir::homePath());
     if(file_name == nullptr){
-        file_name = elements[elem]->iconPath;
+        return;
     }
     QPixmap pix(file_name);
     ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
@@ -210,22 +210,6 @@ void MainWindow::on_tabWidget_currentChanged(int index)
     }
 }
 
-///掉落设定值改变
-void MainWindow::on_comboBox_dropConfig_currentTextChanged(const QString &arg1)
-{
-    if(ui->listWidget_elem->currentItem() == nullptr) return;
-    QString key = ui->listWidget_elem->currentItem()->text();
-    DataManager::getInstance()->changeDropConfig(key,arg1);
-    if(arg1 == "可掉落"){
-        DataManager::getInstance()->updateAllDropState(key,true);
-        statusConfigUi->updateDropBox(true);
-    }
-    else if(arg1 == "不可掉落"){
-        DataManager::getInstance()->updateAllDropState(key,false);
-        statusConfigUi->updateDropBox(false);
-    }
-}
-
 ///可连接状态改变
 void MainWindow::on_checkBox_canBeLinked_stateChanged(int arg1)
 {
@@ -245,10 +229,30 @@ void MainWindow::on_checkBox_canMoveAway_stateChanged(int arg1)
 ///导出配置按钮按下
 void MainWindow::on_pushButton_exportConfig_clicked()
 {
-    if(!DataManager::getInstance()->exportData()){
+    QString fileName = QFileDialog::getSaveFileName(this,"导出配置","./exportConfig.json",tr("JSON files(*.json)"));
+    if(fileName.isEmpty()) return;
+    if(!DataManager::getInstance()->exportData(fileName)){
         QMessageBox::critical(this,"错误",DataManager::getInstance()->getExportMessage());
         return;
     }
-    else QMessageBox::information(this,"提示","成功导出至桌面!");
+    else QMessageBox::information(this,"提示","导出成功!");
+}
+
+///掉落设定值改变
+void MainWindow::on_comboBox_dropConfig_currentIndexChanged(int index)
+{
+    if(ui->listWidget_elem->currentItem() == nullptr) return;
+    QString key = ui->listWidget_elem->currentItem()->text();
+    DataManager::getInstance()->changeDropConfig(key,index);
+    //选中可掉落
+    if(index == 1){
+        DataManager::getInstance()->updateAllDropState(key,true);
+        statusConfigUi->updateDropBox(true);
+    }
+    //选中不可掉落
+    else if(index == 2){
+        DataManager::getInstance()->updateAllDropState(key,false);
+        statusConfigUi->updateDropBox(false);
+    }
 }
 

+ 4 - 5
mainwindow.h

@@ -4,8 +4,8 @@
 #include <QMainWindow>
 #include <QListWidgetItem>
 #include <QTableWidgetItem>
-#include "elemPropertyData.h"
-#include "readJsonSrc.h"
+#include "datahpp/elemPropertyData.h"
+#include "datahpp/readJsonSrc.h"
 #include "statusEffectAnim.h"
 #include "collAnim.h"
 #include "statusConfig.h"
@@ -50,17 +50,16 @@ private slots:
 
     void on_tabWidget_currentChanged(int index);
 
-    void on_comboBox_dropConfig_currentTextChanged(const QString &arg1);
-
     void on_checkBox_canBeLinked_stateChanged(int arg1);
 
     void on_checkBox_canMoveAway_stateChanged(int arg1);
 
     void on_pushButton_exportConfig_clicked();
 
+    void on_comboBox_dropConfig_currentIndexChanged(int index);
+
 private:
     Ui::MainWindow *ui;
-    QMap<QString,ElemPropertyData*> elements;
     void setUi(QString elem);
     void updateTempRelatedUi();
     //四个ui子界面

+ 202 - 95
mainwindow.ui

@@ -14,52 +14,83 @@
    <string>MainWindow</string>
   </property>
   <widget class="QWidget" name="centralwidget">
-   <layout class="QHBoxLayout" name="horizontalLayout_3">
+   <layout class="QHBoxLayout" name="horizontalLayout_9">
     <item>
-     <layout class="QVBoxLayout" name="verticalLayout_2">
+     <layout class="QHBoxLayout" name="horizontalLayout_8" stretch="1,6">
       <item>
-       <widget class="QListWidget" name="listWidget_elem"/>
-      </item>
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_12">
+       <layout class="QVBoxLayout" name="verticalLayout_2">
+        <property name="sizeConstraint">
+         <enum>QLayout::SetDefaultConstraint</enum>
+        </property>
+        <property name="rightMargin">
+         <number>0</number>
+        </property>
         <item>
-         <widget class="QPushButton" name="pushButton_addElem">
-          <property name="text">
-           <string>添加</string>
+         <widget class="QListWidget" name="listWidget_elem">
+          <property name="maximumSize">
+           <size>
+            <width>16777215</width>
+            <height>16777215</height>
+           </size>
           </property>
          </widget>
         </item>
         <item>
-         <widget class="QPushButton" name="pushButton_delElem">
+         <layout class="QHBoxLayout" name="horizontalLayout_12">
+          <item>
+           <widget class="QPushButton" name="pushButton_addElem">
+            <property name="maximumSize">
+             <size>
+              <width>16777215</width>
+              <height>16777215</height>
+             </size>
+            </property>
+            <property name="text">
+             <string>添加</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QPushButton" name="pushButton_delElem">
+            <property name="maximumSize">
+             <size>
+              <width>16777215</width>
+              <height>16777215</height>
+             </size>
+            </property>
+            <property name="text">
+             <string>删除</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+        <item>
+         <widget class="QPushButton" name="pushButton_exportConfig">
+          <property name="maximumSize">
+           <size>
+            <width>16777215</width>
+            <height>16777215</height>
+           </size>
+          </property>
           <property name="text">
-           <string>删除</string>
+           <string>  导出配置</string>
           </property>
          </widget>
         </item>
        </layout>
       </item>
       <item>
-       <widget class="QPushButton" name="pushButton_exportConfig">
-        <property name="text">
-         <string>  导出配置</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </item>
-    <item>
-     <layout class="QVBoxLayout" name="verticalLayout_5">
-      <item>
-       <widget class="QLabel" name="label_3">
-        <property name="text">
-         <string>基础属性</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_2">
+       <layout class="QVBoxLayout" name="verticalLayout_5">
         <item>
-         <layout class="QHBoxLayout" name="horizontalLayout">
+         <widget class="QLabel" name="label_3">
+          <property name="text">
+           <string>基础属性</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <layout class="QHBoxLayout" name="horizontalLayout_7">
           <item>
            <layout class="QVBoxLayout" name="verticalLayout">
             <item>
@@ -102,108 +133,184 @@
           <item>
            <layout class="QVBoxLayout" name="verticalLayout_4">
             <item>
-             <widget class="QLineEdit" name="lineEdit_name"/>
+             <layout class="QHBoxLayout" name="horizontalLayout_2">
+              <item>
+               <widget class="QLineEdit" name="lineEdit_name"/>
+              </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="QLineEdit" name="lineEdit_pos"/>
+             <layout class="QHBoxLayout" name="horizontalLayout">
+              <item>
+               <widget class="QLineEdit" name="lineEdit_pos"/>
+              </item>
+              <item>
+               <widget class="QLabel" name="label">
+                <property name="styleSheet">
+                 <string notr="true">&lt;font color=red&gt;&lt;/font&gt;</string>
+                </property>
+                <property name="text">
+                 <string>&lt;font color=red&gt;格式:0:0,0:1,1:0,1:1</string>
+                </property>
+               </widget>
+              </item>
+             </layout>
             </item>
             <item>
-             <widget class="QLineEdit" name="lineEdit_maxlayer"/>
+             <layout class="QHBoxLayout" name="horizontalLayout_3">
+              <item>
+               <widget class="QLineEdit" name="lineEdit_maxlayer"/>
+              </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>
-             <widget class="QLineEdit" name="lineEdit_score"/>
+             <layout class="QHBoxLayout" name="horizontalLayout_4">
+              <item>
+               <widget class="QLineEdit" name="lineEdit_score"/>
+              </item>
+              <item>
+               <spacer name="horizontalSpacer_4">
+                <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="QComboBox" name="comboBox_dropConfig"/>
+             <layout class="QHBoxLayout" name="horizontalLayout_5">
+              <item>
+               <widget class="QComboBox" name="comboBox_dropConfig">
+                <property name="minimumSize">
+                 <size>
+                  <width>150</width>
+                  <height>0</height>
+                 </size>
+                </property>
+               </widget>
+              </item>
+              <item>
+               <spacer name="horizontalSpacer_5">
+                <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>
-        </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>
-        <item>
-         <layout class="QVBoxLayout" name="verticalLayout_3">
           <item>
-           <layout class="QHBoxLayout" name="horizontalLayout_6">
+           <layout class="QVBoxLayout" name="verticalLayout_3">
             <item>
-             <widget class="QLabel" name="label_icon">
-              <property name="text">
-               <string>图标:</string>
-              </property>
-             </widget>
+             <layout class="QHBoxLayout" name="horizontalLayout_6">
+              <item>
+               <widget class="QLabel" name="label_icon">
+                <property name="text">
+                 <string>图标:</string>
+                </property>
+               </widget>
+              </item>
+              <item>
+               <widget class="QLabel" name="label_pic">
+                <property name="text">
+                 <string>icon</string>
+                </property>
+               </widget>
+              </item>
+              <item>
+               <widget class="QPushButton" name="pushButton_chooseFile">
+                <property name="text">
+                 <string>选择文件</string>
+                </property>
+               </widget>
+              </item>
+             </layout>
             </item>
             <item>
-             <widget class="QLabel" name="label_pic">
+             <widget class="QCheckBox" name="checkBox_canBeLinked">
               <property name="text">
-               <string>icon</string>
+               <string>可连接</string>
               </property>
              </widget>
             </item>
             <item>
-             <widget class="QPushButton" name="pushButton_chooseFile">
+             <widget class="QCheckBox" name="checkBox_canMoveAway">
               <property name="text">
-               <string>选择文件</string>
+               <string>可挤压</string>
               </property>
              </widget>
             </item>
            </layout>
           </item>
           <item>
-           <widget class="QCheckBox" name="checkBox_canBeLinked">
-            <property name="text">
-             <string>可连接</string>
+           <spacer name="horizontalSpacer_3">
+            <property name="orientation">
+             <enum>Qt::Horizontal</enum>
             </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QCheckBox" name="checkBox_canMoveAway">
-            <property name="text">
-             <string>可挤压</string>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>68</width>
+              <height>78</height>
+             </size>
             </property>
-           </widget>
+           </spacer>
           </item>
          </layout>
         </item>
         <item>
-         <spacer name="horizontalSpacer_3">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
+         <widget class="QTabWidget" name="tabWidget">
+          <property name="tabShape">
+           <enum>QTabWidget::Triangular</enum>
           </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>148</width>
-            <height>68</height>
-           </size>
+          <property name="currentIndex">
+           <number>-1</number>
+          </property>
+          <property name="elideMode">
+           <enum>Qt::ElideRight</enum>
           </property>
-         </spacer>
+         </widget>
         </item>
        </layout>
       </item>
-      <item>
-       <widget class="QTabWidget" name="tabWidget">
-        <property name="tabShape">
-         <enum>QTabWidget::Triangular</enum>
-        </property>
-        <property name="currentIndex">
-         <number>-1</number>
-        </property>
-        <property name="elideMode">
-         <enum>Qt::ElideRight</enum>
-        </property>
-       </widget>
-      </item>
      </layout>
     </item>
    </layout>

+ 3 - 22
pool.cpp

@@ -1,6 +1,6 @@
 #include "pool.h"
 #include "ui_pool.h"
-#include "dataManager.h"
+#include "datahpp/dataManager.h"
 #include "changenamedialog.h"
 #include "resfiledialog.h"
 #include <iostream>
@@ -102,7 +102,7 @@ void Pool::setPoolUi()
         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(DataManager::getFileName(i.res));
         // 此单元格不可编辑
         res->setFlags(res->flags() & ~Qt::ItemIsEditable);
         ui->tableWidget_containerPool->setItem(rowNum,1,res);
@@ -287,7 +287,7 @@ void Pool::on_tableWidget_containerPool_cellDoubleClicked(int row, int column)
         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(DataManager::getFileName(fileName)));
             DataManager::getInstance()->changeContainTable(currentElem,poolIndex,row,1,fileName);
             //加载时间线下拉列表
             for(int i=2;i<=5;i++){
@@ -397,25 +397,6 @@ void Pool::on_comboBox_container_currentTextChanged(const QString &arg1)
     DataManager::getInstance()->changeContainType(currentElem,poolIndex,arg1);
 }
 
-///获取文件名字
-QString Pool::getFileName(QString filePath)
-{
-    if(filePath == "双击添加资源文件") return filePath;
-    int size = filePath.count();
-    int pos = 0;
-    for(int i=size-1;i>=0;i--){
-        if(filePath[i] == '/'){
-            pos = i+1;
-            break;
-        }
-    }
-    QString fileName;
-    for(int i=pos;i<size;i++){
-        fileName.push_back(filePath[i]);
-    }
-    return fileName;
-}
-
 ///更新模板文件相关数据
 void Pool::updateTempRelated()
 {

+ 0 - 2
pool.h

@@ -66,8 +66,6 @@ private:
     QComboBox* createTimelineBox(QString chosenTimeline,QString fileName);
     ///创建一个使用池子下拉选项
     QComboBox* createPoolBox(QString chosenPool);
-    ///将路径名转换成文件名
-    QString getFileName(QString filePath);
 };
 
 #endif // POOL_H

+ 8 - 11
pool.ui

@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>777</width>
-    <height>561</height>
+    <width>1018</width>
+    <height>753</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -15,11 +15,8 @@
   </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="QHBoxLayout" name="horizontalLayout" stretch="1,8">
+     <item>
       <layout class="QVBoxLayout" name="verticalLayout_10">
        <item>
         <layout class="QHBoxLayout" name="horizontalLayout_9">
@@ -67,8 +64,8 @@
         </layout>
        </item>
       </layout>
-     </widget>
-     <widget class="QWidget" name="layoutWidget_2">
+     </item>
+     <item>
       <layout class="QVBoxLayout" name="verticalLayout_9">
        <item>
         <layout class="QHBoxLayout" name="horizontalLayout_29">
@@ -150,8 +147,8 @@
         </layout>
        </item>
       </layout>
-     </widget>
-    </widget>
+     </item>
+    </layout>
    </item>
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout_10">

+ 9 - 3
statusConfig.cpp

@@ -1,6 +1,6 @@
 #include "statusConfig.h"
 #include "ui_statusConfig.h"
-#include "dataManager.h"
+#include "datahpp/dataManager.h"
 #include "actionSettingDialog.h"
 #include "changenamedialog.h"
 #include <iostream>
@@ -13,6 +13,7 @@ StatusConfig::StatusConfig(QWidget *parent) :
     ui->setupUi(this);
     ui->tableWidget_event->setHorizontalHeaderLabels({"事件名称","是否需要颜色一致","状态变化幅度","特效","根据格子数量消除","触发动作","触发动作设置"});
     ui->lineEdit_collectionType->setReadOnly(true);
+    ui->comboBox_collectAnimation->setDisabled(true);
 }
 
 StatusConfig::~StatusConfig()
@@ -36,7 +37,7 @@ QComboBox* StatusConfig::createBox(QString choice,BoxType boxType)
     }
     connect(box,SIGNAL(currentTextChanged(QString)),this,SLOT(onEventBoxTextChanged(QString)));
     int index = box->findText(choice);
-    if(index == -1)index = 0;
+    if(index == -1) index = 0;
     box->setCurrentIndex(index);
     return box;
 }
@@ -217,12 +218,15 @@ void StatusConfig::setStatusUi()
     if(statusData.needCollect){
         ui->checkBox_needCollect->setCheckState(Qt::Checked);
         ui->lineEdit_collectionType->setReadOnly(false);
+        ui->comboBox_collectAnimation->setDisabled(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);
+        ui->comboBox_collectAnimation->setDisabled(true);
+        ui->comboBox_collectAnimation->setCurrentIndex(0);
     }
     //事件配置
     int rowNum = ui->tableWidget_event->rowCount();
@@ -238,7 +242,7 @@ void StatusConfig::setStatusUi()
         //是否需要颜色一致
         ui->tableWidget_event->setCellWidget(rowNum,1,createCheckBox(i.consisColor));
         //变化幅度
-        ui->tableWidget_event->setItem(rowNum,2,new QTableWidgetItem(i.changeMagnitude));
+        ui->tableWidget_event->setItem(rowNum,2,new QTableWidgetItem(QString::number(i.changeMagnitude)));
         //特效
         ui->tableWidget_event->setCellWidget(rowNum,3,createBox(i.specialEffect,BoxType::Effect));
         //根据格子数量消除
@@ -343,9 +347,11 @@ void StatusConfig::on_checkBox_needCollect_stateChanged(int arg1)
     DataManager::getInstance()->setFundCheckBox(currentElem,index,DataManager::CheckType::NeedColl,arg1);
     if(arg1){
         ui->lineEdit_collectionType->setReadOnly(false);
+        ui->comboBox_collectAnimation->setDisabled(false);
     }
     else{
         ui->lineEdit_collectionType->setReadOnly(true);
+        ui->comboBox_collectAnimation->setDisabled(true);
     }
 }
 

+ 1 - 1
statusConfig.h

@@ -1,7 +1,7 @@
 #ifndef STATUSCONFIG_H
 #define STATUSCONFIG_H
 
-#include "elemPropertyData.h"
+#include "datahpp/elemPropertyData.h"
 #include <QWidget>
 #include <QComboBox>
 #include <QCheckBox>

+ 7 - 10
statusConfig.ui

@@ -13,13 +13,10 @@
   <property name="windowTitle">
    <string>Form</string>
   </property>
-  <layout class="QHBoxLayout" name="horizontalLayout">
+  <layout class="QHBoxLayout" name="horizontalLayout_2">
    <item>
-    <widget class="QSplitter" name="splitter">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <widget class="QWidget" name="layoutWidget">
+    <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,8">
+     <item>
       <layout class="QVBoxLayout" name="verticalLayout_13">
        <item>
         <widget class="QListWidget" name="listWidget_status"/>
@@ -50,8 +47,8 @@
         </widget>
        </item>
       </layout>
-     </widget>
-     <widget class="QWidget" name="layoutWidget_2">
+     </item>
+     <item>
       <layout class="QVBoxLayout" name="verticalLayout_15">
        <item>
         <layout class="QVBoxLayout" name="verticalLayout_5">
@@ -267,8 +264,8 @@
         </layout>
        </item>
       </layout>
-     </widget>
-    </widget>
+     </item>
+    </layout>
    </item>
   </layout>
  </widget>

+ 3 - 21
statusEffectAnim.cpp

@@ -1,6 +1,6 @@
 #include "statusEffectAnim.h"
 #include "ui_statusEffectAnim.h"
-#include "dataManager.h"
+#include "datahpp/dataManager.h"
 #include "resfiledialog.h"
 #include <iostream>
 #include <QMessageBox>
@@ -19,24 +19,6 @@ StatusEffectAnim::~StatusEffectAnim()
     delete ui;
 }
 
-QString StatusEffectAnim::getFileName(QString filePath)
-{
-    if(filePath == "双击添加资源文件") return filePath;
-    int size = filePath.count();
-    int pos = 0;
-    for(int i=size-1;i>=0;i--){
-        if(filePath[i] == '/'){
-            pos = i+1;
-            break;
-        }
-    }
-    QString fileName;
-    for(int i=pos;i<size;i++){
-        fileName.push_back(filePath[i]);
-    }
-    return fileName;
-}
-
 QComboBox* StatusEffectAnim::createBox(QString choice,QStringList list)
 {
     QComboBox* box = new QComboBox;
@@ -83,7 +65,7 @@ void StatusEffectAnim::setUi(QString elem)
         int rowNum = ui->tableWidget_animation->rowCount();
         ui->tableWidget_animation->insertRow(rowNum);
         ui->tableWidget_animation->setItem(rowNum,0,new QTableWidgetItem(i.name));
-        QTableWidgetItem* res = new QTableWidgetItem(getFileName(i.res));
+        QTableWidgetItem* res = new QTableWidgetItem(DataManager::getFileName(i.res));
         // 此单元格不可编辑
         res->setFlags(res->flags() & ~Qt::ItemIsEditable);
         ui->tableWidget_animation->setItem(rowNum,1,res);
@@ -170,7 +152,7 @@ void StatusEffectAnim::on_tableWidget_animation_cellDoubleClicked(int row, int c
         res.exec();
         QString fileName = res.getResName();
         if(!fileName.isEmpty()){
-            QTableWidgetItem* res = new QTableWidgetItem(getFileName(fileName));
+            QTableWidgetItem* res = new QTableWidgetItem(DataManager::getFileName(fileName));
             // 此单元格不可编辑
             res->setFlags(res->flags() & ~Qt::ItemIsEditable);
             ui->tableWidget_animation->setItem(row,1,res);

+ 1 - 3
statusEffectAnim.h

@@ -1,7 +1,7 @@
 #ifndef STATUSEFFECTANIM_H
 #define STATUSEFFECTANIM_H
 
-#include "elemPropertyData.h"
+#include "datahpp/elemPropertyData.h"
 #include <QWidget>
 #include <QComboBox>
 #include <QTableWidgetItem>
@@ -18,8 +18,6 @@ public:
     explicit StatusEffectAnim(QWidget *parent = nullptr);
     ~StatusEffectAnim();
     void setUi(QString elem);
-    ///将路径名转换成文件名
-    QString getFileName(QString filePath);
 
 private slots:
     void on_pushButton_addAnimation_clicked();