123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- #include "statusEffectAnim.h"
- #include "ui_statusEffectAnim.h"
- #include "datahpp/dataManager.h"
- #include "resfiledialog.h"
- #include <iostream>
- #include <QMessageBox>
- 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;
- }
- QComboBox* StatusEffectAnim::createBox(QString choice,QStringList list)
- {
- QComboBox* box = new QComboBox;
- box->addItem("尚未选择");
- 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:"<<qPrintable(arg1)<<std::endl;
- QComboBox *timeline = dynamic_cast<QComboBox*>(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()->changeAnimTable(currentElem,arg1,row,2);
- }
- void StatusEffectAnim::setUi(QString elem)
- {
- currentElem = elem;
- int rowCnt = ui->tableWidget_animation->rowCount();
- for(int i=0;i<rowCnt;i++){
- ui->tableWidget_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(DataManager::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));
- ui->tableWidget_animation->setItem(rowNum,4,new QTableWidgetItem(i.audio));
- }
- }
- 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"));
- ui->tableWidget_animation->setItem(rowNum,4,new QTableWidgetItem(""));
- 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();
- ui->tableWidget_animation->removeRow(curRow);
- DataManager::getInstance()->delAnim(currentElem,curRow);
- }
- }
- void StatusEffectAnim::on_tableWidget_animation_itemChanged(QTableWidgetItem *item)
- {
- if(!animTableItemChanged) return;
- animTableItemChanged = false;
- int column = item->column();
- int row = item->row();
- QVector<ElemPropertyData::StatusEffect> animVec = DataManager::getInstance()->getAnimVec(currentElem);
- if(column == 0){
- QString newName = item->text();
- if(DataManager::getInstance()->existAnim(currentElem,newName)){
- QMessageBox::critical(this,"警告","该动画名已存在!");
- ui->tableWidget_animation->item(row,0)->setText(animVec[row].name);
- return;
- }
- std::cout<<"名字发生改变,新名字:"<<qPrintable(newName)<<std::endl;
- DataManager::getInstance()->changeAnimTable(currentElem,newName,row,0);
- }
- else if(column == 3){
- QString nZOrder = item->text();
- bool ok;double a = nZOrder.toDouble(&ok);
- int zOrder = nZOrder.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值发生改变,新值为:"<<zOrder<<std::endl;
- DataManager::getInstance()->changeAnimTable(currentElem,nZOrder,row,3);
- } if(column == 4){
- QString audio = item->text();
- std::cout<<"音效发生改变,新值为:"<<qPrintable(audio)<<std::endl;
- DataManager::getInstance()->changeAnimTable(currentElem,audio,row,4);
- }
- }
- //替换资源文件
- void StatusEffectAnim::on_tableWidget_animation_cellDoubleClicked(int row, int column)
- {
- //表格内容修改flag
- animTableItemChanged = true;
- if(column == 1){
- ResFileDialog res;
- QString oldRes = DataManager::getInstance()->getAnimVec(currentElem)[row].res;
- if(oldRes != "双击添加资源文件") res.setResName(oldRes);
- res.setModal(true);
- res.exec();
- QString fileName = res.getResName();
- if(!fileName.isEmpty()){
- QTableWidgetItem* res = new QTableWidgetItem(DataManager::getFileName(fileName));
- // 此单元格不可编辑
- res->setFlags(res->flags() & ~Qt::ItemIsEditable);
- ui->tableWidget_animation->setItem(row,1,res);
- QComboBox* timeLine = createTimelineBox("尚未选择",fileName);
- ui->tableWidget_animation->setCellWidget(row,2,timeLine);
- //保存当前数据
- DataManager::getInstance()->changeAnimTable(currentElem,fileName,row,1);
- }
- }
- }
- void StatusEffectAnim::on_pushButton_copyAnim_clicked()
- {
- int curRow = ui->tableWidget_animation->currentRow();
- if(curRow == -1) return;
- 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++);
- }
- DataManager::getInstance()->copyAnim(currentElem,animName,curRow);
- ElemPropertyData::StatusEffect animData = DataManager::getInstance()->getAnimVec(currentElem)[curRow];
- ui->tableWidget_animation->setItem(rowNum,0,new QTableWidgetItem(animName));
- QTableWidgetItem* res = new QTableWidgetItem(DataManager::getFileName(animData.res));
- // 此单元格不可编辑
- res->setFlags(res->flags() & ~Qt::ItemIsEditable);
- ui->tableWidget_animation->setItem(rowNum,1,res);
- //设置时间线
- QComboBox* timeline = createTimelineBox(animData.timeline,animData.res);
- ui->tableWidget_animation->setCellWidget(rowNum,2,timeline);
- ui->tableWidget_animation->setItem(rowNum,3,new QTableWidgetItem(animData.zOrder));
- ui->tableWidget_animation->setItem(rowNum,4,new QTableWidgetItem(animData.audio));
- }
|