123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- #include "statusEffectAnim.h"
- #include "ui_statusEffectAnim.h"
- #include "dataManager.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;
- }
- 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;i<size;i++){
- fileName.push_back(filePath[i]);
- }
- return fileName;
- }
- 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()->changeAnimTimeline(currentElem,arg1,row);
- }
- 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(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<ElemPropertyData::StatusEffect> 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<<"名字发生改变,新名字:"<<qPrintable(newName)<<std::endl;
- DataManager::getInstance()->changeAnimName(currentElem,newName,row);
- }
- //资源名发生修改
- else if(column == 1){
- std::cout<<"动画资源发生改变,新资源名:"<<qPrintable(ui->tableWidget_animation->item(row,1)->text())<<std::endl;
- }
- else{
- bool ok;double a = ui->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值发生改变,新值为:"<<zOrder<<std::endl;
- animVec[row].zOrder = item->text();
- }
- }
|