mainwindow.cpp 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  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. //更新四个子界面currentElem
  133. animUi->currentElem = name;
  134. collAnimUi->currentElem = name;
  135. statusConfigUi->currentElem = name;
  136. poolUi->currentElem = name;
  137. }
  138. }
  139. //基础元素数据变化触发保存
  140. ///标示值修改
  141. void MainWindow::on_lineEdit_name_editingFinished()
  142. {
  143. if(ui->listWidget_elem->currentItem() == nullptr) return;
  144. QString key = ui->listWidget_elem->currentItem()->text();
  145. DataManager::getInstance()->changeMarkValue(key,ui->lineEdit_name->text());
  146. }
  147. ///大小修改
  148. void MainWindow::on_lineEdit_pos_editingFinished()
  149. {
  150. if(ui->listWidget_elem->currentItem() == nullptr) return;
  151. QString key = ui->listWidget_elem->currentItem()->text();
  152. DataManager::getInstance()->changePos(key,ui->lineEdit_pos->text());
  153. }
  154. ///最大层数修改
  155. void MainWindow::on_lineEdit_maxlayer_editingFinished()
  156. {
  157. if(ui->listWidget_elem->currentItem() == nullptr) return;
  158. QString key = ui->listWidget_elem->currentItem()->text();
  159. DataManager::getInstance()->changeMaxLayer(key,ui->lineEdit_maxlayer->text());
  160. }
  161. ///分数修改
  162. void MainWindow::on_lineEdit_score_editingFinished()
  163. {
  164. if(ui->listWidget_elem->currentItem() == nullptr) return;
  165. QString key = ui->listWidget_elem->currentItem()->text();
  166. DataManager::getInstance()->changeScore(key,ui->lineEdit_score->text());
  167. }
  168. ///更换选中元素
  169. void MainWindow::on_listWidget_elem_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
  170. {
  171. setUi(current->text());
  172. }
  173. ///模板更新后更新与模板配置相关的界面显示
  174. void MainWindow::updateTempRelatedUi()
  175. {
  176. //重新设置收集动画界面
  177. collAnimUi->setCollectAnimUi();
  178. //重置状态配置的模板相关界面
  179. statusConfigUi->setAnimComboBox();
  180. //重置容器类型选项
  181. poolUi->updateTempRelated();
  182. }
  183. ///重新加载模板文件
  184. void MainWindow::on_reloadTempFile_triggered()
  185. {
  186. DataManager::getInstance()->updateTempData();
  187. updateTempRelatedUi();
  188. }
  189. ///属性页面切换(主要用于更新常变下拉选项)
  190. void MainWindow::on_tabWidget_currentChanged(int index)
  191. {
  192. //更新动画、收集动画下拉选项
  193. if(index == 1){
  194. collAnimUi->setCollAnimWidget();
  195. }
  196. else if(index == 2){
  197. statusConfigUi->setAnimComboBox();
  198. }
  199. }
  200. ///可连接状态改变
  201. void MainWindow::on_checkBox_canBeLinked_stateChanged(int arg1)
  202. {
  203. if(ui->listWidget_elem->currentItem() == nullptr) return;
  204. QString key = ui->listWidget_elem->currentItem()->text();
  205. DataManager::getInstance()->changeLinkedState(key,arg1);
  206. }
  207. ///可挤压状态改变
  208. void MainWindow::on_checkBox_canMoveAway_stateChanged(int arg1)
  209. {
  210. if(ui->listWidget_elem->currentItem() == nullptr) return;
  211. QString key = ui->listWidget_elem->currentItem()->text();
  212. DataManager::getInstance()->changeMoveAwayState(key,arg1);
  213. }
  214. ///导出配置按钮按下
  215. void MainWindow::on_pushButton_exportConfig_clicked()
  216. {
  217. QString fileName = QFileDialog::getSaveFileName(this,"导出配置","./exportConfig.json",tr("JSON files(*.json)"));
  218. if(fileName.isEmpty()) return;
  219. if(!DataManager::getInstance()->exportData(fileName)){
  220. QMessageBox::critical(this,"错误",DataManager::getInstance()->getExportMessage());
  221. return;
  222. }
  223. else QMessageBox::information(this,"提示","导出成功!");
  224. }
  225. ///掉落设定值改变
  226. void MainWindow::on_comboBox_dropConfig_currentIndexChanged(int index)
  227. {
  228. if(ui->listWidget_elem->currentItem() == nullptr) return;
  229. QString key = ui->listWidget_elem->currentItem()->text();
  230. DataManager::getInstance()->changeDropConfig(key,index);
  231. //选中可掉落
  232. if(index == 1){
  233. DataManager::getInstance()->updateAllDropState(key,true);
  234. statusConfigUi->updateDropBox(true);
  235. }
  236. //选中不可掉落
  237. else if(index == 2){
  238. DataManager::getInstance()->updateAllDropState(key,false);
  239. statusConfigUi->updateDropBox(false);
  240. }
  241. }
  242. ///保存数据
  243. void MainWindow::on_pushButton_savedata_clicked()
  244. {
  245. DataManager::getInstance()->saveData();
  246. }