mainwindow.cpp 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include "changenamedialog.h"
  4. #include "resfiledialog.h"
  5. #include "actionSettingDialog.h"
  6. #include "statusEffectAnim.h"
  7. #include <QListWidgetItem>
  8. #include <QListWidget>
  9. #include <QLabel>
  10. #include <iostream>
  11. #include <QHBoxLayout>
  12. #include <QMessageBox>
  13. #include <QFileDialog>
  14. #include <QDragEnterEvent>
  15. #include <QMimeData>
  16. #include <QUrl>
  17. #include <QFormLayout>
  18. #include <QDialogButtonBox>
  19. #include "dataManager.h"
  20. MainWindow::MainWindow(QWidget *parent)
  21. : QMainWindow(parent)
  22. , ui(new Ui::MainWindow)
  23. {
  24. ui->setupUi(this);
  25. QPixmap pix(":/icon/icon/pic.png");
  26. ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
  27. this->setAcceptDrops(true);
  28. ui->tabWidget->setCurrentIndex(0);
  29. QStringList elements = DataManager::getInstance()->getList("",DataManager::ListType::Elem);
  30. //初始时刻,加载列表元素
  31. for(int i=0;i<elements.size();i++){
  32. QString elemName = elements[i];
  33. QListWidgetItem* item = new QListWidgetItem(QIcon(DataManager::getInstance()->getIconPath(elemName)),elemName);
  34. ui->listWidget_elem->addItem(item);
  35. }
  36. }
  37. MainWindow::~MainWindow()
  38. {
  39. delete ui;
  40. }
  41. ///切换元素时重置界面数据
  42. void MainWindow::setUi(QString elem)
  43. {
  44. std::cout<<"切换成元素"<<qPrintable(elem)<<",刷新界面"<<std::endl;
  45. if(firstSelectElem){
  46. animUi = new StatusEffectAnim();
  47. ui->tabWidget->addTab(animUi,"状态与效果动画");
  48. collAnimUi = new CollAnim();
  49. ui->tabWidget->addTab(collAnimUi,"收集动画");
  50. statusConfigUi = new StatusConfig();
  51. ui->tabWidget->addTab(statusConfigUi,"状态配置");
  52. poolUi = new Pool();
  53. ui->tabWidget->addTab(poolUi,"容器");
  54. firstSelectElem = false;
  55. }
  56. //基础元素区域的设置
  57. QPixmap pix(DataManager::getInstance()->getIconPath(elem));
  58. ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
  59. ui->lineEdit_name->setText(DataManager::getInstance()->getMarkValue(elem));
  60. ui->lineEdit_size->setText(DataManager::getInstance()->getSize(elem));
  61. ui->lineEdit_maxlayer->setText(DataManager::getInstance()->getMaxLayer(elem));
  62. ui->lineEdit_score->setText(DataManager::getInstance()->getScore(elem));
  63. ui->spinBox_drop->setValue(DataManager::getInstance()->getDropConfig(elem));
  64. //设置状态与效果动画表格显示
  65. animUi->setUi(elem);
  66. collAnimUi->setUi(elem);
  67. statusConfigUi->setUi(elem);
  68. poolUi->setUi(elem);
  69. }
  70. ///选择文件按钮
  71. void MainWindow::on_pushButton_chooseFile_clicked()
  72. {
  73. //如果未选中列表中的按钮,无法触发此按钮
  74. if(ui->listWidget_elem->currentItem() == nullptr) return;
  75. QString elem = ui->listWidget_elem->currentItem()->text();
  76. QString file_name = QFileDialog::getOpenFileName(this,"Open a file",QDir::homePath());
  77. if(file_name == nullptr){
  78. file_name = elements[elem]->iconPath;
  79. }
  80. QPixmap pix(file_name);
  81. ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
  82. ui->listWidget_elem->currentItem()->setIcon(QIcon(file_name));
  83. DataManager::getInstance()->changeIconPath(elem,file_name);
  84. }
  85. ///添加元素
  86. void MainWindow::on_pushButton_addElem_clicked()
  87. {
  88. QString elemName = "新加元素";
  89. int id = 1;
  90. while(1){
  91. if(!DataManager::getInstance()->existElem(elemName)){
  92. break;
  93. }
  94. elemName = "新加元素" + QString::number(id++);
  95. }
  96. QListWidgetItem* item = new QListWidgetItem(QIcon(":/icon/icon/菜狗.png"),elemName);
  97. ui->listWidget_elem->addItem(item);
  98. DataManager::getInstance()->addElem(elemName);
  99. }
  100. ///删除元素
  101. void MainWindow::on_pushButton_delElem_clicked()
  102. {
  103. if(ui->listWidget_elem->currentItem() == nullptr) return;
  104. QMessageBox::StandardButton reply = QMessageBox::question(this,"删除元素","确定要删除此元素吗?");
  105. if(reply == QMessageBox::Yes){
  106. QString elemName = ui->listWidget_elem->currentItem()->text();
  107. delete ui->listWidget_elem->takeItem(ui->listWidget_elem->currentRow());
  108. DataManager::getInstance()->delElem(elemName);
  109. }
  110. }
  111. ///修改元素名字
  112. void MainWindow::on_listWidget_elem_itemDoubleClicked(QListWidgetItem *item)
  113. {
  114. ChangeNameDialog newName;
  115. newName.setModal(true);
  116. newName.exec();
  117. QString name = newName.getNewName();
  118. if(!name.isEmpty()){
  119. if(DataManager::getInstance()->existElem(name)){
  120. QMessageBox::critical(this,"警告","该元素名已存在!");
  121. return;
  122. }
  123. QString oriName = ui->listWidget_elem->currentItem()->text();
  124. item->setText(name);
  125. DataManager::getInstance()->changeElemName(oriName,name);
  126. }
  127. }
  128. //基础元素数据变化触发保存
  129. ///标示值修改
  130. void MainWindow::on_lineEdit_name_editingFinished()
  131. {
  132. if(ui->listWidget_elem->currentItem() == nullptr) return;
  133. QString key = ui->listWidget_elem->currentItem()->text();
  134. DataManager::getInstance()->changeMarkValue(key,ui->lineEdit_name->text());
  135. }
  136. ///大小修改
  137. void MainWindow::on_lineEdit_size_editingFinished()
  138. {
  139. if(ui->listWidget_elem->currentItem() == nullptr) return;
  140. QString key = ui->listWidget_elem->currentItem()->text();
  141. DataManager::getInstance()->changeSize(key,ui->lineEdit_size->text());
  142. }
  143. ///最大层数修改
  144. void MainWindow::on_lineEdit_maxlayer_editingFinished()
  145. {
  146. if(ui->listWidget_elem->currentItem() == nullptr) return;
  147. QString key = ui->listWidget_elem->currentItem()->text();
  148. DataManager::getInstance()->changeMaxLayer(key,ui->lineEdit_maxlayer->text());
  149. }
  150. ///分数修改
  151. void MainWindow::on_lineEdit_score_editingFinished()
  152. {
  153. if(ui->listWidget_elem->currentItem() == nullptr) return;
  154. QString key = ui->listWidget_elem->currentItem()->text();
  155. DataManager::getInstance()->changeScore(key,ui->lineEdit_score->text());
  156. }
  157. ///掉落值修改
  158. void MainWindow::on_spinBox_drop_valueChanged(int arg1)
  159. {
  160. if(ui->listWidget_elem->currentItem() == nullptr) return;
  161. QString key = ui->listWidget_elem->currentItem()->text();
  162. DataManager::getInstance()->changeDropConfig(key,arg1);
  163. }
  164. ///更换选中元素
  165. void MainWindow::on_listWidget_elem_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
  166. {
  167. setUi(current->text());
  168. }
  169. ///模板更新后更新与模板配置相关的界面显示
  170. void MainWindow::updateTempRelatedUi()
  171. {
  172. //重新设置收集动画界面
  173. collAnimUi->setCollectAnimUi();
  174. //重置状态配置的模板相关界面
  175. statusConfigUi->setAnimComboBox();
  176. //重置容器类型选项
  177. poolUi->updateTempRelated();
  178. }
  179. ///重新加载模板文件
  180. void MainWindow::on_reloadTempFile_triggered()
  181. {
  182. DataManager::getInstance()->updateTempData();
  183. updateTempRelatedUi();
  184. }
  185. ///属性页面切换(主要用于更新常变下拉选项)
  186. void MainWindow::on_tabWidget_currentChanged(int index)
  187. {
  188. //更新动画、收集动画下拉选项
  189. if(index == 1){
  190. collAnimUi->setCollAnimWidget();
  191. }
  192. else if(index == 2){
  193. statusConfigUi->setAnimComboBox();
  194. }
  195. }