#include "statusEffectAnim.h" #include "ui_statusEffectAnim.h" #include "dataManager.h" #include #include StatusEffectAnim::StatusEffectAnim(QWidget *parent) : QWidget(parent), ui(new Ui::StatusEffectAnim) { ui->setupUi(this); this->setAcceptDrops(true); ui->tableWidget_animation->setHorizontalHeaderLabels({"名称","资源","时间线","z-Order"}); } StatusEffectAnim::~StatusEffectAnim() { delete ui; } StatusEffectAnim* StatusEffectAnim::getInstance() { static StatusEffectAnim anim; return &anim; } QString StatusEffectAnim::getFileName(QString filePath) { if(filePath == "双击添加资源文件") return filePath; int size = filePath.count(); int pos = 0; for(int i=size-1;i>=0;i--){ if(filePath[i] == '/'){ pos = i+1; break; } } QString fileName; for(int i=pos;iaddItem("尚未选择"); box->addItems(list); int index = box->findText(choice); if(index == -1) index = 0; box->setCurrentIndex(index); return box; } QComboBox* StatusEffectAnim::createTimelineBox(QString chosenTimeline,QString fileName) { QComboBox* timeLine = new QComboBox; if(fileName == "双击添加资源文件") return timeLine; QStringList list = DataManager::getInstance()->getTimelineList(currentElem,fileName); timeLine = createBox(chosenTimeline,list); connect(timeLine,SIGNAL(currentTextChanged(QString)),this,SLOT(onTimelineTextChanged(QString))); return timeLine; } ///动画区时间线数据发生改变 void StatusEffectAnim::onTimelineTextChanged(const QString &arg1) { //获取时间线列表所在位置 std::cout<<"current timeline is:"<(this->sender()); int x = timeline->frameGeometry().x(); int y = timeline->frameGeometry().y(); QModelIndex index = ui->tableWidget_animation->indexAt(QPoint(x,y)); int row = index.row(); //修改数据 DataManager::getInstance()->changeAnimTimeline(currentElem,arg1,row); } void StatusEffectAnim::setUi(QString elem) { currentElem = elem; int rowCnt = ui->tableWidget_animation->rowCount(); for(int i=0;itableWidget_animation->removeRow(0); } for(const auto &i:DataManager::getInstance()->getAnimVec(elem)){ int rowNum = ui->tableWidget_animation->rowCount(); ui->tableWidget_animation->insertRow(rowNum); ui->tableWidget_animation->setItem(rowNum,0,new QTableWidgetItem(i.name)); QTableWidgetItem* res = new QTableWidgetItem(getFileName(i.res)); // 此单元格不可编辑 res->setFlags(res->flags() & ~Qt::ItemIsEditable); ui->tableWidget_animation->setItem(rowNum,1,res); //设置时间线 QComboBox* timeline = createTimelineBox(i.timeline,i.res); ui->tableWidget_animation->setCellWidget(rowNum,2,timeline); ui->tableWidget_animation->setItem(rowNum,3,new QTableWidgetItem(i.zOrder)); } } void StatusEffectAnim::on_pushButton_addAnimation_clicked() { int rowNum = ui->tableWidget_animation->rowCount(); ui->tableWidget_animation->insertRow(rowNum); QString animName = "anim"; int id = 1; while(1){ if(!DataManager::getInstance()->existAnim(currentElem,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,createBox("",{})); ui->tableWidget_animation->setItem(rowNum,3,new QTableWidgetItem("0")); DataManager::getInstance()->addAnim(currentElem,animName); } void StatusEffectAnim::on_pushButton_delAnimation_clicked() { if(ui->tableWidget_animation->currentRow() == -1) return; 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(); DataManager::getInstance()->delAnim(currentElem,curRow); ui->tableWidget_animation->removeRow(curRow); } } void StatusEffectAnim::on_tableWidget_animation_itemChanged(QTableWidgetItem *item) { if(!animTableItemChanged) return; animTableItemChanged = false; int column = item->column(); int row = item->row(); QVector animVec = elem->statusEffect; if(column == 0){ QString newName = ui->tableWidget_animation->item(row,0)->text(); if(!DataManager::getInstance()->existAnim(currentElem,newName)){ QMessageBox::critical(this,"警告","该动画名已存在!"); ui->tableWidget_animation->item(row,0)->setText(animVec[row].name); return; } std::cout<<"名字发生改变,新名字:"<changeAnimName(currentElem,newName,row); } //资源名发生修改 else if(column == 1){ std::cout<<"动画资源发生改变,新资源名:"<tableWidget_animation->item(row,1)->text())<tableWidget_animation->item(row,3)->text().toDouble(&ok); int zOrder = ui->tableWidget_animation->item(row,3)->text().toInt(); if(!ok || zOrder<0 || zOrder>100000){ QMessageBox::critical(this,"警告","z-Order值超出范围!"); ui->tableWidget_animation->item(row,3)->setText(animVec[row].zOrder); return; } std::cout<<"z-Order值发生改变,新值为:"<text(); } }