123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- #include "collAnim.h"
- #include "ui_collAnim.h"
- #include "datahpp/dataManager.h"
- #include "changenamedialog.h"
- #include <QLineEdit>
- #include <iostream>
- #include <QMessageBox>
- #include <QFormLayout>
- 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;i<rowCout;i++) formlayout->removeRow(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<<"设置收集动画动态界面"<<std::endl;
- int row = ui->listWidget_collectAnim->currentRow();
- if(row == -1) return;
- QString animType = ui->comboBox_animType->currentText();
- int rowCout = formlayout->rowCount();
- for(int i=0;i<rowCout;i++) formlayout->removeRow(0);
- if(animType == "尚未选择") return;
- QVector<ReadJsonSrc::Fields> fields = DataManager::getInstance()->getTempFields("collAnimTemp",animType);
- QMap<QString,QString> 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<QComboBox*>(this->sender());
- QLabel *label = dynamic_cast<QLabel*>(formlayout->labelForField(box));
- std::cout<<qPrintable(label->text())<<": "<<qPrintable(arg)<<std::endl;
- DataManager::getInstance()->setCollAnimDataMapVal(currentElem,row,label->text(),arg);
- }
- ///收集动画动态界面单行编辑数据变化时
- void CollAnim::onLineEditTextChanged()
- {
- int row = ui->listWidget_collectAnim->currentRow();
- if(row == -1) return;
- QLineEdit *edit = dynamic_cast<QLineEdit*>(this->sender());
- QLabel *label = dynamic_cast<QLabel*>(formlayout->labelForField(edit));
- std::cout<<qPrintable(label->text())<<": "<<qPrintable(edit->text())<<std::endl;
- DataManager::getInstance()->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();
- }
- }
|