statusEffectAnim.cpp 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. #include "statusEffectAnim.h"
  2. #include "ui_statusEffectAnim.h"
  3. #include "datahpp/dataManager.h"
  4. #include "resfiledialog.h"
  5. #include <iostream>
  6. #include <QMessageBox>
  7. StatusEffectAnim::StatusEffectAnim(QWidget *parent) :
  8. QWidget(parent),
  9. ui(new Ui::StatusEffectAnim)
  10. {
  11. ui->setupUi(this);
  12. this->setAcceptDrops(true);
  13. ui->tableWidget_animation->setHorizontalHeaderLabels({"名称","资源","时间线","z-Order"});
  14. }
  15. StatusEffectAnim::~StatusEffectAnim()
  16. {
  17. delete ui;
  18. }
  19. QComboBox* StatusEffectAnim::createBox(QString choice,QStringList list)
  20. {
  21. QComboBox* box = new QComboBox;
  22. box->addItem("尚未选择");
  23. box->addItems(list);
  24. int index = box->findText(choice);
  25. if(index == -1) index = 0;
  26. box->setCurrentIndex(index);
  27. return box;
  28. }
  29. QComboBox* StatusEffectAnim::createTimelineBox(QString chosenTimeline,QString fileName)
  30. {
  31. QComboBox* timeLine = new QComboBox;
  32. if(fileName == "双击添加资源文件") return timeLine;
  33. QStringList list = DataManager::getInstance()->getTimelineList(currentElem,fileName);
  34. timeLine = createBox(chosenTimeline,list);
  35. connect(timeLine,SIGNAL(currentTextChanged(QString)),this,SLOT(onTimelineTextChanged(QString)));
  36. return timeLine;
  37. }
  38. ///动画区时间线数据发生改变
  39. void StatusEffectAnim::onTimelineTextChanged(const QString &arg1)
  40. {
  41. //获取时间线列表所在位置
  42. std::cout<<"current timeline is:"<<qPrintable(arg1)<<std::endl;
  43. QComboBox *timeline = dynamic_cast<QComboBox*>(this->sender());
  44. int x = timeline->frameGeometry().x();
  45. int y = timeline->frameGeometry().y();
  46. QModelIndex index = ui->tableWidget_animation->indexAt(QPoint(x,y));
  47. int row = index.row();
  48. //修改数据
  49. DataManager::getInstance()->changeAnimTable(currentElem,arg1,row,2);
  50. }
  51. void StatusEffectAnim::setUi(QString elem)
  52. {
  53. currentElem = elem;
  54. int rowCnt = ui->tableWidget_animation->rowCount();
  55. for(int i=0;i<rowCnt;i++){
  56. ui->tableWidget_animation->removeRow(0);
  57. }
  58. for(const auto &i:DataManager::getInstance()->getAnimVec(elem)){
  59. int rowNum = ui->tableWidget_animation->rowCount();
  60. ui->tableWidget_animation->insertRow(rowNum);
  61. ui->tableWidget_animation->setItem(rowNum,0,new QTableWidgetItem(i.name));
  62. QTableWidgetItem* res = new QTableWidgetItem(DataManager::getFileName(i.res));
  63. // 此单元格不可编辑
  64. res->setFlags(res->flags() & ~Qt::ItemIsEditable);
  65. ui->tableWidget_animation->setItem(rowNum,1,res);
  66. //设置时间线
  67. QComboBox* timeline = createTimelineBox(i.timeline,i.res);
  68. ui->tableWidget_animation->setCellWidget(rowNum,2,timeline);
  69. ui->tableWidget_animation->setItem(rowNum,3,new QTableWidgetItem(i.zOrder));
  70. }
  71. }
  72. void StatusEffectAnim::on_pushButton_addAnimation_clicked()
  73. {
  74. int rowNum = ui->tableWidget_animation->rowCount();
  75. ui->tableWidget_animation->insertRow(rowNum);
  76. QString animName = "anim";
  77. int id = 1;
  78. while(1){
  79. if(!DataManager::getInstance()->existAnim(currentElem,animName)){
  80. break;
  81. }
  82. animName = "anim" + QString::number(id++);
  83. }
  84. ui->tableWidget_animation->setItem(rowNum,0,new QTableWidgetItem(animName));
  85. QTableWidgetItem* res = new QTableWidgetItem("双击添加资源文件");
  86. // 此单元格不可编辑
  87. res->setFlags(res->flags() & ~Qt::ItemIsEditable);
  88. ui->tableWidget_animation->setItem(rowNum,1,res);
  89. ui->tableWidget_animation->setCellWidget(rowNum,2,createBox("尚未选择",{}));
  90. ui->tableWidget_animation->setItem(rowNum,3,new QTableWidgetItem("0"));
  91. DataManager::getInstance()->addAnim(currentElem,animName);
  92. }
  93. void StatusEffectAnim::on_pushButton_delAnimation_clicked()
  94. {
  95. if(ui->tableWidget_animation->currentRow() == -1) return;
  96. QMessageBox::StandardButton reply = QMessageBox::question(this,"删除动画","确定要删除此动画吗?");
  97. if(reply == QMessageBox::Yes){
  98. int curRow = ui->tableWidget_animation->currentRow();
  99. QString animName = ui->tableWidget_animation->item(curRow,0)->text();
  100. DataManager::getInstance()->delAnim(currentElem,curRow);
  101. ui->tableWidget_animation->removeRow(curRow);
  102. }
  103. }
  104. void StatusEffectAnim::on_tableWidget_animation_itemChanged(QTableWidgetItem *item)
  105. {
  106. if(!animTableItemChanged) return;
  107. animTableItemChanged = false;
  108. int column = item->column();
  109. int row = item->row();
  110. QVector<ElemPropertyData::StatusEffect> animVec = DataManager::getInstance()->getAnimVec(currentElem);
  111. if(column == 0){
  112. QString newName = item->text();
  113. if(DataManager::getInstance()->existAnim(currentElem,newName)){
  114. QMessageBox::critical(this,"警告","该动画名已存在!");
  115. ui->tableWidget_animation->item(row,0)->setText(animVec[row].name);
  116. return;
  117. }
  118. std::cout<<"名字发生改变,新名字:"<<qPrintable(newName)<<std::endl;
  119. DataManager::getInstance()->changeAnimTable(currentElem,newName,row,0);
  120. }
  121. else if(column == 3){
  122. QString nZOrder = item->text();
  123. bool ok;double a = nZOrder.toDouble(&ok);
  124. int zOrder = nZOrder.toInt();
  125. if(!ok || zOrder<0 || zOrder>100000){
  126. QMessageBox::critical(this,"警告","z-Order值超出范围!");
  127. ui->tableWidget_animation->item(row,3)->setText(animVec[row].zOrder);
  128. return;
  129. }
  130. std::cout<<"z-Order值发生改变,新值为:"<<zOrder<<std::endl;
  131. DataManager::getInstance()->changeAnimTable(currentElem,nZOrder,row,3);
  132. }
  133. }
  134. //替换资源文件
  135. void StatusEffectAnim::on_tableWidget_animation_cellDoubleClicked(int row, int column)
  136. {
  137. //表格内容修改flag
  138. animTableItemChanged = true;
  139. if(column == 1){
  140. ResFileDialog res;
  141. res.setModal(true);
  142. res.exec();
  143. QString fileName = res.getResName();
  144. if(!fileName.isEmpty()){
  145. QTableWidgetItem* res = new QTableWidgetItem(DataManager::getFileName(fileName));
  146. // 此单元格不可编辑
  147. res->setFlags(res->flags() & ~Qt::ItemIsEditable);
  148. ui->tableWidget_animation->setItem(row,1,res);
  149. QComboBox* timeLine = createTimelineBox("尚未选择",fileName);
  150. ui->tableWidget_animation->setCellWidget(row,2,timeLine);
  151. //保存当前数据
  152. DataManager::getInstance()->changeAnimTable(currentElem,fileName,row,1);
  153. }
  154. }
  155. }