123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include "basicproperty.h"
- #include "changenamedialog.h"
- #include "collectionwindow.h"
- #include "statusconfiguration.h"
- #include "containerpool.h"
- #include "resfiledialog.h"
- #include <QListWidgetItem>
- #include <QListWidget>
- #include <QLabel>
- #include <iostream>
- #include <QHBoxLayout>
- #include <QMessageBox>
- #include <QFileDialog>
- #include <QDragEnterEvent>
- #include <QMimeData>
- #include <QUrl>
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- QPixmap pix("/Users/menglanluo/pic.png");
- ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
- this->setAcceptDrops(true);
- ui->tableWidget_animation->setHorizontalHeaderLabels({"名称","资源","时间线","z-Order"});
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- //TODO: 设置ui所有数据
- void MainWindow::setUi(ElemPropertyData *elem)
- {
- QPixmap pix(elem->iconPath);
- ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
- ui->lineEdit_name->setText(elem->labelName);
- ui->lineEdit_size->setText(elem->size);
- ui->lineEdit_maxlayer->setText(elem->maxLayer);
- ui->lineEdit_score->setText(elem->score);
- ui->spinBox_drop->setValue(elem->dropConfig);
- }
- void MainWindow::on_pushButton_chooseFile_clicked()
- {
- //如果列表中尚未添加任何元素,无法触发按钮
- if(ui->listWidget_elem->count()==0) return;
- QString elem = ui->listWidget_elem->currentItem()->text();
- QString file_name = QFileDialog::getOpenFileName(this,"Open a file",QDir::homePath());
- if(file_name == nullptr){
- file_name = elements[elem]->iconPath;
- }
- QPixmap pix(file_name);
- ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
- elements[elem]->iconPath = file_name;
- ui->listWidget_elem->currentItem()->setIcon(QIcon(file_name));
- }
- //TODO: 聚焦到新添加的元素上
- void MainWindow::on_pushButton_addElem_clicked()
- {
- QString elemName = "新加元素";
- int id = 1;
- while(1){
- if(elements.find(elemName)==elements.end()){
- break;
- }
- elemName = "新加元素" + QString::number(id++);
- }
- QListWidgetItem* item = new QListWidgetItem(QIcon("/Users/menglanluo/菜狗.png"),elemName);
- ui->listWidget_elem->addItem(item);
- //加上这一句之后总是异常闪退
- // ui->listWidget_elem->setCurrentItem(item);
- elements[elemName] = new ElemPropertyData();
- }
- void MainWindow::on_pushButton_delElem_clicked()
- {
- QMessageBox::StandardButton reply = QMessageBox::question(this,"删除元素","确定要删除此元素吗?");
- if(reply == QMessageBox::Yes){
- QString elemName = ui->listWidget_elem->currentItem()->text();
- delete elements[elemName];
- elements.erase(elements.find(elemName));
- delete ui->listWidget_elem->takeItem(ui->listWidget_elem->currentRow());
- }
- }
- void MainWindow::on_listWidget_elem_itemDoubleClicked(QListWidgetItem *item)
- {
- ChangeNameDialog newName;
- newName.setModal(true);
- newName.exec();
- QString name = newName.getNewName();
- if(!name.isEmpty()){
- if(elements.find(name)!=elements.end()){
- QMessageBox::critical(this,"警告","该元素名已存在!");
- return;
- }
- QString elemName = ui->listWidget_elem->currentItem()->text();
- ElemPropertyData* newElem = elements[elemName];
- elements.erase(elements.find(elemName));
- elements[newName.getNewName()] = newElem;
- item->setText(newName.getNewName());
- }
- }
- void MainWindow::on_lineEdit_name_editingFinished()
- {
- if(ui->listWidget_elem->count()==0) return;
- QString key = ui->listWidget_elem->currentItem()->text();
- elements[key]->labelName = ui->lineEdit_name->text();
- }
- void MainWindow::on_lineEdit_size_editingFinished()
- {
- if(ui->listWidget_elem->count()==0) return;
- QString key = ui->listWidget_elem->currentItem()->text();
- elements[key]->size = ui->lineEdit_size->text();
- }
- void MainWindow::on_lineEdit_maxlayer_editingFinished()
- {
- if(ui->listWidget_elem->count()==0) return;
- QString key = ui->listWidget_elem->currentItem()->text();
- elements[key]->maxLayer = ui->lineEdit_maxlayer->text();
- }
- void MainWindow::on_lineEdit_score_editingFinished()
- {
- if(ui->listWidget_elem->count()==0) return;
- QString key = ui->listWidget_elem->currentItem()->text();
- elements[key]->score = ui->lineEdit_score->text();
- }
- void MainWindow::on_spinBox_drop_valueChanged(int arg1)
- {
- if(ui->listWidget_elem->count()==0) return;
- QString key = ui->listWidget_elem->currentItem()->text();
- elements[key]->dropConfig = arg1;
- }
- //TODO: 保存当前元素的所有数据,界面加载当前元素数据
- void MainWindow::on_listWidget_elem_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
- {
- //每一步改变基本都会触发保存,但是表格内嵌的组件如combobox暂时没找到触发保存的办法
- setUi(elements[current->text()]);
- }
- bool MainWindow::isSingleAnimName(const QVector<ElemPropertyData::StatusEffect> &statusEffect,QString name){
- for(const auto &i:statusEffect){
- if(name == i.name)
- return false;
- }
- return true;
- }
- //替换资源文件
- void MainWindow::on_tableWidget_animation_cellDoubleClicked(int row, int column)
- {
- if(column == 1){
- ResFileDialog res;
- res.setModal(true);
- res.exec();
- QString fileName = res.getResName();
- if(!fileName.isEmpty()){
- ui->tableWidget_animation->setItem(row,column,new QTableWidgetItem(fileName));
- //TODO: 加入资源生成时间线代码
- QComboBox* timeLine = new QComboBox;
- timeLine->addItem("lml");
- timeLine->addItem("xdf");
- timeLine->addItem("cqf");
- ui->tableWidget_animation->setCellWidget(row,column+1,timeLine);
- }
- }
- }
- void MainWindow::on_pushButton_addAnimation_clicked()
- {
- int rowNum = ui->tableWidget_animation->rowCount();
- ui->tableWidget_animation->insertRow(rowNum);
- QString elemName = ui->listWidget_elem->currentItem()->text();
- ElemPropertyData* elem = elements[elemName];
- QString animName = "anim";
- int id = 1;
- while(1){
- if(isSingleAnimName(elem->statusEffect,animName)){
- break;
- }
- animName = "anim" + QString::number(id++);
- }
- ui->tableWidget_animation->setItem(rowNum,0,new QTableWidgetItem(animName));
- QTableWidgetItem* res = new QTableWidgetItem("双击添加资源文件");
- // 此单元格不可编辑
- res->setFlags(res->flags() & ~Qt::ItemIsEditable);
- ui->tableWidget_animation->setItem(rowNum,1,res);
- ui->tableWidget_animation->setCellWidget(rowNum,2,new QComboBox);
- ui->tableWidget_animation->setItem(rowNum,3,new QTableWidgetItem("0"));
- elem->statusEffect.push_back({animName,"","",0});
- }
- void MainWindow::on_pushButton_delAnimation_clicked()
- {
- QMessageBox::StandardButton reply = QMessageBox::question(this,"删除动画","确定要删除此动画吗?");
- if(reply == QMessageBox::Yes){
- int curRow = ui->tableWidget_animation->currentRow();
- QString animName = ui->tableWidget_animation->item(curRow,0)->text();
- QVector<ElemPropertyData::StatusEffect> &animVec = elements[ui->listWidget_elem->currentItem()->text()]->statusEffect;
- for(int i=0;i<animVec.size();i++){
- if(animName == animVec[i].name)
- animVec.remove(i);
- }
- ui->tableWidget_animation->removeRow(curRow);
- }
- }
- //TODO: 名字变更时的数据变更及重名检查
- void MainWindow::on_tableWidget_animation_itemChanged(QTableWidgetItem *item)
- {
- int column = item->column();
- int row = item->row();
- int rowCnt = ui->tableWidget_animation->rowCount();
- QVector<ElemPropertyData::StatusEffect> &animVec = elements[ui->listWidget_elem->currentItem()->text()]->statusEffect;
- std::cout<<"animVec size:"<<animVec.size()<<std::endl;
- std::cout<<"row:"<<rowCnt<<std::endl;
- if(rowCnt != animVec.size()) return;
- if(column == 0){
- QString newName = ui->tableWidget_animation->item(row,0)->text();
- if(!isSingleAnimName(animVec,newName)){
- QMessageBox::critical(this,"警告","该动画名已存在!");
- //TODO: 解决setText导致的重复触发itemChanged
- ui->tableWidget_animation->item(row,0)->setText(animVec[row].name);
- return;
- }
- std::cout<<"名字发生改变,新名字:"<<qPrintable(newName)<<std::endl;
- animVec[row].name = newName;
- }
- //资源名发生修改
- else if(column == 1){
- std::cout<<"动画资源发生改变,新资源名:"<<qPrintable(ui->tableWidget_animation->item(row,1)->text())<<std::endl;
- }
- // 时间线发生修改,居然没有反应。。。
- else if(column == 2){
- QComboBox *timeLine = qobject_cast<QComboBox*>(ui->tableWidget_animation->cellWidget(row,2));
- std::cout<<"timeLine:"<<qPrintable(timeLine->currentText())<<std::endl;
- }
- else{
- int zOrder = ui->tableWidget_animation->item(row,3)->text().toInt();
- if(zOrder<0 || zOrder>100000){
- QMessageBox::critical(this,"警告","z-Order值超出范围!");
- ui->tableWidget_animation->item(row,3)->setText(QString::number(animVec[row].zOrder));
- return;
- }
- std::cout<<"z-Order值发生改变,新值为:"<<zOrder<<std::endl;
- animVec[row].zOrder = zOrder;
- }
- }
- void MainWindow::on_pushButton_addCollectAnim_clicked()
- {
- //TODO: 检查默认名称唯一性
- ui->listWidget_collectAnim->addItem(new QListWidgetItem("collAnim_1"));
- }
- void MainWindow::on_pushButton_delCollectAnim_clicked()
- {
- QMessageBox::StandardButton reply = QMessageBox::question(this,"删除动画","确定要删除此收集动画吗?");
- if(reply == QMessageBox::Yes){
- delete ui->listWidget_collectAnim->takeItem(ui->listWidget_collectAnim->currentRow());
- }
- }
- void MainWindow::on_listWidget_collectAnim_itemDoubleClicked(QListWidgetItem *item)
- {
- ChangeNameDialog newName;
- newName.setModal(true);
- newName.exec();
- if(!newName.getNewName().isEmpty()){
- item->setText(newName.getNewName());
- }
- }
- void MainWindow::on_pushButton_addStatus_clicked()
- {
- //TODO: 检查状态值合法性
- ui->listWidget_status->addItem("1");
- }
- void MainWindow::on_pushButton_delStatus_clicked()
- {
- QMessageBox::StandardButton reply = QMessageBox::question(this,"删除状态","确定要删除此状态吗?");
- if(reply == QMessageBox::Yes){
- delete ui->listWidget_status->takeItem(ui->listWidget_status->currentRow());
- }
- }
- void MainWindow::on_pushButton_addContainer_clicked()
- {
- //TODO: 检查名称唯一性
- ui->listWidget_pool->addItem("pool1");
- }
- void MainWindow::on_pushButton_delContainer_clicked()
- {
- QMessageBox::StandardButton reply = QMessageBox::question(this,"删除状态","确定要删除此容器吗?");
- if(reply == QMessageBox::Yes){
- delete ui->listWidget_pool->takeItem(ui->listWidget_pool->currentRow());
- }
- }
- void MainWindow::on_listWidget_pool_itemDoubleClicked(QListWidgetItem *item)
- {
- ChangeNameDialog newName;
- newName.setModal(true);
- newName.exec();
- QString name = newName.getNewName();
- if(!name.isEmpty()){
- //TODO: 检查新名字唯一性
- item->setText(name);
- }
- }
|