collAnim.cpp 6.7 KB

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