#include "mainwindow.h" #include "ui_mainwindow.h" #include "changenamedialog.h" #include "resfiledialog.h" #include "actionSettingDialog.h" #include "statusEffectAnim.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "datahpp/dataManager.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); QPixmap pix(":/icon/icon/pic.png"); ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio)); this->setAcceptDrops(true); ui->tabWidget->setCurrentIndex(0); QStringList elements = DataManager::getInstance()->getList("",DataManager::ListType::Elem); //初始时刻,加载列表元素 for(int i=0;igetIconPath(elemName)),elemName); ui->listWidget_elem->addItem(item); } ui->comboBox_dropConfig->addItems({"随状态而定","可掉落","不可掉落"}); } MainWindow::~MainWindow() { delete ui; } ///切换元素时重置界面数据 void MainWindow::setUi(QString elem) { std::cout<<"切换成元素"<tabWidget->addTab(animUi,"状态与效果动画"); collAnimUi = new CollAnim(); ui->tabWidget->addTab(collAnimUi,"收集动画"); statusConfigUi = new StatusConfig(); ui->tabWidget->addTab(statusConfigUi,"状态配置"); poolUi = new Pool(); ui->tabWidget->addTab(poolUi,"容器"); firstSelectElem = false; } //基础元素区域的设置 QPixmap pix(DataManager::getInstance()->getIconPath(elem)); ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio)); ui->lineEdit_name->setText(DataManager::getInstance()->getMarkValue(elem)); ui->lineEdit_pos->setText(DataManager::getInstance()->getPos(elem)); ui->lineEdit_maxlayer->setText(DataManager::getInstance()->getMaxLayer(elem)); ui->lineEdit_score->setText(DataManager::getInstance()->getScore(elem)); ui->comboBox_dropConfig->setCurrentIndex(DataManager::getInstance()->getDropConfig(elem)); if(DataManager::getInstance()->getLinkedState(elem)) ui->checkBox_canBeLinked->setCheckState(Qt::Checked); else ui->checkBox_canBeLinked->setCheckState(Qt::Unchecked); if(DataManager::getInstance()->getMoveAwayState(elem)) ui->checkBox_canMoveAway->setCheckState(Qt::Checked); else ui->checkBox_canMoveAway->setCheckState(Qt::Unchecked); //设置四个子界面显示 animUi->setUi(elem); collAnimUi->setUi(elem); statusConfigUi->setUi(elem); poolUi->setUi(elem); } ///选择文件按钮 void MainWindow::on_pushButton_chooseFile_clicked() { //如果未选中列表中的按钮,无法触发此按钮 if(ui->listWidget_elem->currentItem() == nullptr) return; QString elem = ui->listWidget_elem->currentItem()->text(); QString file_name = QFileDialog::getOpenFileName(this,"选择文件",QDir::homePath()); if(file_name == nullptr){ return; } QPixmap pix(file_name); ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio)); ui->listWidget_elem->currentItem()->setIcon(QIcon(file_name)); DataManager::getInstance()->changeIconPath(elem,file_name); } ///添加元素 void MainWindow::on_pushButton_addElem_clicked() { QString elemName = "新加元素"; int id = 1; while(1){ if(!DataManager::getInstance()->existElem(elemName)){ break; } elemName = "新加元素" + QString::number(id++); } QListWidgetItem* item = new QListWidgetItem(QIcon(":/icon/icon/菜狗.png"),elemName); ui->listWidget_elem->addItem(item); DataManager::getInstance()->addElem(elemName); } ///删除元素 void MainWindow::on_pushButton_delElem_clicked() { if(ui->listWidget_elem->currentItem() == nullptr) return; QMessageBox::StandardButton reply = QMessageBox::question(this,"删除元素","确定要删除此元素吗?"); if(reply == QMessageBox::Yes){ QString elemName = ui->listWidget_elem->currentItem()->text(); delete ui->listWidget_elem->takeItem(ui->listWidget_elem->currentRow()); DataManager::getInstance()->delElem(elemName); } } ///修改元素名字 void MainWindow::on_listWidget_elem_itemDoubleClicked(QListWidgetItem *item) { ChangeNameDialog newName; newName.setModal(true); newName.exec(); QString name = newName.getNewName(); if(!name.isEmpty()){ if(DataManager::getInstance()->existElem(name)){ QMessageBox::critical(this,"警告","该元素名已存在!"); return; } QString oriName = ui->listWidget_elem->currentItem()->text(); item->setText(name); DataManager::getInstance()->changeElemName(oriName,name); //更新四个子界面currentElem animUi->currentElem = name; collAnimUi->currentElem = name; statusConfigUi->currentElem = name; poolUi->currentElem = name; } } //基础元素数据变化触发保存 ///标示值修改 void MainWindow::on_lineEdit_name_editingFinished() { if(ui->listWidget_elem->currentItem() == nullptr) return; QString key = ui->listWidget_elem->currentItem()->text(); DataManager::getInstance()->changeMarkValue(key,ui->lineEdit_name->text()); } ///大小修改 void MainWindow::on_lineEdit_pos_editingFinished() { if(ui->listWidget_elem->currentItem() == nullptr) return; QString key = ui->listWidget_elem->currentItem()->text(); DataManager::getInstance()->changePos(key,ui->lineEdit_pos->text()); } ///最大层数修改 void MainWindow::on_lineEdit_maxlayer_editingFinished() { if(ui->listWidget_elem->currentItem() == nullptr) return; QString key = ui->listWidget_elem->currentItem()->text(); DataManager::getInstance()->changeMaxLayer(key,ui->lineEdit_maxlayer->text()); } ///分数修改 void MainWindow::on_lineEdit_score_editingFinished() { if(ui->listWidget_elem->currentItem() == nullptr) return; QString key = ui->listWidget_elem->currentItem()->text(); DataManager::getInstance()->changeScore(key,ui->lineEdit_score->text()); } ///更换选中元素 void MainWindow::on_listWidget_elem_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) { setUi(current->text()); } ///模板更新后更新与模板配置相关的界面显示 void MainWindow::updateTempRelatedUi() { //重新设置收集动画界面 collAnimUi->setCollectAnimUi(); //重置状态配置的模板相关界面 statusConfigUi->setAnimComboBox(); //重置容器类型选项 poolUi->updateTempRelated(); } ///重新加载模板文件 void MainWindow::on_reloadTempFile_triggered() { DataManager::getInstance()->updateTempData(); updateTempRelatedUi(); } ///属性页面切换(主要用于更新常变下拉选项) void MainWindow::on_tabWidget_currentChanged(int index) { //更新动画、收集动画下拉选项 if(index == 1){ collAnimUi->setCollAnimWidget(); } else if(index == 2){ statusConfigUi->setAnimComboBox(); } } ///可连接状态改变 void MainWindow::on_checkBox_canBeLinked_stateChanged(int arg1) { if(ui->listWidget_elem->currentItem() == nullptr) return; QString key = ui->listWidget_elem->currentItem()->text(); DataManager::getInstance()->changeLinkedState(key,arg1); } ///可挤压状态改变 void MainWindow::on_checkBox_canMoveAway_stateChanged(int arg1) { if(ui->listWidget_elem->currentItem() == nullptr) return; QString key = ui->listWidget_elem->currentItem()->text(); DataManager::getInstance()->changeMoveAwayState(key,arg1); } ///导出配置按钮按下 void MainWindow::on_pushButton_exportConfig_clicked() { QString fileName = QFileDialog::getSaveFileName(this,"导出配置","./exportConfig.json",tr("JSON files(*.json)")); if(fileName.isEmpty()) return; if(!DataManager::getInstance()->exportData(fileName)){ QMessageBox::critical(this,"错误",DataManager::getInstance()->getExportMessage()); return; } else QMessageBox::information(this,"提示","导出成功!"); } ///掉落设定值改变 void MainWindow::on_comboBox_dropConfig_currentIndexChanged(int index) { if(ui->listWidget_elem->currentItem() == nullptr) return; QString key = ui->listWidget_elem->currentItem()->text(); DataManager::getInstance()->changeDropConfig(key,index); //选中可掉落 if(index == 1){ DataManager::getInstance()->updateAllDropState(key,true); statusConfigUi->updateDropBox(true); } //选中不可掉落 else if(index == 2){ DataManager::getInstance()->updateAllDropState(key,false); statusConfigUi->updateDropBox(false); } }