mainwindow.cpp 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  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 "datahpp/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. ui->comboBox_dropConfig->addItems({"随状态而定","可掉落","不可掉落"});
  37. }
  38. MainWindow::~MainWindow()
  39. {
  40. delete ui;
  41. }
  42. ///切换元素时重置界面数据
  43. void MainWindow::setUi(QString elem)
  44. {
  45. std::cout<<"切换成元素"<<qPrintable(elem)<<",刷新界面"<<std::endl;
  46. //首次选择元素设置四个子界面
  47. if(firstSelectElem){
  48. animUi = new StatusEffectAnim();
  49. ui->tabWidget->addTab(animUi,"状态与效果动画");
  50. collAnimUi = new CollAnim();
  51. ui->tabWidget->addTab(collAnimUi,"收集动画");
  52. statusConfigUi = new StatusConfig();
  53. ui->tabWidget->addTab(statusConfigUi,"状态配置");
  54. poolUi = new Pool();
  55. ui->tabWidget->addTab(poolUi,"容器");
  56. firstSelectElem = false;
  57. }
  58. //基础元素区域的设置
  59. QPixmap pix(DataManager::getInstance()->getIconPath(elem));
  60. ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
  61. ui->lineEdit_name->setText(DataManager::getInstance()->getMarkValue(elem));
  62. ui->lineEdit_pos->setText(DataManager::getInstance()->getPos(elem));
  63. ui->lineEdit_maxlayer->setText(DataManager::getInstance()->getMaxLayer(elem));
  64. ui->lineEdit_score->setText(DataManager::getInstance()->getScore(elem));
  65. ui->comboBox_dropConfig->setCurrentIndex(DataManager::getInstance()->getDropConfig(elem));
  66. if(DataManager::getInstance()->getLinkedState(elem)) ui->checkBox_canBeLinked->setCheckState(Qt::Checked);
  67. else ui->checkBox_canBeLinked->setCheckState(Qt::Unchecked);
  68. if(DataManager::getInstance()->getMoveAwayState(elem)) ui->checkBox_canMoveAway->setCheckState(Qt::Checked);
  69. else ui->checkBox_canMoveAway->setCheckState(Qt::Unchecked);
  70. //设置四个子界面显示
  71. animUi->setUi(elem);
  72. collAnimUi->setUi(elem);
  73. statusConfigUi->setUi(elem);
  74. poolUi->setUi(elem);
  75. }
  76. ///选择文件按钮
  77. void MainWindow::on_pushButton_chooseFile_clicked()
  78. {
  79. //如果未选中列表中的按钮,无法触发此按钮
  80. if(ui->listWidget_elem->currentItem() == nullptr) return;
  81. QString elem = ui->listWidget_elem->currentItem()->text();
  82. QString file_name = QFileDialog::getOpenFileName(this,"选择文件",QDir::homePath());
  83. if(file_name == nullptr){
  84. return;
  85. }
  86. QPixmap pix(file_name);
  87. ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
  88. ui->listWidget_elem->currentItem()->setIcon(QIcon(file_name));
  89. DataManager::getInstance()->changeIconPath(elem,file_name);
  90. }
  91. ///添加元素
  92. void MainWindow::on_pushButton_addElem_clicked()
  93. {
  94. QString elemName = "新加元素";
  95. int id = 1;
  96. while(1){
  97. if(!DataManager::getInstance()->existElem(elemName)){
  98. break;
  99. }
  100. elemName = "新加元素" + QString::number(id++);
  101. }
  102. QListWidgetItem* item = new QListWidgetItem(QIcon(":/icon/icon/菜狗.png"),elemName);
  103. ui->listWidget_elem->addItem(item);
  104. DataManager::getInstance()->addElem(elemName);
  105. }
  106. ///删除元素
  107. void MainWindow::on_pushButton_delElem_clicked()
  108. {
  109. if(ui->listWidget_elem->currentItem() == nullptr) return;
  110. QMessageBox::StandardButton reply = QMessageBox::question(this,"删除元素","确定要删除此元素吗?");
  111. if(reply == QMessageBox::Yes){
  112. QString elemName = ui->listWidget_elem->currentItem()->text();
  113. delete ui->listWidget_elem->takeItem(ui->listWidget_elem->currentRow());
  114. DataManager::getInstance()->delElem(elemName);
  115. }
  116. }
  117. ///修改元素名字
  118. void MainWindow::on_listWidget_elem_itemDoubleClicked(QListWidgetItem *item)
  119. {
  120. ChangeNameDialog newName;
  121. newName.setModal(true);
  122. newName.exec();
  123. QString name = newName.getNewName();
  124. if(!name.isEmpty()){
  125. if(DataManager::getInstance()->existElem(name)){
  126. QMessageBox::critical(this,"警告","该元素名已存在!");
  127. return;
  128. }
  129. QString oriName = ui->listWidget_elem->currentItem()->text();
  130. item->setText(name);
  131. DataManager::getInstance()->changeElemName(oriName,name);
  132. }
  133. }
  134. //基础元素数据变化触发保存
  135. ///标示值修改
  136. void MainWindow::on_lineEdit_name_editingFinished()
  137. {
  138. if(ui->listWidget_elem->currentItem() == nullptr) return;
  139. QString key = ui->listWidget_elem->currentItem()->text();
  140. DataManager::getInstance()->changeMarkValue(key,ui->lineEdit_name->text());
  141. }
  142. ///大小修改
  143. void MainWindow::on_lineEdit_pos_editingFinished()
  144. {
  145. if(ui->listWidget_elem->currentItem() == nullptr) return;
  146. QString key = ui->listWidget_elem->currentItem()->text();
  147. DataManager::getInstance()->changePos(key,ui->lineEdit_pos->text());
  148. }
  149. ///最大层数修改
  150. void MainWindow::on_lineEdit_maxlayer_editingFinished()
  151. {
  152. if(ui->listWidget_elem->currentItem() == nullptr) return;
  153. QString key = ui->listWidget_elem->currentItem()->text();
  154. DataManager::getInstance()->changeMaxLayer(key,ui->lineEdit_maxlayer->text());
  155. }
  156. ///分数修改
  157. void MainWindow::on_lineEdit_score_editingFinished()
  158. {
  159. if(ui->listWidget_elem->currentItem() == nullptr) return;
  160. QString key = ui->listWidget_elem->currentItem()->text();
  161. DataManager::getInstance()->changeScore(key,ui->lineEdit_score->text());
  162. }
  163. ///更换选中元素
  164. void MainWindow::on_listWidget_elem_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
  165. {
  166. setUi(current->text());
  167. }
  168. ///模板更新后更新与模板配置相关的界面显示
  169. void MainWindow::updateTempRelatedUi()
  170. {
  171. //重新设置收集动画界面
  172. collAnimUi->setCollectAnimUi();
  173. //重置状态配置的模板相关界面
  174. statusConfigUi->setAnimComboBox();
  175. //重置容器类型选项
  176. poolUi->updateTempRelated();
  177. }
  178. ///重新加载模板文件
  179. void MainWindow::on_reloadTempFile_triggered()
  180. {
  181. DataManager::getInstance()->updateTempData();
  182. updateTempRelatedUi();
  183. }
  184. ///属性页面切换(主要用于更新常变下拉选项)
  185. void MainWindow::on_tabWidget_currentChanged(int index)
  186. {
  187. //更新动画、收集动画下拉选项
  188. if(index == 1){
  189. collAnimUi->setCollAnimWidget();
  190. }
  191. else if(index == 2){
  192. statusConfigUi->setAnimComboBox();
  193. }
  194. }
  195. ///可连接状态改变
  196. void MainWindow::on_checkBox_canBeLinked_stateChanged(int arg1)
  197. {
  198. if(ui->listWidget_elem->currentItem() == nullptr) return;
  199. QString key = ui->listWidget_elem->currentItem()->text();
  200. DataManager::getInstance()->changeLinkedState(key,arg1);
  201. }
  202. ///可挤压状态改变
  203. void MainWindow::on_checkBox_canMoveAway_stateChanged(int arg1)
  204. {
  205. if(ui->listWidget_elem->currentItem() == nullptr) return;
  206. QString key = ui->listWidget_elem->currentItem()->text();
  207. DataManager::getInstance()->changeMoveAwayState(key,arg1);
  208. }
  209. ///导出配置按钮按下
  210. void MainWindow::on_pushButton_exportConfig_clicked()
  211. {
  212. QString fileName = QFileDialog::getSaveFileName(this,"导出配置","./exportConfig.json",tr("JSON files(*.json)"));
  213. if(fileName.isEmpty()) return;
  214. if(!DataManager::getInstance()->exportData(fileName)){
  215. QMessageBox::critical(this,"错误",DataManager::getInstance()->getExportMessage());
  216. return;
  217. }
  218. else QMessageBox::information(this,"提示","导出成功!");
  219. }
  220. ///掉落设定值改变
  221. void MainWindow::on_comboBox_dropConfig_currentIndexChanged(int index)
  222. {
  223. if(ui->listWidget_elem->currentItem() == nullptr) return;
  224. QString key = ui->listWidget_elem->currentItem()->text();
  225. DataManager::getInstance()->changeDropConfig(key,index);
  226. //选中可掉落
  227. if(index == 1){
  228. DataManager::getInstance()->updateAllDropState(key,true);
  229. statusConfigUi->updateDropBox(true);
  230. }
  231. //选中不可掉落
  232. else if(index == 2){
  233. DataManager::getInstance()->updateAllDropState(key,false);
  234. statusConfigUi->updateDropBox(false);
  235. }
  236. }