浏览代码

修复导出bug,修改文件拖拽界面,增加复制功能

Menglan_Luo 2 年之前
父节点
当前提交
8f45b7920f
共有 18 个文件被更改,包括 198 次插入43 次删除
  1. 40 4
      datacpp/dataManager.cpp
  2. 12 13
      datacpp/elemPropertyData.cpp
  3. 3 0
      datahpp/dataManager.h
  4. 6 0
      mainwindow.cpp
  5. 2 0
      mainwindow.h
  6. 7 6
      mainwindow.ui
  7. 30 0
      pool.cpp
  8. 2 0
      pool.h
  9. 12 5
      pool.ui
  10. 4 3
      resfiledialog.cpp
  11. 1 0
      resfiledialog.h
  12. 5 5
      resfiledialog.ui
  13. 19 0
      statusConfig.cpp
  14. 2 0
      statusConfig.h
  15. 13 6
      statusConfig.ui
  16. 30 0
      statusEffectAnim.cpp
  17. 2 0
      statusEffectAnim.h
  18. 8 1
      statusEffectAnim.ui

+ 40 - 4
datacpp/dataManager.cpp

@@ -209,6 +209,15 @@ void DataManager::changeAnimTable(QString elem, QString newData, int row, int co
     else if (column == 2) elements[elem]->statusEffect[row].timeline = newData;
     else if (column == 3) elements[elem]->statusEffect[row].zOrder = newData;
 }
+void DataManager::copyAnim(QString elem, QString animName, int copyIndex)
+{
+    ElemPropertyData::StatusEffect anim(animName);
+    ElemPropertyData::StatusEffect copyData = elements[elem]->statusEffect[copyIndex];
+    anim.res = copyData.res;
+    anim.timeline = copyData.timeline;
+    anim.zOrder = copyData.zOrder;
+    elements[elem]->statusEffect.push_back(anim);
+}
 
 //收集动画
 QString DataManager::getAnimType(QString elem, int index)
@@ -324,6 +333,22 @@ void DataManager::updateAllDropState(QString elem, bool state)
         elements[elem]->statusConfig[i].dropable = state;
     }
 }
+void DataManager::copyStatus(QString elem, QString statusVal, int copyIndex)
+{
+    ElemPropertyData::StatusConfig status(statusVal);
+    ElemPropertyData::StatusConfig copyData = elements[elem]->statusConfig[copyIndex];
+    status.initAnim = copyData.initAnim;
+    status.clickAnim = copyData.clickAnim;
+    status.multiHit = copyData.multiHit;
+    status.dropable = copyData.dropable;
+    if(copyData.needCollect){
+        status.needCollect = true;
+        status.collTargetType = copyData.collTargetType;
+        status.collAnim = copyData.collAnim;
+    }
+    status.eventConfig = copyData.eventConfig;
+    elements[elem]->statusConfig.push_back(status);
+}
 
 //容器池
 ElemPropertyData::ContainerConfig DataManager::getContainData(QString elem,int index)
@@ -353,6 +378,9 @@ void DataManager::addPool(QString elem, QString poolName)
 }
 void DataManager::delPool(QString elem, int index)
 {
+    std::cout<<"current pool index:"<<index<<std::endl;
+    std::cout<<"pool size:"<<elements[elem]->container.size()<<std::endl;
+    std::cout<<qPrintable(elements[elem]->container[index].poolName)<<std::endl;
     elements[elem]->container.remove(index);
 }
 void DataManager::changePoolName(QString elem, int index, QString newName)
@@ -377,6 +405,18 @@ void DataManager::changeContainType(QString elem, int poolIndex, QString poolTyp
 {
     elements[elem]->container[poolIndex].type = poolType;
 }
+void DataManager::copyKey(QString elem, int poolIndex, QString keyName, int copyIndex)
+{
+    ElemPropertyData::ContainTable copyData = elements[elem]->container[poolIndex].table[copyIndex];
+    ElemPropertyData::ContainTable key(keyName);
+    key.clickTimeline = copyData.clickTimeline;
+    key.effectTimeline = copyData.effectTimeline;
+    key.initTimeline = copyData.initTimeline;
+    key.res = copyData.res;
+    key.vanishTimeline = copyData.vanishTimeline;
+    key.zOrder = copyData.zOrder;
+    elements[elem]->container[poolIndex].table.push_back(key);
+}
 
 //子元素
 QVector<ElemPropertyData::ChildElem> DataManager::getChildElemTable(QString elem)
@@ -559,10 +599,6 @@ bool DataManager::exportIsValid()
                     exportMessage = elemMessage+"\n状态"+statusVec[j].statusValue+"收集的目标类型必须是大于0的数字";
                     return false;
                 }
-                if(statusVec[j].collAnim == "尚未选择"){
-                    exportMessage = elemMessage+"\n状态"+statusVec[j].statusValue+"未选择收集动画";
-                    return false;
-                }
             }
             //事件配置
             QVector<ElemPropertyData::EventConfig> eventVec = statusVec[j].eventConfig;

+ 12 - 13
datacpp/elemPropertyData.cpp

@@ -450,7 +450,6 @@ QJsonObject ElemPropertyData::exportAnim() const
          statusObj["playAnim"] = statusConfig[i].initAnim;
          statusObj["tapAnim"] = statusConfig[i].clickAnim;
          statusObj["supportMutliBeats"] = statusConfig[i].multiHit;
-         //TODO:确定可掉落的key
          statusObj["canDrop"] = statusConfig[i].dropable;
          //收集
         if(statusConfig[i].needCollect){
@@ -465,11 +464,11 @@ QJsonObject ElemPropertyData::exportAnim() const
         for(int j=0;j<eventVec.size();j++)
         {
             QJsonObject obj;
-            obj["needColor"] = eventVec[i].consisColor;
-            obj["dataDec"] = eventVec[i].changeMagnitude;
-            obj["efx"] = eventVec[i].specialEffect;
-            obj["isByGridCnt"] = eventVec[i].elimATLattices;
-            eventObj.insert(DataManager::getInstance()->getTempId("eventTemp",eventVec[i].name),obj);
+            obj["needColor"] = eventVec[j].consisColor;
+            obj["dataDec"] = eventVec[j].changeMagnitude;
+            obj["efx"] = eventVec[j].specialEffect;
+            obj["isByGridCnt"] = eventVec[j].elimATLattices;
+            eventObj.insert(DataManager::getInstance()->getTempId("eventTemp",eventVec[j].name),obj);
         }
         statusObj["eventHandlers"] = eventObj;
         json.insert(statusConfig[i].statusValue,statusObj);
@@ -489,13 +488,13 @@ QJsonObject ElemPropertyData::exportAnim() const
          for(int j=0;j<table.size();j++)
          {
              QJsonObject keyObj;
-             keyObj["res"] = DataManager::getFileName(table[i].res);
-             keyObj["init"] = table[i].initTimeline;
-             keyObj["tap"] = table[i].clickTimeline;
-             keyObj["affect"] = table[i].effectTimeline;
-             keyObj["beat"] = table[i].vanishTimeline;
-             keyObj["localZOrder"] = table[i].zOrder.toInt();
-             tableObj[table[i].key] = keyObj;
+             keyObj["res"] = DataManager::getFileName(table[j].res);
+             keyObj["init"] = table[j].initTimeline;
+             keyObj["tap"] = table[j].clickTimeline;
+             keyObj["affect"] = table[j].effectTimeline;
+             keyObj["beat"] = table[j].vanishTimeline;
+             keyObj["localZOrder"] = table[j].zOrder.toInt();
+             tableObj[table[j].key] = keyObj;
          }
          poolObj["candidates"] = tableObj;
          obj.insert(container[i].poolName,poolObj);

+ 3 - 0
datahpp/dataManager.h

@@ -51,6 +51,7 @@ public:
     void addAnim(QString elem,QString animName);
     void delAnim(QString elem,int index);
     void changeAnimTable(QString elem,QString newData,int row,int column);
+    void copyAnim(QString elem,QString animName,int copyIndex);
 
     //收集动画
     QString getAnimType(QString elem,int index);
@@ -80,6 +81,7 @@ public:
     void addEvent(QString elem,int index);
     void delEvent(QString elem,int statusIndex,int row);
     void updateAllDropState(QString elem,bool state);
+    void copyStatus(QString elem,QString statusVal,int copyIndex);
 
     //容器池
     ElemPropertyData::ContainerConfig getContainData(QString elem,int index);
@@ -92,6 +94,7 @@ public:
     void addKey(QString elem,int poolIndex,QString keyName);
     void delKey(QString elem,int poolIndex,int row);
     void changeContainType(QString elem,int poolIndex,QString poolType);
+    void copyKey(QString elem,int poolIndex,QString keyName,int copyIndex);
 
     //子元素
     QVector<ElemPropertyData::ChildElem> getChildElemTable(QString elem);

+ 6 - 0
mainwindow.cpp

@@ -261,3 +261,9 @@ void MainWindow::on_comboBox_dropConfig_currentIndexChanged(int index)
     }
 }
 
+///保存数据
+void MainWindow::on_pushButton_savedata_clicked()
+{
+    DataManager::getInstance()->saveData();
+}
+

+ 2 - 0
mainwindow.h

@@ -58,6 +58,8 @@ private slots:
 
     void on_comboBox_dropConfig_currentIndexChanged(int index);
 
+    void on_pushButton_savedata_clicked();
+
 private:
     Ui::MainWindow *ui;
     void setUi(QString elem);

+ 7 - 6
mainwindow.ui

@@ -19,12 +19,6 @@
      <layout class="QHBoxLayout" name="horizontalLayout_8" stretch="1,6">
       <item>
        <layout class="QVBoxLayout" name="verticalLayout_2">
-        <property name="sizeConstraint">
-         <enum>QLayout::SetDefaultConstraint</enum>
-        </property>
-        <property name="rightMargin">
-         <number>0</number>
-        </property>
         <item>
          <widget class="QListWidget" name="listWidget_elem">
           <property name="maximumSize">
@@ -78,6 +72,13 @@
           </property>
          </widget>
         </item>
+        <item>
+         <widget class="QPushButton" name="pushButton_savedata">
+          <property name="text">
+           <string>保存设置</string>
+          </property>
+         </widget>
+        </item>
        </layout>
       </item>
       <item>

+ 30 - 0
pool.cpp

@@ -414,3 +414,33 @@ void Pool::updateTempRelated()
         ui->comboBox_container->setCurrentIndex(contIndex);
     }
 }
+
+void Pool::on_pushButton_copy_clicked()
+{
+    int poolIndex = ui->listWidget_pool->currentRow();
+    int keyIndex = ui->tableWidget_containerPool->currentRow();
+    if(poolIndex == -1 || keyIndex == -1) return;
+    int rowNum = ui->tableWidget_containerPool->rowCount();
+    ui->tableWidget_containerPool->insertRow(rowNum);
+    QString keyName = "0";
+    int id = 1;
+    while(1){
+        if(!(DataManager::getInstance()->existKey(currentElem,poolIndex,keyName))){
+            break;
+        }
+        keyName = QString::number(id++);
+    }
+    ElemPropertyData::ContainTable copyData = DataManager::getInstance()->getContainData(currentElem,poolIndex).table[keyIndex];
+    ui->tableWidget_containerPool->setItem(rowNum,0,new QTableWidgetItem(keyName));
+    QTableWidgetItem* res = new QTableWidgetItem(DataManager::getFileName(copyData.res));
+    // 此单元格不可编辑
+    res->setFlags(res->flags() & ~Qt::ItemIsEditable);
+    ui->tableWidget_containerPool->setItem(rowNum,1,res);
+    ui->tableWidget_containerPool->setCellWidget(rowNum,2,createTimelineBox(copyData.initTimeline,copyData.res));
+    ui->tableWidget_containerPool->setCellWidget(rowNum,3,createTimelineBox(copyData.clickTimeline,copyData.res));
+    ui->tableWidget_containerPool->setCellWidget(rowNum,4,createTimelineBox(copyData.effectTimeline,copyData.res));
+    ui->tableWidget_containerPool->setCellWidget(rowNum,5,createTimelineBox(copyData.vanishTimeline,copyData.res));
+    ui->tableWidget_containerPool->setItem(rowNum,6,new QTableWidgetItem(copyData.zOrder));
+    DataManager::getInstance()->copyKey(currentElem,poolIndex,keyName,keyIndex);
+}
+

+ 2 - 0
pool.h

@@ -53,6 +53,8 @@ private slots:
 
     void on_comboBox_container_currentTextChanged(const QString &arg1);
 
+    void on_pushButton_copy_clicked();
+
 private:
     Ui::Pool *ui;
     bool isSetUi = false;

+ 12 - 5
pool.ui

@@ -13,9 +13,9 @@
   <property name="windowTitle">
    <string>Form</string>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
+  <layout class="QVBoxLayout" name="verticalLayout_3">
    <item>
-    <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,8">
+    <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="1,8">
      <item>
       <layout class="QVBoxLayout" name="verticalLayout_10">
        <item>
@@ -66,7 +66,7 @@
       </layout>
      </item>
      <item>
-      <layout class="QVBoxLayout" name="verticalLayout_9">
+      <layout class="QVBoxLayout" name="verticalLayout_2">
        <item>
         <layout class="QHBoxLayout" name="horizontalLayout_29">
          <item>
@@ -95,7 +95,7 @@
         </layout>
        </item>
        <item>
-        <layout class="QHBoxLayout" name="horizontalLayout_14">
+        <layout class="QHBoxLayout" name="horizontalLayout">
          <item>
           <widget class="QTableWidget" name="tableWidget_containerPool">
            <property name="rowCount">
@@ -114,7 +114,7 @@
           </widget>
          </item>
          <item>
-          <layout class="QVBoxLayout" name="verticalLayout_8">
+          <layout class="QVBoxLayout" name="verticalLayout">
            <item>
             <widget class="QPushButton" name="pushButton_addKey">
              <property name="text">
@@ -130,6 +130,13 @@
             </widget>
            </item>
            <item>
+            <widget class="QPushButton" name="pushButton_copy">
+             <property name="text">
+              <string>复制</string>
+             </property>
+            </widget>
+           </item>
+           <item>
             <spacer name="verticalSpacer_2">
              <property name="orientation">
               <enum>Qt::Vertical</enum>

+ 4 - 3
resfiledialog.cpp

@@ -12,8 +12,6 @@ ResFileDialog::ResFileDialog(QWidget *parent) :
     ui->setupUi(this);
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText("取消");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText("确定");
-    QPixmap pix("/Users/menglanluo/pic.png");
-    ui->label_newFile->setPixmap(pix.scaled(100,100,Qt::KeepAspectRatio));
     this->setAcceptDrops(true);
     ui->label_newFile->setAcceptDrops(false);
 }
@@ -39,7 +37,6 @@ void ResFileDialog::dropEvent(QDropEvent *event)
         QList<QUrl> urls = mimeData->urls();
         QString urlName = urls.at(0).toLocalFile();
         QString fileName = urlName;
-        //TODO: 去除路径显示
         ui->label_newFile->setText(fileName);
     }
 }
@@ -53,4 +50,8 @@ QString ResFileDialog::getResName()
 {
     return res;
 }
+void ResFileDialog::setResName(QString resName)
+{
+    ui->label_newFile->setText(resName);
+}
 

+ 1 - 0
resfiledialog.h

@@ -15,6 +15,7 @@ public:
     explicit ResFileDialog(QWidget *parent = nullptr);
     ~ResFileDialog();
     QString getResName();
+    void setResName(QString resName);
 
 protected:
     void dragEnterEvent(QDragEnterEvent *event);

+ 5 - 5
resfiledialog.ui

@@ -45,14 +45,14 @@
   <widget class="QLabel" name="label_newFile">
    <property name="geometry">
     <rect>
-     <x>150</x>
-     <y>80</y>
-     <width>141</width>
-     <height>111</height>
+     <x>40</x>
+     <y>100</y>
+     <width>321</width>
+     <height>101</height>
     </rect>
    </property>
    <property name="text">
-    <string>TextLabel</string>
+    <string/>
    </property>
   </widget>
  </widget>

+ 19 - 0
statusConfig.cpp

@@ -457,3 +457,22 @@ void StatusConfig::on_listWidget_status_currentRowChanged(int currentRow)
     setStatusUi();
 }
 
+
+void StatusConfig::on_pushButton_copyStatus_clicked()
+{
+    int curRow = ui->listWidget_status->currentRow();
+    if(curRow == -1) return;
+    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()){
+        DataManager::getInstance()->copyStatus(currentElem,statusName,curRow);
+        ui->listWidget_status->addItem(statusName);
+    }
+}
+

+ 2 - 0
statusConfig.h

@@ -73,6 +73,8 @@ private slots:
 
     void on_listWidget_status_currentRowChanged(int currentRow);
 
+    void on_pushButton_copyStatus_clicked();
+
 private:
     Ui::StatusConfig *ui;
     enum class BoxType{Event,Effect,Action};

+ 13 - 6
statusConfig.ui

@@ -6,23 +6,23 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>1051</width>
-    <height>549</height>
+    <width>1085</width>
+    <height>619</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>Form</string>
   </property>
-  <layout class="QHBoxLayout" name="horizontalLayout_2">
+  <layout class="QVBoxLayout" name="verticalLayout_2">
    <item>
-    <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,8">
+    <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="1,8">
      <item>
-      <layout class="QVBoxLayout" name="verticalLayout_13">
+      <layout class="QVBoxLayout" name="verticalLayout">
        <item>
         <widget class="QListWidget" name="listWidget_status"/>
        </item>
        <item>
-        <layout class="QHBoxLayout" name="horizontalLayout_30">
+        <layout class="QHBoxLayout" name="horizontalLayout">
          <item>
           <widget class="QPushButton" name="pushButton_addStatus">
            <property name="text">
@@ -40,6 +40,13 @@
         </layout>
        </item>
        <item>
+        <widget class="QPushButton" name="pushButton_copyStatus">
+         <property name="text">
+          <string>复制状态</string>
+         </property>
+        </widget>
+       </item>
+       <item>
         <widget class="QPushButton" name="pushButton_genTemp">
          <property name="text">
           <string>生成模板</string>

+ 30 - 0
statusEffectAnim.cpp

@@ -148,6 +148,8 @@ void StatusEffectAnim::on_tableWidget_animation_cellDoubleClicked(int row, int c
     animTableItemChanged = true;
     if(column == 1){
         ResFileDialog res;
+        QString oldRes = DataManager::getInstance()->getAnimVec(currentElem)[row].res;
+        if(oldRes != "双击添加资源文件") res.setResName(oldRes);
         res.setModal(true);
         res.exec();
         QString fileName = res.getResName();
@@ -163,3 +165,31 @@ void StatusEffectAnim::on_tableWidget_animation_cellDoubleClicked(int row, int c
         }
     }
 }
+
+void StatusEffectAnim::on_pushButton_copyAnim_clicked()
+{
+    int curRow = ui->tableWidget_animation->currentRow();
+    if(curRow == -1) return;
+    int rowNum = ui->tableWidget_animation->rowCount();
+    ui->tableWidget_animation->insertRow(rowNum);
+    QString animName = "anim";
+    int id = 1;
+    while(1){
+        if(!DataManager::getInstance()->existAnim(currentElem,animName)){
+            break;
+        }
+        animName = "anim" + QString::number(id++);
+    }
+    DataManager::getInstance()->copyAnim(currentElem,animName,curRow);
+    ElemPropertyData::StatusEffect animData = DataManager::getInstance()->getAnimVec(currentElem)[curRow];
+    ui->tableWidget_animation->setItem(rowNum,0,new QTableWidgetItem(animName));
+    QTableWidgetItem* res = new QTableWidgetItem(DataManager::getFileName(animData.res));
+    // 此单元格不可编辑
+    res->setFlags(res->flags() & ~Qt::ItemIsEditable);
+    ui->tableWidget_animation->setItem(rowNum,1,res);
+    //设置时间线
+    QComboBox* timeline = createTimelineBox(animData.timeline,animData.res);
+    ui->tableWidget_animation->setCellWidget(rowNum,2,timeline);
+    ui->tableWidget_animation->setItem(rowNum,3,new QTableWidgetItem(animData.zOrder));
+}
+

+ 2 - 0
statusEffectAnim.h

@@ -31,6 +31,8 @@ private slots:
 
     void on_tableWidget_animation_cellDoubleClicked(int row, int column);
 
+    void on_pushButton_copyAnim_clicked();
+
 private:
     Ui::StatusEffectAnim *ui;
     QComboBox* createTimelineBox(QString chosenTimeline,QString filename);

+ 8 - 1
statusEffectAnim.ui

@@ -29,7 +29,7 @@
     </widget>
    </item>
    <item>
-    <layout class="QVBoxLayout" name="verticalLayout_4">
+    <layout class="QVBoxLayout" name="verticalLayout">
      <item>
       <widget class="QPushButton" name="pushButton_addAnimation">
        <property name="text">
@@ -45,6 +45,13 @@
       </widget>
      </item>
      <item>
+      <widget class="QPushButton" name="pushButton_copyAnim">
+       <property name="text">
+        <string>复制动画</string>
+       </property>
+      </widget>
+     </item>
+     <item>
       <spacer name="verticalSpacer">
        <property name="orientation">
         <enum>Qt::Vertical</enum>