123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include "changenamedialog.h"
- #include "resfiledialog.h"
- #include "actionSettingDialog.h"
- #include "statusEffectAnim.h"
- #include <QListWidgetItem>
- #include <QListWidget>
- #include <QLabel>
- #include <iostream>
- #include <QHBoxLayout>
- #include <QMessageBox>
- #include <QFileDialog>
- #include <QDragEnterEvent>
- #include <QMimeData>
- #include <QUrl>
- #include <QFormLayout>
- #include <QDialogButtonBox>
- #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;i<elements.size();i++){
- QString elemName = elements[i];
- QListWidgetItem* item = new QListWidgetItem(QIcon(DataManager::getInstance()->getIconPath(elemName)),elemName);
- ui->listWidget_elem->addItem(item);
- }
- ui->comboBox_dropConfig->addItems({"随状态而定","可掉落","不可掉落"});
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- ///切换元素时重置界面数据
- void MainWindow::setUi(QString elem)
- {
- std::cout<<"切换成元素"<<qPrintable(elem)<<",刷新界面"<<std::endl;
- //首次选择元素设置四个子界面
- if(firstSelectElem){
- animUi = new StatusEffectAnim();
- ui->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);
- }
- }
- //基础元素数据变化触发保存
- ///标示值修改
- 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);
- }
- }
|