mainwindow.cpp 10.0 KB

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