collAnim.cpp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. #include "collAnim.h"
  2. #include "ui_collAnim.h"
  3. #include "datahpp/dataManager.h"
  4. #include "changenamedialog.h"
  5. #include <QLineEdit>
  6. #include <iostream>
  7. #include <QMessageBox>
  8. #include <QFormLayout>
  9. CollAnim::CollAnim(QWidget *parent) :
  10. QWidget(parent),
  11. ui(new Ui::CollAnim)
  12. {
  13. ui->setupUi(this);
  14. formlayout = new QFormLayout;
  15. ui->widget->setLayout(formlayout);
  16. }
  17. CollAnim::~CollAnim()
  18. {
  19. delete ui;
  20. delete formlayout;
  21. }
  22. void CollAnim::setUi(QString elem)
  23. {
  24. isSetUi = true;
  25. currentElem = elem;
  26. ui->listWidget_collectAnim->clear();
  27. ui->listWidget_collectAnim->addItems(DataManager::getInstance()->getList(elem,DataManager::ListType::CollAnim));
  28. //切换新元素的收集动画界面,尚未选中任何收集动画,清空所有数据及动态界面
  29. int rowCout = formlayout->rowCount();
  30. for(int i=0;i<rowCout;i++) formlayout->removeRow(0);
  31. ui->comboBox_animType->clear();
  32. isSetUi = false;
  33. }
  34. QComboBox* CollAnim::createBox(QString choice,QStringList list)
  35. {
  36. QComboBox* box = new QComboBox;
  37. box->addItem("尚未选择");
  38. box->addItems(list);
  39. int index = box->findText(choice);
  40. if(index == -1) index = 0;
  41. box->setCurrentIndex(index);
  42. return box;
  43. }
  44. ///切换收集动画时设置页面显示
  45. void CollAnim::setCollectAnimUi()
  46. {
  47. int row = ui->listWidget_collectAnim->currentRow();
  48. if(row != -1){
  49. isSetUi = true;
  50. //重置动画类型选项
  51. ui->comboBox_animType->clear();
  52. ui->comboBox_animType->addItem("尚未选择");
  53. ui->comboBox_animType->addItems(DataManager::getInstance()->getList(currentElem,DataManager::ListType::AnimType));
  54. QString type = DataManager::getInstance()->getAnimType(currentElem,row);
  55. int typeIndex = ui->comboBox_animType->findText(type);
  56. if(typeIndex == -1){
  57. typeIndex = 0;
  58. DataManager::getInstance()->setAnimType(currentElem,"尚未选择",row);
  59. }
  60. ui->comboBox_animType->setCurrentIndex(typeIndex);
  61. setCollAnimWidget();
  62. isSetUi = false;
  63. }
  64. }
  65. ///设置收集动画动态界面
  66. void CollAnim::setCollAnimWidget()
  67. {
  68. std::cout<<"设置收集动画动态界面"<<std::endl;
  69. int row = ui->listWidget_collectAnim->currentRow();
  70. if(row == -1) return;
  71. QString animType = ui->comboBox_animType->currentText();
  72. int rowCout = formlayout->rowCount();
  73. for(int i=0;i<rowCout;i++) formlayout->removeRow(0);
  74. if(animType == "尚未选择") return;
  75. QVector<ReadJsonSrc::Fields> fields = DataManager::getInstance()->getTempFields("collAnimTemp",animType);
  76. QMap<QString,QString> data = DataManager::getInstance()->getCollAnimDataMap(currentElem,row);
  77. for(const auto &i:fields){
  78. QString val;
  79. if(i.type == "list"){
  80. QStringList list;
  81. //后期再根据配置模板添加其它列表
  82. if(i.src == "animations"){
  83. list = DataManager::getInstance()->getList(currentElem,DataManager::ListType::Anim);
  84. }
  85. if(data.find(i.name) != data.end()) val = data[i.name];
  86. else val = i.defaultVal;
  87. QComboBox* combo = createBox(val,list);
  88. connect(combo,SIGNAL(currentTextChanged(QString)),this,SLOT(onComboBoxTextChanged(QString)));
  89. formlayout->addRow(i.name,combo);
  90. }
  91. else if(i.type == "input"){
  92. if(data.find(i.name) != data.end()) val = data[i.name];
  93. else val = i.defaultVal;
  94. QLineEdit* edit = new QLineEdit(val);
  95. connect(edit,SIGNAL(editingFinished()),this,SLOT(onLineEditTextChanged()));
  96. formlayout->addRow(i.name,edit);
  97. }
  98. DataManager::getInstance()->setCollAnimDataMapVal(currentElem,row,i.name,val);
  99. }
  100. }
  101. ///收集动画动态界面下拉选项数据变化时
  102. void CollAnim::onComboBoxTextChanged(QString arg)
  103. {
  104. int row = ui->listWidget_collectAnim->currentRow();
  105. if(row == -1) return;
  106. QComboBox *box = dynamic_cast<QComboBox*>(this->sender());
  107. QLabel *label = dynamic_cast<QLabel*>(formlayout->labelForField(box));
  108. std::cout<<qPrintable(label->text())<<": "<<qPrintable(arg)<<std::endl;
  109. DataManager::getInstance()->setCollAnimDataMapVal(currentElem,row,label->text(),arg);
  110. }
  111. ///收集动画动态界面单行编辑数据变化时
  112. void CollAnim::onLineEditTextChanged()
  113. {
  114. int row = ui->listWidget_collectAnim->currentRow();
  115. if(row == -1) return;
  116. QLineEdit *edit = dynamic_cast<QLineEdit*>(this->sender());
  117. QLabel *label = dynamic_cast<QLabel*>(formlayout->labelForField(edit));
  118. std::cout<<qPrintable(label->text())<<": "<<qPrintable(edit->text())<<std::endl;
  119. DataManager::getInstance()->setCollAnimDataMapVal(currentElem,row,label->text(),edit->text());
  120. }
  121. ///收集动画页面的动画类型发生变化
  122. void CollAnim::on_comboBox_animType_currentTextChanged(const QString &arg1)
  123. {
  124. int index = ui->listWidget_collectAnim->currentRow();
  125. if(index == -1 || isSetUi) return;
  126. DataManager::getInstance()->setAnimType(currentElem,arg1,index);
  127. setCollAnimWidget();
  128. }
  129. ///添加收集动画
  130. void CollAnim::on_pushButton_addCollectAnim_clicked()
  131. {
  132. QString collAnimName = "collAnim";
  133. int id = 1;
  134. while(1){
  135. if(!DataManager::getInstance()->existCollAnim(currentElem,collAnimName)){
  136. break;
  137. }
  138. collAnimName = "collAnim" + QString::number(id++);
  139. }
  140. ui->listWidget_collectAnim->addItem(new QListWidgetItem(collAnimName));
  141. DataManager::getInstance()->addCollAnim(currentElem,collAnimName);
  142. }
  143. ///删除收集动画
  144. void CollAnim::on_pushButton_delCollectAnim_clicked()
  145. {
  146. int row = ui->listWidget_collectAnim->currentRow();
  147. if(row == -1) return;
  148. QMessageBox::StandardButton reply = QMessageBox::question(this,"删除收集动画","确定要删除此收集动画吗?");
  149. if(reply == QMessageBox::Yes){
  150. QString delName = ui->listWidget_collectAnim->currentItem()->text();
  151. delete ui->listWidget_collectAnim->takeItem(row);
  152. DataManager::getInstance()->delCollAnim(currentElem,row);
  153. }
  154. }
  155. ///收集动画改名
  156. void CollAnim::on_listWidget_collectAnim_itemDoubleClicked(QListWidgetItem *item)
  157. {
  158. int row = ui->listWidget_collectAnim->currentRow();
  159. ChangeNameDialog newName;
  160. newName.setModal(true);
  161. newName.exec();
  162. QString name = newName.getNewName();
  163. if(!name.isEmpty()){
  164. if(DataManager::getInstance()->existCollAnim(currentElem,name)){
  165. QMessageBox::critical(this,"警告","该收集动画名已存在!");
  166. return;
  167. }
  168. DataManager::getInstance()->changeCollAnimName(currentElem,row,name);
  169. item->setText(name);
  170. }
  171. }
  172. ///点击另一个收集动画
  173. void CollAnim::on_listWidget_collectAnim_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
  174. {
  175. if(current != nullptr){
  176. setCollectAnimUi();
  177. }
  178. }