#include "collAnim.h" #include "ui_collAnim.h" #include "datahpp/dataManager.h" #include "changenamedialog.h" #include #include #include #include CollAnim::CollAnim(QWidget *parent) : QWidget(parent), ui(new Ui::CollAnim) { ui->setupUi(this); formlayout = new QFormLayout; ui->widget->setLayout(formlayout); } CollAnim::~CollAnim() { delete ui; delete formlayout; } void CollAnim::setUi(QString elem) { isSetUi = true; currentElem = elem; ui->listWidget_collectAnim->clear(); ui->listWidget_collectAnim->addItems(DataManager::getInstance()->getList(elem,DataManager::ListType::CollAnim)); //切换新元素的收集动画界面,尚未选中任何收集动画,清空所有数据及动态界面 int rowCout = formlayout->rowCount(); for(int i=0;iremoveRow(0); ui->comboBox_animType->clear(); isSetUi = false; } QComboBox* CollAnim::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; } ///切换收集动画时设置页面显示 void CollAnim::setCollectAnimUi() { int row = ui->listWidget_collectAnim->currentRow(); if(row != -1){ isSetUi = true; //重置动画类型选项 ui->comboBox_animType->clear(); ui->comboBox_animType->addItem("尚未选择"); ui->comboBox_animType->addItems(DataManager::getInstance()->getList(currentElem,DataManager::ListType::AnimType)); QString type = DataManager::getInstance()->getAnimType(currentElem,row); int typeIndex = ui->comboBox_animType->findText(type); if(typeIndex == -1){ typeIndex = 0; DataManager::getInstance()->setAnimType(currentElem,"尚未选择",row); } ui->comboBox_animType->setCurrentIndex(typeIndex); setCollAnimWidget(); isSetUi = false; } } ///设置收集动画动态界面 void CollAnim::setCollAnimWidget() { std::cout<<"设置收集动画动态界面"<listWidget_collectAnim->currentRow(); if(row == -1) return; QString animType = ui->comboBox_animType->currentText(); int rowCout = formlayout->rowCount(); for(int i=0;iremoveRow(0); if(animType == "尚未选择") return; QVector fields = DataManager::getInstance()->getTempFields("collAnimTemp",animType); QMap data = DataManager::getInstance()->getCollAnimDataMap(currentElem,row); for(const auto &i:fields){ QString val; if(i.type == "list"){ QStringList list; //后期再根据配置模板添加其它列表 if(i.src == "animations"){ list = DataManager::getInstance()->getList(currentElem,DataManager::ListType::Anim); } if(data.find(i.name) != data.end()) val = data[i.name]; else val = i.defaultVal; QComboBox* combo = createBox(val,list); connect(combo,SIGNAL(currentTextChanged(QString)),this,SLOT(onComboBoxTextChanged(QString))); formlayout->addRow(i.name,combo); } else if(i.type == "input"){ if(data.find(i.name) != data.end()) val = data[i.name]; else val = i.defaultVal; QLineEdit* edit = new QLineEdit(val); connect(edit,SIGNAL(editingFinished()),this,SLOT(onLineEditTextChanged())); formlayout->addRow(i.name,edit); } DataManager::getInstance()->setCollAnimDataMapVal(currentElem,row,i.name,val); } } ///收集动画动态界面下拉选项数据变化时 void CollAnim::onComboBoxTextChanged(QString arg) { int row = ui->listWidget_collectAnim->currentRow(); if(row == -1) return; QComboBox *box = dynamic_cast(this->sender()); QLabel *label = dynamic_cast(formlayout->labelForField(box)); std::cout<text())<<": "<setCollAnimDataMapVal(currentElem,row,label->text(),arg); } ///收集动画动态界面单行编辑数据变化时 void CollAnim::onLineEditTextChanged() { int row = ui->listWidget_collectAnim->currentRow(); if(row == -1) return; QLineEdit *edit = dynamic_cast(this->sender()); QLabel *label = dynamic_cast(formlayout->labelForField(edit)); std::cout<text())<<": "<text())<setCollAnimDataMapVal(currentElem,row,label->text(),edit->text()); } ///收集动画页面的动画类型发生变化 void CollAnim::on_comboBox_animType_currentTextChanged(const QString &arg1) { int index = ui->listWidget_collectAnim->currentRow(); if(index == -1 || isSetUi) return; DataManager::getInstance()->setAnimType(currentElem,arg1,index); setCollAnimWidget(); } ///添加收集动画 void CollAnim::on_pushButton_addCollectAnim_clicked() { QString collAnimName = "collAnim"; int id = 1; while(1){ if(!DataManager::getInstance()->existCollAnim(currentElem,collAnimName)){ break; } collAnimName = "collAnim" + QString::number(id++); } ui->listWidget_collectAnim->addItem(new QListWidgetItem(collAnimName)); DataManager::getInstance()->addCollAnim(currentElem,collAnimName); } ///删除收集动画 void CollAnim::on_pushButton_delCollectAnim_clicked() { int row = ui->listWidget_collectAnim->currentRow(); if(row == -1) return; QMessageBox::StandardButton reply = QMessageBox::question(this,"删除收集动画","确定要删除此收集动画吗?"); if(reply == QMessageBox::Yes){ QString delName = ui->listWidget_collectAnim->currentItem()->text(); delete ui->listWidget_collectAnim->takeItem(row); DataManager::getInstance()->delCollAnim(currentElem,row); } } ///收集动画改名 void CollAnim::on_listWidget_collectAnim_itemDoubleClicked(QListWidgetItem *item) { int row = ui->listWidget_collectAnim->currentRow(); ChangeNameDialog newName; newName.setModal(true); newName.exec(); QString name = newName.getNewName(); if(!name.isEmpty()){ if(DataManager::getInstance()->existCollAnim(currentElem,name)){ QMessageBox::critical(this,"警告","该收集动画名已存在!"); return; } DataManager::getInstance()->changeCollAnimName(currentElem,row,name); item->setText(name); } } ///点击另一个收集动画 void CollAnim::on_listWidget_collectAnim_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) { if(current != nullptr){ setCollectAnimUi(); } }