mainwindow.cpp 61 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include "changenamedialog.h"
  4. #include "collectionwindow.h"
  5. #include "resfiledialog.h"
  6. #include "actionSettingDialog.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. jsonTemp = new ReadJsonSrc(":/file/file/template.json");
  25. ui->setupUi(this);
  26. QPixmap pix(":/icon/icon/pic.png");
  27. ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
  28. this->setAcceptDrops(true);
  29. ui->tableWidget_animation->setHorizontalHeaderLabels({"名称","资源","时间线","z-Order"});
  30. ui->tableWidget_containerPool->setHorizontalHeaderLabels({"键值","资源名","初始时间线","点击时间线","影响时间线","消失时间线","消失z-Order"});
  31. ui->tableWidget_childElem->setHorizontalHeaderLabels({"名称","使用的池子"});
  32. ui->tableWidget_event->setHorizontalHeaderLabels({"事件名称","是否需要颜色一致","状态变化幅度","特效","根据格子数量消除","触发动作","触发动作设置"});
  33. ui->tabWidget->setCurrentIndex(0);
  34. ui->lineEdit_collectionType->setReadOnly(true);
  35. ui->widget_dynamic->setLayout(new QFormLayout);
  36. updateTempRelatedUi();
  37. }
  38. MainWindow::~MainWindow()
  39. {
  40. delete ui;
  41. delete jsonTemp;
  42. }
  43. ///创建普通下拉选项
  44. QComboBox* MainWindow::createBox(QString choice,QStringList list)
  45. {
  46. QComboBox* box = new QComboBox;
  47. box->addItem("尚未选择");
  48. box->addItems(list);
  49. int index = box->findText(choice);
  50. if(index == -1) index = 0;
  51. box->setCurrentIndex(index);
  52. return box;
  53. }
  54. ///创建一个时间线下拉选项
  55. QComboBox* MainWindow::createTimelineBox(QString chosenTimeline,QString fileName,TimelineType type)
  56. {
  57. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  58. QComboBox* timeLine = new QComboBox;
  59. if(fileName == "双击添加资源文件") return timeLine;
  60. QStringList list = elem->getTimelineList(fileName);
  61. timeLine = createBox(chosenTimeline,list);
  62. if(type == TimelineType::Animation){
  63. connect(timeLine,SIGNAL(currentTextChanged(QString)),this,SLOT(onTimelineTextChanged(QString)));
  64. }
  65. else if(type == TimelineType::Pool){
  66. connect(timeLine,SIGNAL(currentTextChanged(QString)),this,SLOT(onPoolTimelineTextChanged(QString)));
  67. }
  68. return timeLine;
  69. }
  70. ///创建事件下拉选项
  71. QComboBox* MainWindow::createEventBox(QString chosenEvent)
  72. {
  73. QStringList list;
  74. for(const auto &i:jsonTemp->templateMap["eventTemp"]) list.push_back(i.name);
  75. QComboBox* event = createBox(chosenEvent,list);
  76. connect(event,SIGNAL(currentTextChanged(QString)),this,SLOT(onEventBoxTextChanged(QString)));
  77. return event;
  78. }
  79. ///创建一个使用池子下拉选项
  80. QComboBox* MainWindow::createPoolBox(QString chosenPool)
  81. {
  82. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  83. QStringList list;
  84. for(const auto &i:elem->container) list.push_back(i.poolName);
  85. QComboBox* pools = createBox(chosenPool,list);
  86. connect(pools,SIGNAL(currentTextChanged(QString)),this,SLOT(onPoolsTextChanged(QString)));
  87. return pools;
  88. }
  89. ///创建一个checkBox
  90. QCheckBox* MainWindow::createCheckBox(bool chosen)
  91. {
  92. QCheckBox* check = new QCheckBox;
  93. if(chosen) check->setCheckState(Qt::Checked);
  94. else check->setCheckState(Qt::Unchecked);
  95. connect(check,SIGNAL(stateChanged(int)),this,SLOT(onCheckBoxStateChanged(int)));
  96. return check;
  97. }
  98. ///创建一个特效下拉选项
  99. QComboBox* MainWindow::createEffectBox(QString chosenEffect)
  100. {
  101. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  102. QStringList list;
  103. for(const auto &i:elem->statusEffect){
  104. list.push_back(i.name);
  105. }
  106. QComboBox* effect = createBox(chosenEffect,list);
  107. connect(effect,SIGNAL(currentTextChanged(QString)),this,SLOT(onEventBoxTextChanged(QString)));
  108. return effect;
  109. }
  110. ///创建一个触发动作
  111. QComboBox* MainWindow::createTriggerAction(QString chosenAction)
  112. {
  113. QStringList actionlist;
  114. for(const auto &i:jsonTemp->templateMap["actionTemp"]) actionlist.push_back(i.name);
  115. QComboBox* actions = createBox(chosenAction,actionlist);
  116. connect(actions,SIGNAL(currentTextChanged(QString)),this,SLOT(onEventBoxTextChanged(QString)));
  117. return actions;
  118. }
  119. ///创建一个触发动作设置按钮
  120. QPushButton* MainWindow::createSetButton()
  121. {
  122. QPushButton* setAction = new QPushButton("设置");
  123. connect(setAction,SIGNAL(clicked()),this,SLOT(onSetActionButtonClicked()));
  124. return setAction;
  125. }
  126. ///动画删除或改名后其它下拉选项的更新
  127. void MainWindow::updateAnimComboBox(QString changedAnim)
  128. {
  129. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  130. //收集动画界面
  131. if(ui->listWidget_collectAnim->currentItem() != nullptr){
  132. int index = ui->listWidget_collectAnim->currentRow();
  133. if(elem->collAnim[index].anim == changedAnim) ui->comboBox_animation->setCurrentIndex(0);
  134. }
  135. //状态配置界面
  136. if(ui->listWidget_status->currentItem() != nullptr){
  137. int index = ui->listWidget_status->currentRow();
  138. if(elem->statusConfig[index].initAnim == changedAnim) ui->comboBox_initAnim->setCurrentIndex(0);
  139. if(elem->statusConfig[index].clickAnim == changedAnim) ui->comboBox_clickAnim->setCurrentIndex(0);
  140. int rowNum = ui->tableWidget_event->rowCount();
  141. for(int i=0;i<rowNum;i++){
  142. QComboBox *effect = qobject_cast<QComboBox*>(ui->tableWidget_event->cellWidget(i,3));
  143. if(effect->currentText() == changedAnim) effect->setCurrentIndex(0);
  144. }
  145. }
  146. }
  147. ///收集动画删除或改名后下拉选项更新
  148. void MainWindow::updateCollAnimComboBox(QString changedAnim)
  149. {
  150. std::cout<<"收集动画改变,更新下拉选项"<<std::endl;
  151. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  152. //状态配置界面
  153. if(ui->listWidget_status->currentItem() != nullptr){
  154. int index = ui->listWidget_status->currentRow();
  155. if(elem->statusConfig[index].collAnim == changedAnim) ui->comboBox_collectAnimation->setCurrentIndex(0);
  156. }
  157. }
  158. ///切换元素时重置界面数据
  159. void MainWindow::setUi(QString elem)
  160. {
  161. std::cout<<"切换成元素"<<qPrintable(elem)<<",刷新界面"<<std::endl;
  162. //基础元素区域的设置
  163. QPixmap pix(DataManager::getInstance()->getIconPath(elem));
  164. ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
  165. ui->lineEdit_name->setText(DataManager::getInstance()->getMarkValue(elem));
  166. ui->lineEdit_size->setText(DataManager::getInstance()->getSize(elem));
  167. ui->lineEdit_maxlayer->setText(DataManager::getInstance()->getMaxLayer(elem));
  168. ui->lineEdit_score->setText(DataManager::getInstance()->getScore(elem));
  169. ui->spinBox_drop->setValue(DataManager::getInstance()->getDropConfig(elem));
  170. //TODO:调用各个界面的刷新显示
  171. //设置状态与效果动画表格显示
  172. //设置收集动画的显示并聚焦到收集动画列表的最后一个元素
  173. ui->listWidget_collectAnim->clear();
  174. for(const auto &i:elem->collAnim){
  175. ui->listWidget_collectAnim->addItem(i.name);
  176. }
  177. // ui->listWidget_collectAnim->item(0)->setSelected(true); // 设置选中
  178. //设置状态配置界面
  179. ui->listWidget_status->clear();
  180. for(const auto &i:elem->statusConfig){
  181. ui->listWidget_status->addItem(i.statusValue);
  182. }
  183. //切换元素时状态尚未选中,先清除事件表格内容
  184. rowCnt = ui->tableWidget_event->rowCount();
  185. for(int i=0;i<rowCnt;i++){
  186. ui->tableWidget_event->removeRow(0);
  187. }
  188. //设置收集动画和状态配置的comboBox
  189. ui->comboBox_initAnim->clear();
  190. ui->comboBox_clickAnim->clear();
  191. ui->comboBox_collectAnimation->clear();
  192. ui->comboBox_animation->clear();
  193. ui->comboBox_initAnim->addItem("尚未选择");
  194. ui->comboBox_clickAnim->addItem("尚未选择");
  195. ui->comboBox_collectAnimation->addItem("尚未选择");
  196. ui->comboBox_animation->addItem("尚未选择");
  197. for(const auto &i:elem->statusEffect){
  198. ui->comboBox_clickAnim->addItem(i.name);
  199. ui->comboBox_animation->addItem(i.name);
  200. ui->comboBox_initAnim->addItem(i.name);
  201. }
  202. for(const auto &i:elem->collAnim){
  203. ui->comboBox_collectAnimation->addItem(i.name);
  204. }
  205. //设置容器池界面
  206. ui->listWidget_pool->clear();
  207. for(const auto &i:elem->container){
  208. ui->listWidget_pool->addItem(i.poolName);
  209. }
  210. //切换元素时容器尚未选中,先清除表格内容
  211. int rowNum = ui->tableWidget_containerPool->rowCount();
  212. for(int i=0;i<rowNum;i++){
  213. ui->tableWidget_containerPool->removeRow(0);
  214. }
  215. //设置子元素界面
  216. rowCnt = ui->tableWidget_childElem->rowCount();
  217. for(int i=0;i<rowCnt;i++){
  218. ui->tableWidget_childElem->removeRow(0);
  219. }
  220. for(const auto &i:elem->childElem){
  221. int rowNum = ui->tableWidget_childElem->rowCount();
  222. ui->tableWidget_childElem->insertRow(rowNum);
  223. ui->tableWidget_childElem->setItem(rowNum,0,new QTableWidgetItem(i.name));
  224. ui->tableWidget_childElem->setCellWidget(rowNum,1,createPoolBox(i.container));
  225. }
  226. }
  227. void MainWindow::on_pushButton_chooseFile_clicked()
  228. {
  229. //如果未选中列表中的按钮,无法触发此按钮
  230. if(ui->listWidget_elem->currentItem() == nullptr) return;
  231. QString elem = ui->listWidget_elem->currentItem()->text();
  232. QString file_name = QFileDialog::getOpenFileName(this,"Open a file",QDir::homePath());
  233. if(file_name == nullptr){
  234. file_name = elements[elem]->iconPath;
  235. }
  236. QPixmap pix(file_name);
  237. ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
  238. ui->listWidget_elem->currentItem()->setIcon(QIcon(file_name));
  239. DataManager::getInstance()->changeIconPath(elem,file_name);
  240. }
  241. void MainWindow::on_pushButton_addElem_clicked()
  242. {
  243. QString elemName = "新加元素";
  244. int id = 1;
  245. while(1){
  246. if(!DataManager::getInstance()->existElem(elemName)){
  247. break;
  248. }
  249. elemName = "新加元素" + QString::number(id++);
  250. }
  251. QListWidgetItem* item = new QListWidgetItem(QIcon(":/icon/icon/菜狗.png"),elemName);
  252. ui->listWidget_elem->addItem(item);
  253. DataManager::getInstance()->addElem(elemName);
  254. }
  255. void MainWindow::on_pushButton_delElem_clicked()
  256. {
  257. if(ui->listWidget_elem->currentItem() == nullptr) return;
  258. QMessageBox::StandardButton reply = QMessageBox::question(this,"删除元素","确定要删除此元素吗?");
  259. if(reply == QMessageBox::Yes){
  260. QString elemName = ui->listWidget_elem->currentItem()->text();
  261. delete ui->listWidget_elem->takeItem(ui->listWidget_elem->currentRow());
  262. DataManager::getInstance()->delElem(elemName);
  263. }
  264. }
  265. void MainWindow::on_listWidget_elem_itemDoubleClicked(QListWidgetItem *item)
  266. {
  267. ChangeNameDialog newName;
  268. newName.setModal(true);
  269. newName.exec();
  270. QString name = newName.getNewName();
  271. if(!name.isEmpty()){
  272. if(DataManager::getInstance()->existElem(name)){
  273. QMessageBox::critical(this,"警告","该元素名已存在!");
  274. return;
  275. }
  276. QString oriName = ui->listWidget_elem->currentItem()->text();
  277. item->setText(name);
  278. DataManager::getInstance()->changeElemName(oriName,name);
  279. }
  280. }
  281. //基础元素数据变化触发保存
  282. void MainWindow::on_lineEdit_name_editingFinished()
  283. {
  284. if(ui->listWidget_elem->currentItem() == nullptr) return;
  285. QString key = ui->listWidget_elem->currentItem()->text();
  286. DataManager::getInstance()->changeMarkValue(key,ui->lineEdit_name->text());
  287. }
  288. void MainWindow::on_lineEdit_size_editingFinished()
  289. {
  290. if(ui->listWidget_elem->currentItem() == nullptr) return;
  291. QString key = ui->listWidget_elem->currentItem()->text();
  292. DataManager::getInstance()->changeSize(key,ui->lineEdit_size->text());
  293. }
  294. void MainWindow::on_lineEdit_maxlayer_editingFinished()
  295. {
  296. if(ui->listWidget_elem->currentItem() == nullptr) return;
  297. QString key = ui->listWidget_elem->currentItem()->text();
  298. DataManager::getInstance()->changeMaxLayer(key,ui->lineEdit_maxlayer->text());
  299. }
  300. void MainWindow::on_lineEdit_score_editingFinished()
  301. {
  302. if(ui->listWidget_elem->currentItem() == nullptr) return;
  303. QString key = ui->listWidget_elem->currentItem()->text();
  304. DataManager::getInstance()->changeScore(key,ui->lineEdit_score->text());
  305. }
  306. void MainWindow::on_spinBox_drop_valueChanged(int arg1)
  307. {
  308. if(ui->listWidget_elem->currentItem() == nullptr) return;
  309. QString key = ui->listWidget_elem->currentItem()->text();
  310. DataManager::getInstance()->changeDropConfig(key,arg1);
  311. }
  312. void MainWindow::on_listWidget_elem_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
  313. {
  314. setUi(current->text());
  315. }
  316. //替换资源文件
  317. void MainWindow::on_tableWidget_animation_cellDoubleClicked(int row, int column)
  318. {
  319. if(ui->listWidget_elem->currentItem()==nullptr) return;
  320. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  321. //表格内容修改flag
  322. animTableItemChanged = true;
  323. if(column == 1){
  324. ResFileDialog res;
  325. res.setModal(true);
  326. res.exec();
  327. QString fileName = res.getResName();
  328. if(!fileName.isEmpty()){
  329. QTableWidgetItem* res = new QTableWidgetItem(getFileName(fileName));
  330. // 此单元格不可编辑
  331. res->setFlags(res->flags() & ~Qt::ItemIsEditable);
  332. ui->tableWidget_animation->setItem(row,1,res);
  333. QComboBox* timeLine = createTimelineBox("",fileName,TimelineType::Animation);
  334. ui->tableWidget_animation->setCellWidget(row,column+1,timeLine);
  335. //保存当前数据
  336. elem->statusEffect[row].res = fileName;
  337. }
  338. }
  339. }
  340. ///动画区时间线数据发生改变
  341. void MainWindow::onTimelineTextChanged(const QString &arg1)
  342. {
  343. if(ui->listWidget_elem->currentItem() == nullptr) return;
  344. //获取时间线列表所在位置
  345. std::cout<<"current timeline is:"<<qPrintable(arg1)<<std::endl;
  346. QComboBox *timeline = dynamic_cast<QComboBox*>(this->sender());
  347. int x = timeline->frameGeometry().x();
  348. int y = timeline->frameGeometry().y();
  349. QModelIndex index = ui->tableWidget_animation->indexAt(QPoint(x,y));
  350. int row = index.row();
  351. //修改数据
  352. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  353. elem->statusEffect[row].timeline = timeline->currentText();
  354. std::cout<<"row:"<<row<<std::endl;
  355. }
  356. ///容器池区时间线数据发生改变
  357. void MainWindow::onPoolTimelineTextChanged(const QString &arg1)
  358. {
  359. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr) return;
  360. //获取时间线列表所在位置
  361. std::cout<<"current timeline is:"<<qPrintable(arg1)<<std::endl;
  362. QComboBox *timeline = dynamic_cast<QComboBox*>(this->sender());
  363. int x = timeline->frameGeometry().x();
  364. int y = timeline->frameGeometry().y();
  365. QModelIndex index = ui->tableWidget_containerPool->indexAt(QPoint(x,y));
  366. int row = index.row();
  367. int column = index.column();
  368. //修改数据
  369. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  370. int poolIndex = ui->listWidget_pool->currentRow();
  371. if(column == 2) elem->container[poolIndex].table[row].initTimeline = timeline->currentText();
  372. else if(column == 3) elem->container[poolIndex].table[row].clickTimeline = timeline->currentText();
  373. else if(column == 4) elem->container[poolIndex].table[row].effectTimeline = timeline->currentText();
  374. else if(column == 5) elem->container[poolIndex].table[row].vanishTimeline = timeline->currentText();
  375. std::cout<<"row:"<<row<<"\tcolumn:"<<column<<std::endl;
  376. }
  377. ///子元素使用池子数据发生改变
  378. void MainWindow::onPoolsTextChanged(const QString &arg1)
  379. {
  380. if(ui->listWidget_elem->currentItem() == nullptr) return;
  381. //获取池子列表所在位置
  382. QComboBox *pools = dynamic_cast<QComboBox*>(this->sender());
  383. int x = pools->frameGeometry().x();
  384. int y = pools->frameGeometry().y();
  385. QModelIndex index = ui->tableWidget_childElem->indexAt(QPoint(x,y));
  386. int row = index.row();
  387. //修改数据
  388. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  389. elem->childElem[row].container = arg1;
  390. }
  391. ///事件配置checkBox状态发生改变
  392. void MainWindow::onCheckBoxStateChanged(int state)
  393. {
  394. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
  395. //获取checkBox所在位置
  396. QCheckBox *check = dynamic_cast<QCheckBox*>(this->sender());
  397. int x = check->frameGeometry().x();
  398. int y = check->frameGeometry().y();
  399. QModelIndex index = ui->tableWidget_event->indexAt(QPoint(x,y));
  400. int row = index.row();
  401. int column = index.column();
  402. //修改数据
  403. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  404. int statusIndex = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text());
  405. ElemPropertyData::EventConfig &eventData = elem->statusConfig[statusIndex].eventConfig[row];
  406. //是否需要颜色一致
  407. if(column == 1){
  408. if(state == 0) eventData.consisColor = false;
  409. else eventData.consisColor = true;
  410. std::cout<<"颜色是否需要一致状态:"<<state<<std::endl;
  411. }
  412. else if(column == 4){
  413. if(state == 0) eventData.elimATLattices = false;
  414. else eventData.elimATLattices = true;
  415. std::cout<<"根据格子数量消除状态:"<<state<<std::endl;
  416. }
  417. std::cout<<"row:"<<row<<"\tcolumn:"<<column<<std::endl;
  418. }
  419. ///事件配置ComboBox选择发生改变
  420. void MainWindow::onEventBoxTextChanged(const QString &arg1)
  421. {
  422. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
  423. //获取特效列表所在位置
  424. QComboBox *box = dynamic_cast<QComboBox*>(this->sender());
  425. int x = box->frameGeometry().x();
  426. int y = box->frameGeometry().y();
  427. QModelIndex index = ui->tableWidget_event->indexAt(QPoint(x,y));
  428. int row = index.row();
  429. int column = index.column();
  430. //修改数据
  431. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  432. int statusIndex = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text());
  433. QVector<ElemPropertyData::EventConfig> &eventTable = elem->statusConfig[statusIndex].eventConfig;
  434. if(column == 0) eventTable[row].name = arg1;
  435. else if(column == 3) eventTable[row].specialEffect = arg1;
  436. else if(column == 5) eventTable[row].triggerAction = arg1;
  437. std::cout<<"row:"<<row<<"\tcolumn:"<<column<<std::endl;
  438. }
  439. ///动作配置中的设置点击后
  440. void MainWindow::onSetActionButtonClicked()
  441. {
  442. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
  443. //获取设置按钮所在位置
  444. QPushButton *button = dynamic_cast<QPushButton*>(this->sender());
  445. int x = button->frameGeometry().x();
  446. int y = button->frameGeometry().y();
  447. QModelIndex index = ui->tableWidget_event->indexAt(QPoint(x,y));
  448. int row = index.row();
  449. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  450. int statusIndex = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text());
  451. QVector<ElemPropertyData::EventConfig> &eventTable = elem->statusConfig[statusIndex].eventConfig;
  452. QString action = eventTable[row].triggerAction;
  453. std::cout<<"row:"<<row<<std::endl;
  454. std::cout<<qPrintable(action)<<std::endl;
  455. createSetWindow(action,row);
  456. }
  457. ///点击动作配置的设置按钮后生成新窗口
  458. void MainWindow::createSetWindow(QString actionName,int row)
  459. {
  460. QVector<ReadJsonSrc::Template> tempVec = jsonTemp->templateMap["actionTemp"];
  461. int index = jsonTemp->getTemplateIndex("actionTemp",actionName);
  462. if(index == -1){
  463. std::cout<<"未找到"<<qPrintable(actionName)<<"该动作配置模板"<<std::endl;
  464. return;
  465. }
  466. QVector<ReadJsonSrc::Fields> fields = tempVec[index].fields;
  467. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  468. //由于目前list只有动画,所以只做了一种情况;后期如果有多种list,可以将函数参数改为map
  469. QStringList list;
  470. for(const auto &i:elem->statusEffect) list.push_back(i.name);
  471. ActionSettingDialog setDialog;
  472. QMap<QString,QString> &dataMap = elem->statusConfig[ui->listWidget_status->currentRow()].eventConfig[row].actionConfig;
  473. setDialog.setDialogUi(fields,dataMap,list);
  474. setDialog.exec();
  475. if(!setDialog.dataMap.empty()) dataMap = setDialog.dataMap;
  476. }
  477. void MainWindow::on_pushButton_addAnimation_clicked()
  478. {
  479. if(ui->listWidget_elem->currentItem()==nullptr) return;
  480. int rowNum = ui->tableWidget_animation->rowCount();
  481. ui->tableWidget_animation->insertRow(rowNum);
  482. QString elemName = ui->listWidget_elem->currentItem()->text();
  483. ElemPropertyData* elem = elements[elemName];
  484. QString animName = "anim";
  485. int id = 1;
  486. while(1){
  487. if(elem->isSingleAnimName(animName)){
  488. break;
  489. }
  490. animName = "anim" + QString::number(id++);
  491. }
  492. ui->tableWidget_animation->setItem(rowNum,0,new QTableWidgetItem(animName));
  493. QTableWidgetItem* res = new QTableWidgetItem("双击添加资源文件");
  494. // 此单元格不可编辑
  495. res->setFlags(res->flags() & ~Qt::ItemIsEditable);
  496. ui->tableWidget_animation->setItem(rowNum,1,res);
  497. ui->tableWidget_animation->setCellWidget(rowNum,2,createBox("",{}));
  498. ui->tableWidget_animation->setItem(rowNum,3,new QTableWidgetItem("0"));
  499. elem->statusEffect.push_back(ElemPropertyData::StatusEffect(animName));
  500. //更新与动画相关的下拉选项
  501. ui->comboBox_initAnim->addItem(animName);
  502. ui->comboBox_clickAnim->addItem(animName);
  503. ui->comboBox_animation->addItem(animName);
  504. //更新状态配置表格当前状态的特效下拉选项
  505. if(ui->listWidget_status->currentItem() != nullptr){
  506. int rowNum = ui->tableWidget_event->rowCount();
  507. for(int i=0;i<rowNum;i++){
  508. QComboBox *effect = qobject_cast<QComboBox*>(ui->tableWidget_event->cellWidget(i,3));
  509. effect->addItem(animName);
  510. }
  511. }
  512. }
  513. void MainWindow::on_pushButton_delAnimation_clicked()
  514. {
  515. if(ui->listWidget_elem->currentItem() == nullptr || ui->tableWidget_animation->currentRow() == -1) return;
  516. QMessageBox::StandardButton reply = QMessageBox::question(this,"删除动画","确定要删除此动画吗?");
  517. if(reply == QMessageBox::Yes){
  518. int curRow = ui->tableWidget_animation->currentRow();
  519. QString animName = ui->tableWidget_animation->item(curRow,0)->text();
  520. QVector<ElemPropertyData::StatusEffect> &animVec = elements[ui->listWidget_elem->currentItem()->text()]->statusEffect;
  521. animVec.remove(curRow);
  522. ui->tableWidget_animation->removeRow(curRow);
  523. //更新动画相关的下拉选项
  524. updateAnimComboBox(animName);
  525. ui->comboBox_initAnim->removeItem(ui->comboBox_initAnim->findText(animName));
  526. ui->comboBox_clickAnim->removeItem(ui->comboBox_clickAnim->findText(animName));
  527. ui->comboBox_animation->removeItem(ui->comboBox_animation->findText(animName));
  528. }
  529. }
  530. void MainWindow::on_tableWidget_animation_itemChanged(QTableWidgetItem *item)
  531. {
  532. if(!animTableItemChanged) return;
  533. animTableItemChanged = false;
  534. int column = item->column();
  535. int row = item->row();
  536. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  537. QVector<ElemPropertyData::StatusEffect> &animVec = elem->statusEffect;
  538. if(column == 0){
  539. QString newName = ui->tableWidget_animation->item(row,0)->text();
  540. if(!elem->isSingleAnimName(newName)){
  541. QMessageBox::critical(this,"警告","该动画名已存在!");
  542. ui->tableWidget_animation->item(row,0)->setText(animVec[row].name);
  543. return;
  544. }
  545. std::cout<<"名字发生改变,新名字:"<<qPrintable(newName)<<std::endl;
  546. //更新动画相关的下拉选项
  547. updateAnimComboBox(animVec[row].name);
  548. ui->comboBox_initAnim->removeItem(ui->comboBox_initAnim->findText(animVec[row].name));
  549. ui->comboBox_clickAnim->removeItem(ui->comboBox_clickAnim->findText(animVec[row].name));
  550. ui->comboBox_animation->removeItem(ui->comboBox_animation->findText(animVec[row].name));
  551. ui->comboBox_initAnim->addItem(newName);
  552. ui->comboBox_clickAnim->addItem(newName);
  553. ui->comboBox_animation->addItem(newName);
  554. animVec[row].name = newName;
  555. }
  556. //资源名发生修改
  557. else if(column == 1){
  558. std::cout<<"动画资源发生改变,新资源名:"<<qPrintable(ui->tableWidget_animation->item(row,1)->text())<<std::endl;
  559. }
  560. else{
  561. bool ok;double a = ui->tableWidget_animation->item(row,3)->text().toDouble(&ok);
  562. int zOrder = ui->tableWidget_animation->item(row,3)->text().toInt();
  563. if(!ok || zOrder<0 || zOrder>100000){
  564. QMessageBox::critical(this,"警告","z-Order值超出范围!");
  565. ui->tableWidget_animation->item(row,3)->setText(animVec[row].zOrder);
  566. return;
  567. }
  568. std::cout<<"z-Order值发生改变,新值为:"<<zOrder<<std::endl;
  569. animVec[row].zOrder = item->text();
  570. }
  571. }
  572. void MainWindow::on_pushButton_addCollectAnim_clicked()
  573. {
  574. if(ui->listWidget_elem->currentItem() == nullptr) return;
  575. QString collAnimName = "collAnim";
  576. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  577. int id = 1;
  578. while(1){
  579. if(elem->getCollAnimIndex(collAnimName) == -1){
  580. break;
  581. }
  582. collAnimName = "collAnim" + QString::number(id++);
  583. }
  584. ui->listWidget_collectAnim->addItem(new QListWidgetItem(collAnimName));
  585. ElemPropertyData::CollAnim collAnim(collAnimName);
  586. elem->collAnim.push_back(collAnim);
  587. ui->comboBox_collectAnimation->addItem(collAnimName);
  588. // ui->listWidget_collectAnim->item(ui->listWidget_collectAnim->count() - 1)->setSelected(true); // 设置选中
  589. // ui->listWidget_collectAnim->scrollToBottom();
  590. }
  591. void MainWindow::on_pushButton_delCollectAnim_clicked()
  592. {
  593. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_collectAnim->currentItem() == nullptr) return;
  594. QMessageBox::StandardButton reply = QMessageBox::question(this,"删除收集动画","确定要删除此收集动画吗?");
  595. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  596. if(reply == QMessageBox::Yes){
  597. QString delName = ui->listWidget_collectAnim->currentItem()->text();
  598. QVector<ElemPropertyData::CollAnim> &collAnimVec = elem->collAnim;
  599. collAnimVec.remove(ui->listWidget_collectAnim->currentRow());
  600. delete ui->listWidget_collectAnim->takeItem(ui->listWidget_collectAnim->currentRow());
  601. updateCollAnimComboBox(delName);
  602. ui->comboBox_collectAnimation->removeItem(ui->comboBox_collectAnimation->findText(delName));
  603. }
  604. }
  605. void MainWindow::on_listWidget_collectAnim_itemDoubleClicked(QListWidgetItem *item)
  606. {
  607. ChangeNameDialog newName;
  608. newName.setModal(true);
  609. newName.exec();
  610. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  611. QString name = newName.getNewName();
  612. if(!name.isEmpty()){
  613. if(elem->getCollAnimIndex(name) != -1){
  614. QMessageBox::critical(this,"警告","该收集动画名已存在!");
  615. return;
  616. }
  617. updateCollAnimComboBox(item->text());
  618. ui->comboBox_collectAnimation->removeItem(ui->comboBox_collectAnimation->findText(item->text()));
  619. ui->comboBox_collectAnimation->addItem(name);
  620. elem->collAnim[elem->getCollAnimIndex(item->text())].name = name;
  621. item->setText(name);
  622. }
  623. }
  624. void MainWindow::on_comboBox_animationType_currentTextChanged(const QString &arg1)
  625. {
  626. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_collectAnim->currentItem() == nullptr || isSetUi) return;
  627. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  628. int index = ui->listWidget_collectAnim->currentRow();
  629. elem->collAnim[index].type = arg1;
  630. std::cout<<"收集动画第"<<index<<"行动画类型改变:"<<qPrintable(arg1)<<std::endl;
  631. elem->collAnim[index].dataMap.clear();
  632. setCollAnimWidget();
  633. }
  634. ///设置收集动画动态界面
  635. void MainWindow::setCollAnimWidget()
  636. {
  637. QString animType = ui->comboBox_animationType->currentText();
  638. QFormLayout* formlayout = dynamic_cast<QFormLayout*>(ui->widget_dynamic->layout());
  639. int rowCout = formlayout->rowCount();
  640. for(int i=0;i<rowCout;i++) formlayout->removeRow(0);
  641. if(animType == "尚未选择") return;
  642. int index = jsonTemp->getTemplateIndex("collAnimTemp",animType);
  643. if(index == -1) {
  644. std::cout<<"未找到"<<qPrintable(animType)<<"收集动画类型对应模板"<<std::endl;
  645. return;
  646. }
  647. QVector<ReadJsonSrc::Template> tempVec = jsonTemp->templateMap["collAnimTemp"];
  648. QVector<ReadJsonSrc::Fields> fields = tempVec[index].fields;
  649. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  650. QMap<QString,QString> &data = elem->collAnim[ui->listWidget_collectAnim->currentRow()].dataMap;
  651. for(const auto &i:fields){
  652. if(i.type == "list"){
  653. QStringList list;
  654. if(i.src == "animations"){
  655. for(const auto &anim:elem->statusEffect) list.push_back(anim.name);
  656. }
  657. QString val;
  658. if(data.find(i.name) != data.end()) val = data[i.name];
  659. else val = i.defaultVal;
  660. QComboBox* combo = createBox(val,list);
  661. connect(combo,SIGNAL(currentTextChanged(QString)),this,SLOT(onComboBoxTextChanged(QString)));
  662. formlayout->addRow(i.name,combo);
  663. data[i.name] = val;
  664. }
  665. else if(i.type == "input"){
  666. QString val;
  667. if(data.find(i.name) != data.end()) val = data[i.name];
  668. else val = i.defaultVal;
  669. QLineEdit* edit = new QLineEdit(val);
  670. connect(edit,SIGNAL(editingFinished()),this,SLOT(onLineEditTextChanged()));
  671. formlayout->addRow(i.name,edit);
  672. data[i.name] = val;
  673. }
  674. }
  675. }
  676. ///收集动画动态界面下拉选项数据变化时
  677. void MainWindow::onComboBoxTextChanged(QString arg)
  678. {
  679. QComboBox *box = dynamic_cast<QComboBox*>(this->sender());
  680. QFormLayout* formlayout = dynamic_cast<QFormLayout*>(ui->widget_dynamic->layout());
  681. QLabel *label = dynamic_cast<QLabel*>(formlayout->labelForField(box));
  682. std::cout<<qPrintable(label->text())<<": "<<qPrintable(arg)<<std::endl;
  683. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  684. elem->collAnim[ui->listWidget_collectAnim->currentRow()].dataMap[label->text()] = arg;
  685. }
  686. ///收集动画动态界面单行编辑数据变化时
  687. void MainWindow::onLineEditTextChanged()
  688. {
  689. QLineEdit *edit = dynamic_cast<QLineEdit*>(this->sender());
  690. QFormLayout* formlayout = dynamic_cast<QFormLayout*>(ui->widget_dynamic->layout());
  691. QLabel *label = dynamic_cast<QLabel*>(formlayout->labelForField(edit));
  692. std::cout<<qPrintable(label->text())<<": "<<qPrintable(edit->text())<<std::endl;
  693. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  694. elem->collAnim[ui->listWidget_collectAnim->currentRow()].dataMap[label->text()] = edit->text();
  695. }
  696. void MainWindow::on_comboBox_animation_currentTextChanged(const QString &arg1)
  697. {
  698. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_collectAnim->currentItem() == nullptr || isSetUi) return;
  699. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  700. int index = ui->listWidget_collectAnim->currentRow();
  701. elem->collAnim[index].anim = arg1;
  702. }
  703. //设置收集动画显示
  704. void MainWindow::setCollectAnimUi(QString collectAnimName)
  705. {
  706. if(ui->listWidget_collectAnim->currentItem() != nullptr){
  707. isSetUi = true;
  708. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  709. ElemPropertyData::CollAnim collAnimData = elem->collAnim[elem->getCollAnimIndex(collectAnimName)];
  710. int typeIndex = ui->comboBox_animationType->findText(collAnimData.type);
  711. if(typeIndex == -1){
  712. typeIndex = 0;
  713. elem->collAnim[ui->listWidget_collectAnim->currentRow()].type = "尚未选择";
  714. }
  715. ui->comboBox_animationType->setCurrentIndex(typeIndex);
  716. setCollAnimWidget();
  717. int index = ui->comboBox_animation->findText(collAnimData.anim);
  718. if(index == -1) index = 0;
  719. ui->comboBox_animation->setCurrentIndex(index);
  720. isSetUi = false;
  721. }
  722. }
  723. void MainWindow::on_listWidget_collectAnim_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
  724. {
  725. //TODO: 或许需要另外保存当前界面的数据
  726. if(current != nullptr){
  727. setCollectAnimUi(current->text());
  728. }
  729. }
  730. //生成模板并更新状态配置的数据
  731. void MainWindow::on_pushButton_genTemp_clicked()
  732. {
  733. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->count() > 0) return;
  734. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  735. for(int i=0;i<elem->maxLayer.toInt();i++){
  736. ui->listWidget_status->addItem(QString::number(i));
  737. ElemPropertyData::StatusConfig status(QString::number(i));
  738. elem->statusConfig.push_back(status);
  739. }
  740. }
  741. //添加状态,若已经生成最大层数全部状态则按钮无效
  742. void MainWindow::on_pushButton_addStatus_clicked()
  743. {
  744. if(ui->listWidget_elem->currentItem() == nullptr) return;
  745. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  746. QString statusName;
  747. for(int i=0;i<elem->maxLayer.toInt();i++){
  748. if(elem->getStatusValIndex(QString::number(i)) == -1){
  749. statusName = QString::number(i);
  750. break;
  751. }
  752. }
  753. if(!statusName.isEmpty()){
  754. ui->listWidget_status->addItem(statusName);
  755. ElemPropertyData::StatusConfig status(statusName);
  756. elem->statusConfig.push_back(status);
  757. }
  758. }
  759. //TODO: 删除状态值对应的数据
  760. void MainWindow::on_pushButton_delStatus_clicked()
  761. {
  762. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
  763. QMessageBox::StandardButton reply = QMessageBox::question(this,"删除状态","确定要删除此状态吗?");
  764. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  765. if(reply == QMessageBox::Yes){
  766. for(int i=0;i<elem->statusConfig.size();i++){
  767. if(elem->statusConfig[i].statusValue == ui->listWidget_status->currentItem()->text()){
  768. elem->statusConfig.remove(i);
  769. break;
  770. }
  771. }
  772. delete ui->listWidget_status->takeItem(ui->listWidget_status->currentRow());
  773. }
  774. }
  775. //修改状态值,检查修改后的状态值是否合法,并转移数据
  776. void MainWindow::on_listWidget_status_itemDoubleClicked(QListWidgetItem *item)
  777. {
  778. ChangeNameDialog newName;
  779. newName.setModal(true);
  780. newName.exec();
  781. QString name = newName.getNewName();
  782. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  783. if(!name.isEmpty()){
  784. //TODO: 检查状态值合法性并转移数据
  785. bool isNum;double tmp = name.toDouble(&isNum);
  786. int maxlayer = ui->lineEdit_maxlayer->text().toInt();
  787. int statusNum = name.toInt();
  788. if(!isNum ||statusNum < 0 || statusNum >= maxlayer){
  789. QMessageBox::critical(this,"错误","状态值必须是大于等于0且小于最大层数的数字");
  790. return;
  791. }
  792. if(elem->getStatusValIndex(name) == -1){
  793. QMessageBox::critical(this,"警告","该状态值已存在");
  794. return;
  795. }
  796. int index = elem->getStatusValIndex(item->text());
  797. elem->statusConfig[index].statusValue = name;
  798. item->setText(name);
  799. }
  800. }
  801. void MainWindow::on_pushButton_addContainer_clicked()
  802. {
  803. if(ui->listWidget_elem->currentItem() == nullptr) return;
  804. QString poolName = "pool";
  805. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  806. int id = 1;
  807. while(1){
  808. if(elem->getPoolIndex(poolName) == -1){
  809. break;
  810. }
  811. poolName = "pool" + QString::number(id++);
  812. }
  813. ui->listWidget_pool->addItem(new QListWidgetItem(poolName));
  814. ElemPropertyData::ContainerConfig container(poolName);
  815. elem->container.push_back(container);
  816. //子元素下拉列表添加可选项
  817. int rowNum = ui->tableWidget_childElem->rowCount();
  818. for(int i=0;i<rowNum;i++){
  819. QComboBox *containers = qobject_cast<QComboBox*>(ui->tableWidget_childElem->cellWidget(i,1));
  820. containers->addItem(poolName);
  821. }
  822. }
  823. void MainWindow::on_pushButton_delContainer_clicked()
  824. {
  825. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr) return;
  826. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  827. QMessageBox::StandardButton reply = QMessageBox::question(this,"删除容器","确定要删除此容器吗?");
  828. if(reply == QMessageBox::Yes){
  829. QString delPoolName = ui->listWidget_pool->currentItem()->text();
  830. int index = ui->listWidget_pool->currentRow();
  831. elem->container.remove(index);
  832. delete ui->listWidget_pool->takeItem(ui->listWidget_pool->currentRow());
  833. //子元素下拉列表删除可选项
  834. int rowNum = ui->tableWidget_childElem->rowCount();
  835. for(int i=0;i<rowNum;i++){
  836. QComboBox *containers = qobject_cast<QComboBox*>(ui->tableWidget_childElem->cellWidget(i,1));
  837. if(elem->childElem[i].container == delPoolName) containers->setCurrentIndex(0);
  838. containers->removeItem(containers->findText(delPoolName));
  839. }
  840. }
  841. }
  842. void MainWindow::on_listWidget_pool_itemDoubleClicked(QListWidgetItem *item)
  843. {
  844. if(ui->listWidget_elem->currentItem() == nullptr) return;
  845. ChangeNameDialog newName;
  846. newName.setModal(true);
  847. newName.exec();
  848. QString name = newName.getNewName();
  849. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  850. if(!name.isEmpty()){
  851. //TODO: 检查新名字唯一性
  852. if(elem->getPoolIndex(name) != -1){
  853. QMessageBox::critical(this,"警告","该容器名已存在!");
  854. return;
  855. }
  856. int index = elem->getPoolIndex(item->text());
  857. //子元素下拉列表可选项改名
  858. int rowNum = ui->tableWidget_childElem->rowCount();
  859. for(int i=0;i<rowNum;i++){
  860. QComboBox *containers = qobject_cast<QComboBox*>(ui->tableWidget_childElem->cellWidget(i,1));
  861. if(elem->childElem[i].container == elem->container[index].poolName) containers->setCurrentIndex(0);
  862. containers->removeItem(containers->findText(elem->container[index].poolName));
  863. containers->addItem(name);
  864. }
  865. elem->container[index].poolName = name;
  866. item->setText(name);
  867. }
  868. }
  869. void MainWindow::on_listWidget_pool_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
  870. {
  871. //TODO:保存切换前界面数据
  872. if(current != nullptr){
  873. setPoolUi(current->text());
  874. }
  875. }
  876. void MainWindow::on_pushButton_addKey_clicked()
  877. {
  878. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr) return;
  879. int rowNum = ui->tableWidget_containerPool->rowCount();
  880. ui->tableWidget_containerPool->insertRow(rowNum);
  881. QString keyName = "0";
  882. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  883. int id = 1;
  884. while(1){
  885. if(elem->isSingleContainerKey(ui->listWidget_pool->currentItem()->text(),keyName)){
  886. break;
  887. }
  888. keyName = QString::number(id++);
  889. }
  890. ui->tableWidget_containerPool->setItem(rowNum,0,new QTableWidgetItem(keyName));
  891. QTableWidgetItem* res = new QTableWidgetItem("双击添加资源文件");
  892. // 此单元格不可编辑
  893. res->setFlags(res->flags() & ~Qt::ItemIsEditable);
  894. ui->tableWidget_containerPool->setItem(rowNum,1,res);
  895. for(int i=2;i<=5;i++){
  896. ui->tableWidget_containerPool->setCellWidget(rowNum,i,createBox("",{}));
  897. }
  898. ui->tableWidget_containerPool->setItem(rowNum,3,new QTableWidgetItem("0"));
  899. int index = ui->listWidget_pool->currentRow();
  900. ElemPropertyData::ContainTable containTable(keyName);
  901. elem->container[index].table.push_back(containTable);
  902. }
  903. void MainWindow::on_pushButton_delKey_clicked()
  904. {
  905. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr || ui->tableWidget_containerPool->currentRow() == -1) return;
  906. QMessageBox::StandardButton reply = QMessageBox::question(this,"删除键值","确定要删除此键值吗?");
  907. if(reply == QMessageBox::Yes){
  908. int curRow = ui->tableWidget_containerPool->currentRow();
  909. QString containerName = ui->tableWidget_containerPool->item(curRow,0)->text();
  910. ElemPropertyData* elem =elements[ui->listWidget_elem->currentItem()->text()];
  911. int index = ui->listWidget_pool->currentRow();
  912. QVector<ElemPropertyData::ContainTable> &containerTable = elem->container[index].table;
  913. containerTable.remove(curRow);
  914. ui->tableWidget_containerPool->removeRow(curRow);
  915. }
  916. }
  917. void MainWindow::setPoolUi(QString poolName)
  918. {
  919. if(ui->listWidget_elem->currentItem() == nullptr) return;
  920. isSetUi = true;
  921. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  922. ElemPropertyData::ContainerConfig poolData = elem->container[elem->getPoolIndex(poolName)];
  923. int contIndex = ui->comboBox_container->findText(poolData.type);
  924. if(contIndex == -1) contIndex=0;
  925. ui->comboBox_container->setCurrentIndex(contIndex);
  926. int rowNum = ui->tableWidget_containerPool->rowCount();
  927. for(int i=0;i<rowNum;i++){
  928. ui->tableWidget_containerPool->removeRow(0);
  929. }
  930. for(const auto &i:poolData.table){
  931. int rowNum = ui->tableWidget_containerPool->rowCount();
  932. ui->tableWidget_containerPool->insertRow(rowNum);
  933. ui->tableWidget_containerPool->setItem(rowNum,0,new QTableWidgetItem(i.key));
  934. QTableWidgetItem* res = new QTableWidgetItem(getFileName(i.res));
  935. // 此单元格不可编辑
  936. res->setFlags(res->flags() & ~Qt::ItemIsEditable);
  937. ui->tableWidget_containerPool->setItem(rowNum,1,res);
  938. ui->tableWidget_containerPool->setCellWidget(rowNum,2,createTimelineBox(i.initTimeline,i.res,TimelineType::Pool));
  939. ui->tableWidget_containerPool->setCellWidget(rowNum,3,createTimelineBox(i.clickTimeline,i.res,TimelineType::Pool));
  940. ui->tableWidget_containerPool->setCellWidget(rowNum,4,createTimelineBox(i.effectTimeline,i.res,TimelineType::Pool));
  941. ui->tableWidget_containerPool->setCellWidget(rowNum,5,createTimelineBox(i.vanishTimeline,i.res,TimelineType::Pool));
  942. ui->tableWidget_containerPool->setItem(rowNum,6,new QTableWidgetItem(i.zOrder));
  943. }
  944. isSetUi = false;
  945. }
  946. void MainWindow::on_tableWidget_containerPool_cellDoubleClicked(int row, int column)
  947. {
  948. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr) return;
  949. //容器表格内容修改flag
  950. poolTableItemChanged = true;
  951. if(column == 1){
  952. ResFileDialog res;
  953. res.setModal(true);
  954. res.exec();
  955. QString fileName = res.getResName();
  956. if(!fileName.isEmpty()){
  957. ui->tableWidget_containerPool->setItem(row,column,new QTableWidgetItem(getFileName(fileName)));
  958. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  959. int index = ui->listWidget_pool->currentRow();
  960. elem->container[index].table[row].res = fileName;
  961. //加载时间线下拉列表
  962. for(int i=2;i<=5;i++){
  963. QComboBox* timeline = createTimelineBox("",fileName,TimelineType::Pool);
  964. ui->tableWidget_containerPool->setCellWidget(row,i,timeline);
  965. }
  966. }
  967. }
  968. }
  969. void MainWindow::on_tableWidget_containerPool_itemChanged(QTableWidgetItem *item)
  970. {
  971. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr) return;
  972. if(!poolTableItemChanged) return;
  973. poolTableItemChanged = false;
  974. int column = item->column();
  975. int row = item->row();
  976. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  977. int index = ui->listWidget_pool->currentRow();
  978. QVector<ElemPropertyData::ContainTable> &containerVec = elem->container[index].table;
  979. if(column == 0){
  980. bool isNum;double tmp = item->text().toDouble(&isNum);
  981. if(item->text().toInt() < 0 || !isNum){
  982. QMessageBox::critical(this,"错误","键值必须是大于等于0的数字");
  983. item->setText(containerVec[row].key);
  984. return;
  985. }
  986. if(!elem->isSingleContainerKey(ui->listWidget_pool->currentItem()->text(),item->text())){
  987. QMessageBox::critical(this,"警告","该键值已存在!");
  988. item->setText(containerVec[row].key);
  989. return;
  990. }
  991. containerVec[row].key = item->text();
  992. }
  993. //检查zOrder合法性
  994. else if(column == 6){
  995. QString zOrder = item->text();
  996. bool isNum;double tmp = zOrder.toDouble(&isNum);
  997. if(item->text().toInt() < 0 || !isNum){
  998. QMessageBox::critical(this,"错误","消失zOrder值必须是大于等于0的数字");
  999. item->setText(containerVec[row].zOrder);
  1000. return;
  1001. }
  1002. containerVec[row].zOrder = zOrder;
  1003. }
  1004. }
  1005. void MainWindow::on_pushButton_addChildElem_clicked()
  1006. {
  1007. if(ui->listWidget_elem->currentItem() == nullptr) return;
  1008. int rowNum = ui->tableWidget_childElem->rowCount();
  1009. ui->tableWidget_childElem->insertRow(rowNum);
  1010. QString childElemName = "item";
  1011. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  1012. int id = 1;
  1013. while(1){
  1014. if(elem->isSingleChildElemName(childElemName)){
  1015. break;
  1016. }
  1017. childElemName = "item" + QString::number(id++);
  1018. }
  1019. ui->tableWidget_childElem->setItem(rowNum,0,new QTableWidgetItem(childElemName));
  1020. ui->tableWidget_childElem->setCellWidget(rowNum,1,createPoolBox("尚未选择"));
  1021. elem->childElem.push_back(ElemPropertyData::ChildElem(childElemName));
  1022. }
  1023. void MainWindow::on_pushButton_delChildElem_clicked()
  1024. {
  1025. if(ui->listWidget_elem->currentItem() == nullptr || ui->tableWidget_childElem->currentRow() == -1) return;
  1026. QMessageBox::StandardButton reply = QMessageBox::question(this,"删除子元素","确定要删除此子元素吗?");
  1027. if(reply == QMessageBox::Yes){
  1028. int curRow = ui->tableWidget_childElem->currentRow();
  1029. QString childElemName = ui->tableWidget_childElem->item(curRow,0)->text();
  1030. QVector<ElemPropertyData::ChildElem> &childElemVec = elements[ui->listWidget_elem->currentItem()->text()]->childElem;
  1031. childElemVec.remove(curRow);
  1032. ui->tableWidget_childElem->removeRow(curRow);
  1033. }
  1034. }
  1035. void MainWindow::on_tableWidget_childElem_itemChanged(QTableWidgetItem *item)
  1036. {
  1037. if(ui->listWidget_elem->currentItem() == nullptr) return;
  1038. if(!childElemTableItemChanged) return;
  1039. childElemTableItemChanged = false;
  1040. int column = item->column();
  1041. int row = item->row();
  1042. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  1043. QVector<ElemPropertyData::ChildElem> &childElemVec = elem->childElem;
  1044. if(column == 0){
  1045. if(!elem->isSingleChildElemName(item->text())){
  1046. QMessageBox::critical(this,"警告","该子元素名已存在!");
  1047. item->setText(childElemVec[row].name);
  1048. return;
  1049. }
  1050. childElemVec[row].name = item->text();
  1051. }
  1052. //TODO: comboBox值修改后的保存
  1053. }
  1054. void MainWindow::on_tableWidget_childElem_cellDoubleClicked(int row, int column)
  1055. {
  1056. if(ui->listWidget_elem->currentItem() == nullptr) return;
  1057. //子元素表格双击改名置flag为true
  1058. childElemTableItemChanged = true;
  1059. }
  1060. void MainWindow::on_checkBox_multiHit_stateChanged(int arg1)
  1061. {
  1062. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr || isSetUi) return;
  1063. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  1064. int index = ui->listWidget_status->currentRow();
  1065. if(arg1){
  1066. elem->statusConfig[index].multiHit = true;
  1067. }
  1068. else{
  1069. elem->statusConfig[index].multiHit = false;
  1070. }
  1071. }
  1072. void MainWindow::on_checkBox_dropable_stateChanged(int arg1)
  1073. {
  1074. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr || isSetUi) return;
  1075. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  1076. int index = ui->listWidget_status->currentRow();
  1077. if(arg1){
  1078. elem->statusConfig[index].dropable = true;
  1079. }
  1080. else{
  1081. elem->statusConfig[index].dropable = false;
  1082. }
  1083. }
  1084. void MainWindow::on_checkBox_needCollect_stateChanged(int arg1)
  1085. {
  1086. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr || isSetUi) return;
  1087. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  1088. int index = ui->listWidget_status->currentRow();
  1089. if(arg1){
  1090. elem->statusConfig[index].needCollect = true;
  1091. ui->lineEdit_collectionType->setReadOnly(false);
  1092. }
  1093. else{
  1094. elem->statusConfig[index].needCollect = false;
  1095. ui->lineEdit_collectionType->setReadOnly(true);
  1096. }
  1097. }
  1098. void MainWindow::on_lineEdit_collectionType_editingFinished()
  1099. {
  1100. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
  1101. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  1102. int index = ui->listWidget_status->currentRow();
  1103. ElemPropertyData::StatusConfig &data = elem->statusConfig[index];
  1104. data.collTargetType = ui->lineEdit_collectionType->text();
  1105. std::cout<<"收集的目标类型"<<qPrintable(data.collTargetType)<<std::endl;
  1106. }
  1107. void MainWindow::on_pushButton_addEvent_clicked()
  1108. {
  1109. if(ui->listWidget_elem->currentItem()==nullptr || ui->listWidget_status->currentItem() == nullptr) return;
  1110. int rowNum = ui->tableWidget_event->rowCount();
  1111. ui->tableWidget_event->insertRow(rowNum);
  1112. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  1113. ElemPropertyData::EventConfig event;
  1114. int index = ui->listWidget_status->currentRow();
  1115. elem->statusConfig[index].eventConfig.push_back(event);
  1116. ui->tableWidget_event->setCellWidget(rowNum,0,createEventBox("尚未选择"));
  1117. ui->tableWidget_event->setCellWidget(rowNum,1,createCheckBox(false));
  1118. ui->tableWidget_event->setCellWidget(rowNum,3,createEffectBox("尚未选择"));
  1119. ui->tableWidget_event->setCellWidget(rowNum,4,createCheckBox(false));
  1120. ui->tableWidget_event->setCellWidget(rowNum,5,createTriggerAction("尚未选择"));
  1121. ui->tableWidget_event->setCellWidget(rowNum,6,createSetButton());
  1122. }
  1123. void MainWindow::on_listWidget_status_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
  1124. {
  1125. if(ui->listWidget_elem->currentItem() == nullptr || current == nullptr) return;
  1126. isSetUi = true;
  1127. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  1128. int index = elem->getStatusValIndex(current->text());
  1129. ElemPropertyData::StatusConfig statusData = elem->statusConfig[index];
  1130. int comboIndex;
  1131. //初始化动画
  1132. comboIndex = ui->comboBox_initAnim->findText(statusData.initAnim);
  1133. if(comboIndex == -1) comboIndex = 0;
  1134. ui->comboBox_initAnim->setCurrentIndex(comboIndex);
  1135. //点击动画
  1136. comboIndex = ui->comboBox_clickAnim->findText(statusData.clickAnim);
  1137. if(comboIndex == -1) comboIndex = 0;
  1138. ui->comboBox_clickAnim->setCurrentIndex(comboIndex);
  1139. //收集动画
  1140. comboIndex = ui->comboBox_collectAnimation->findText(statusData.collAnim);
  1141. if(comboIndex == -1) comboIndex = 0;
  1142. ui->comboBox_collectAnimation->setCurrentIndex(comboIndex);
  1143. //多重打击
  1144. if(statusData.multiHit) ui->checkBox_multiHit->setCheckState(Qt::Checked);
  1145. else ui->checkBox_multiHit->setCheckState(Qt::Unchecked);
  1146. //可掉落
  1147. if(statusData.dropable) ui->checkBox_multiHit->setCheckState(Qt::Checked);
  1148. else ui->checkBox_dropable->setCheckState(Qt::Unchecked);
  1149. //是否需要收集
  1150. ui->lineEdit_collectionType->clear();
  1151. if(statusData.needCollect){
  1152. ui->checkBox_needCollect->setCheckState(Qt::Checked);
  1153. ui->lineEdit_collectionType->setReadOnly(false);
  1154. std::cout<<"收集的目标类型"<<qPrintable(statusData.collTargetType)<<std::endl;
  1155. ui->lineEdit_collectionType->setText(statusData.collTargetType);
  1156. }
  1157. else{
  1158. ui->checkBox_needCollect->setCheckState(Qt::Unchecked);
  1159. ui->lineEdit_collectionType->setReadOnly(true);
  1160. }
  1161. //事件配置
  1162. int rowNum = ui->tableWidget_event->rowCount();
  1163. for(int i=0;i<rowNum;i++){
  1164. ui->tableWidget_event->removeRow(0);
  1165. }
  1166. for(const auto &i:statusData.eventConfig){
  1167. rowNum = ui->tableWidget_event->rowCount();
  1168. ui->tableWidget_event->insertRow(rowNum);
  1169. //事件名称
  1170. ui->tableWidget_event->setCellWidget(rowNum,0,createEventBox(i.name));
  1171. std::cout<<"重置状态配置ui:事件名称:"<<qPrintable(i.name)<<std::endl;
  1172. //是否需要颜色一致
  1173. ui->tableWidget_event->setCellWidget(rowNum,1,createCheckBox(i.consisColor));
  1174. //tableWidget_event
  1175. ui->tableWidget_event->setItem(rowNum,2,new QTableWidgetItem(i.changeMagnitude));
  1176. //特效
  1177. ui->tableWidget_event->setCellWidget(rowNum,3,createEffectBox(i.specialEffect));
  1178. //根据格子数量消除
  1179. ui->tableWidget_event->setCellWidget(rowNum,4,createCheckBox(i.elimATLattices));
  1180. //触发动作
  1181. ui->tableWidget_event->setCellWidget(rowNum,5,createTriggerAction(i.triggerAction));
  1182. //触发动作设置
  1183. ui->tableWidget_event->setCellWidget(rowNum,6,createSetButton());
  1184. }
  1185. isSetUi = false;
  1186. }
  1187. void MainWindow::on_tableWidget_event_cellDoubleClicked(int row, int column)
  1188. {
  1189. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
  1190. if(column == 2) eventTableItemChanged = true;
  1191. }
  1192. //状态变化幅度合法性检查及数据保存
  1193. void MainWindow::on_tableWidget_event_itemChanged(QTableWidgetItem *item)
  1194. {
  1195. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
  1196. if(!eventTableItemChanged) return;
  1197. eventTableItemChanged = false;
  1198. int column = item->column();
  1199. int row = item->row();
  1200. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  1201. int index = ui->listWidget_status->currentRow();
  1202. QVector<ElemPropertyData::EventConfig> &eventVec = elem->statusConfig[index].eventConfig;
  1203. if(column == 2){
  1204. bool ok;double a = item->text().toDouble(&ok);
  1205. int val = item->text().toInt();
  1206. if(!ok || val<0){
  1207. QMessageBox::critical(this,"警告","状态变化幅度是大于0的数字");
  1208. ui->tableWidget_event->item(row,2)->setText(QString::number(eventVec[row].changeMagnitude));
  1209. return;
  1210. }
  1211. std::cout<<"状态变化幅度发生改变,新值为:"<<val<<std::endl;
  1212. eventVec[row].changeMagnitude = val;
  1213. }
  1214. }
  1215. void MainWindow::on_comboBox_initAnim_currentTextChanged(const QString &arg1)
  1216. {
  1217. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr || isSetUi) return;
  1218. std::cout<<"初始化动画:"<<qPrintable(arg1)<<std::endl;
  1219. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  1220. int index = ui->listWidget_status->currentRow();
  1221. elem->statusConfig[index].initAnim = arg1;
  1222. }
  1223. void MainWindow::on_comboBox_clickAnim_currentTextChanged(const QString &arg1)
  1224. {
  1225. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr || isSetUi) return;
  1226. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  1227. int index = ui->listWidget_status->currentRow();
  1228. elem->statusConfig[index].clickAnim = arg1;
  1229. }
  1230. void MainWindow::on_comboBox_collectAnimation_currentTextChanged(const QString &arg1)
  1231. {
  1232. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr || isSetUi) return;
  1233. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  1234. int index = ui->listWidget_status->currentRow();
  1235. elem->statusConfig[index].collAnim = arg1;
  1236. }
  1237. ///模板更新后更新与模板配置相关的界面显示
  1238. void MainWindow::updateTempRelatedUi()
  1239. {
  1240. isSetUi = true;
  1241. //收集动画
  1242. ui->comboBox_animationType->clear();
  1243. ui->comboBox_animationType->addItem("尚未选择");
  1244. for(const auto &i:jsonTemp->templateMap["collAnimTemp"]) ui->comboBox_animationType->addItem(i.name);
  1245. //状态配置
  1246. int rowNum = ui->tableWidget_event->rowCount();
  1247. for(int i=0;i<rowNum;i++){
  1248. //事件名称配置
  1249. ui->tableWidget_event->setCellWidget(i,0,createEventBox("尚未选择"));
  1250. ui->tableWidget_event->setCellWidget(i,5,createTriggerAction("尚未选择"));
  1251. }
  1252. //容器池
  1253. ui->comboBox_container->clear();
  1254. ui->comboBox_container->addItem("尚未选择");
  1255. for(const auto &i:jsonTemp->templateMap["poolTemp"]) ui->comboBox_container->addItem(i.name);
  1256. int animIndex = 0,poolIndex = 0;
  1257. //若当前界面选择的选项没有被改变,仍然保持当前选项
  1258. if(ui->listWidget_elem->currentItem() != nullptr){
  1259. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  1260. //收集动画
  1261. if(ui->listWidget_collectAnim->currentItem() != nullptr) {
  1262. int index = ui->listWidget_collectAnim->currentRow();
  1263. std::cout<<"当前选择的收集动画类型:"<<qPrintable(elem->collAnim[index].type)<<std::endl;
  1264. animIndex = ui->comboBox_animationType->findText(elem->collAnim[index].type);
  1265. if(animIndex == -1){
  1266. animIndex = 0;
  1267. elem->collAnim[ui->listWidget_collectAnim->currentRow()].type = "尚未选择";
  1268. }
  1269. setCollAnimWidget();
  1270. }
  1271. //容器池
  1272. if(ui->listWidget_pool->currentItem() != nullptr){
  1273. int index = ui->listWidget_pool->currentRow();
  1274. std::cout<<"当前选择的容器类型:"<<qPrintable(elem->container[index].type)<<std::endl;
  1275. poolIndex = ui->comboBox_container->findText(elem->container[index].type);
  1276. if(poolIndex == -1) poolIndex = 0;
  1277. }
  1278. //事件配置
  1279. if(ui->listWidget_status->currentItem() != nullptr){
  1280. int index = ui->listWidget_status->currentRow();
  1281. int rowNum = ui->tableWidget_event->rowCount();
  1282. for(int i=0;i<rowNum;i++){
  1283. //事件配置
  1284. QComboBox* nameBox = dynamic_cast<QComboBox*>(ui->tableWidget_event->cellWidget(i,0));
  1285. QComboBox* actionBox = dynamic_cast<QComboBox*>(ui->tableWidget_event->cellWidget(i,5));
  1286. int eindex = nameBox->findText(elem->statusConfig[index].eventConfig[i].name);
  1287. if(eindex != -1) nameBox->setCurrentIndex(eindex);
  1288. std::cout<<"当前触发动作:"<<qPrintable(elem->statusConfig[index].eventConfig[i].triggerAction)<<std::endl;
  1289. int aindex = actionBox->findText(elem->statusConfig[index].eventConfig[i].triggerAction);
  1290. if(aindex != -1) actionBox->setCurrentIndex(aindex);
  1291. }
  1292. }
  1293. }
  1294. ui->comboBox_animationType->setCurrentIndex(animIndex);
  1295. ui->comboBox_container->setCurrentIndex(poolIndex);
  1296. isSetUi = false;
  1297. }
  1298. void MainWindow::on_reloadTempFile_triggered()
  1299. {
  1300. ReadJsonSrc* tmp = jsonTemp;
  1301. jsonTemp = new ReadJsonSrc(":/file/file/template.json");
  1302. delete tmp;
  1303. updateTempRelatedUi();
  1304. }
  1305. void MainWindow::on_comboBox_container_currentTextChanged(const QString &arg1)
  1306. {
  1307. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr || isSetUi) return;
  1308. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  1309. int poolIndex = ui->listWidget_pool->currentRow();
  1310. elem->container[poolIndex].type = arg1;
  1311. std::cout<<"容器池第"<<poolIndex<<"行容器类型改变:"<<qPrintable(arg1)<<std::endl;
  1312. }
  1313. ///删除事件
  1314. void MainWindow::on_pushButton_delEvent_clicked()
  1315. {
  1316. if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
  1317. if(ui->tableWidget_event->currentRow() == -1) return;
  1318. ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
  1319. QMessageBox::StandardButton reply = QMessageBox::question(this,"删除事件","确定要删除此事件吗?");
  1320. if(reply == QMessageBox::Yes){
  1321. int curRow = ui->tableWidget_event->currentRow();
  1322. QVector<ElemPropertyData::EventConfig> &eventTable = elem->statusConfig[ui->listWidget_status->currentRow()].eventConfig;
  1323. eventTable.remove(curRow);
  1324. ui->tableWidget_event->removeRow(curRow);
  1325. }
  1326. }
  1327. void MainWindow::on_tabWidget_currentChanged(int index)
  1328. {
  1329. if(index==1 && ui->listWidget_collectAnim->currentItem()!=nullptr){
  1330. setCollAnimWidget();
  1331. }
  1332. }