mainwindow.cpp 9.5 KB

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