|
@@ -26,6 +26,8 @@ MainWindow::MainWindow(QWidget *parent)
|
|
|
ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
|
|
|
this->setAcceptDrops(true);
|
|
|
ui->tableWidget_animation->setHorizontalHeaderLabels({"名称","资源","时间线","z-Order"});
|
|
|
+ ui->tableWidget_containerPool->setHorizontalHeaderLabels({"键值","资源名","初始时间线","点击时间线","影响时间线","消失时间线","消失z-Order"});
|
|
|
+ ui->tableWidget_childElem->setHorizontalHeaderLabels({"名称","使用的池子"});
|
|
|
ui->tabWidget->setCurrentIndex(0);
|
|
|
}
|
|
|
|
|
@@ -37,6 +39,7 @@ MainWindow::~MainWindow()
|
|
|
//TODO: 设置ui所有数据
|
|
|
void MainWindow::setUi(ElemPropertyData *elem)
|
|
|
{
|
|
|
+ //基础元素区域的设置
|
|
|
QPixmap pix(elem->iconPath);
|
|
|
ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
|
|
|
ui->lineEdit_name->setText(elem->labelName);
|
|
@@ -44,12 +47,13 @@ void MainWindow::setUi(ElemPropertyData *elem)
|
|
|
ui->lineEdit_maxlayer->setText(elem->maxLayer);
|
|
|
ui->lineEdit_score->setText(elem->score);
|
|
|
ui->spinBox_drop->setValue(elem->dropConfig);
|
|
|
+
|
|
|
//设置状态与效果动画表格显示
|
|
|
int rowCnt = ui->tableWidget_animation->rowCount();
|
|
|
for(int i=0;i<rowCnt;i++){
|
|
|
ui->tableWidget_animation->removeRow(0);
|
|
|
}
|
|
|
- for(const auto &i:elements[ui->listWidget_elem->currentItem()->text()]->statusEffect){
|
|
|
+ for(const auto &i:elem->statusEffect){
|
|
|
int rowNum = ui->tableWidget_animation->rowCount();
|
|
|
ui->tableWidget_animation->insertRow(rowNum);
|
|
|
ui->tableWidget_animation->setItem(rowNum,0,new QTableWidgetItem(i.name));
|
|
@@ -59,8 +63,9 @@ void MainWindow::setUi(ElemPropertyData *elem)
|
|
|
res->setFlags(res->flags() & ~Qt::ItemIsEditable);
|
|
|
ui->tableWidget_animation->setItem(rowNum,1,res);
|
|
|
ui->tableWidget_animation->setCellWidget(rowNum,2,new QComboBox);
|
|
|
- ui->tableWidget_animation->setItem(rowNum,3,new QTableWidgetItem(QString::number(i.zOrder)));
|
|
|
+ ui->tableWidget_animation->setItem(rowNum,3,new QTableWidgetItem(i.zOrder));
|
|
|
}
|
|
|
+
|
|
|
//设置收集动画的显示并聚焦到收集动画列表的最后一个元素
|
|
|
ui->listWidget_collectAnim->clear();
|
|
|
ui->listWidget_collectAnim->addItems(elem->collAnim.keys());
|
|
@@ -77,6 +82,31 @@ void MainWindow::setUi(ElemPropertyData *elem)
|
|
|
ui->comboBox_initAnim->addItem(i.name);
|
|
|
}
|
|
|
ui->comboBox_collectAnimation->addItems(elem->collAnim.keys());
|
|
|
+
|
|
|
+ //设置容器池界面
|
|
|
+ ui->listWidget_pool->clear();
|
|
|
+ ui->listWidget_pool->addItems(elem->container.keys());
|
|
|
+ //切换元素时容器尚未选中,先清除表格内容
|
|
|
+ int rowNum = ui->tableWidget_containerPool->rowCount();
|
|
|
+ for(int i=0;i<rowNum;i++){
|
|
|
+ ui->tableWidget_containerPool->removeRow(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ //设置子元素界面
|
|
|
+ rowCnt = ui->tableWidget_childElem->rowCount();
|
|
|
+ for(int i=0;i<rowCnt;i++){
|
|
|
+ ui->tableWidget_childElem->removeRow(0);
|
|
|
+ }
|
|
|
+ for(const auto &i:elem->childElem){
|
|
|
+ int rowNum = ui->tableWidget_childElem->rowCount();
|
|
|
+ ui->tableWidget_childElem->insertRow(rowNum);
|
|
|
+ ui->tableWidget_childElem->setItem(rowNum,0,new QTableWidgetItem(i.name));
|
|
|
+ //TODO: 根据记载的comboBox数据设置当前选中项
|
|
|
+ QComboBox* containers = new QComboBox;
|
|
|
+ containers->addItems(elem->container.keys());
|
|
|
+ containers->setCurrentIndex(0);
|
|
|
+ ui->tableWidget_childElem->setCellWidget(rowNum,1,containers);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void MainWindow::on_pushButton_chooseFile_clicked()
|
|
@@ -189,14 +219,6 @@ void MainWindow::on_listWidget_elem_currentItemChanged(QListWidgetItem *current,
|
|
|
setUi(elements[current->text()]);
|
|
|
}
|
|
|
|
|
|
-bool MainWindow::isSingleAnimName(const QVector<ElemPropertyData::StatusEffect> &statusEffect,QString name){
|
|
|
- for(const auto &i:statusEffect){
|
|
|
- if(name == i.name)
|
|
|
- return false;
|
|
|
- }
|
|
|
- return true;
|
|
|
-}
|
|
|
-
|
|
|
//替换资源文件
|
|
|
void MainWindow::on_tableWidget_animation_cellDoubleClicked(int row, int column)
|
|
|
{
|
|
@@ -229,7 +251,7 @@ void MainWindow::on_pushButton_addAnimation_clicked()
|
|
|
QString animName = "anim";
|
|
|
int id = 1;
|
|
|
while(1){
|
|
|
- if(isSingleAnimName(elem->statusEffect,animName)){
|
|
|
+ if(elem->isSingleAnimName(animName)){
|
|
|
break;
|
|
|
}
|
|
|
animName = "anim" + QString::number(id++);
|
|
@@ -241,21 +263,23 @@ void MainWindow::on_pushButton_addAnimation_clicked()
|
|
|
ui->tableWidget_animation->setItem(rowNum,1,res);
|
|
|
ui->tableWidget_animation->setCellWidget(rowNum,2,new QComboBox);
|
|
|
ui->tableWidget_animation->setItem(rowNum,3,new QTableWidgetItem("0"));
|
|
|
- elem->statusEffect.push_back({animName,"","",0});
|
|
|
+ elem->statusEffect.push_back({animName,"","","0"});
|
|
|
}
|
|
|
|
|
|
|
|
|
void MainWindow::on_pushButton_delAnimation_clicked()
|
|
|
{
|
|
|
- if(ui->tableWidget_animation->currentRow() == -1) return;
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || 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();
|
|
|
QVector<ElemPropertyData::StatusEffect> &animVec = elements[ui->listWidget_elem->currentItem()->text()]->statusEffect;
|
|
|
for(int i=0;i<animVec.size();i++){
|
|
|
- if(animName == animVec[i].name)
|
|
|
+ if(animName == animVec[i].name){
|
|
|
animVec.remove(i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
ui->tableWidget_animation->removeRow(curRow);
|
|
|
}
|
|
@@ -267,10 +291,11 @@ void MainWindow::on_tableWidget_animation_itemChanged(QTableWidgetItem *item)
|
|
|
animTableItemChanged = false;
|
|
|
int column = item->column();
|
|
|
int row = item->row();
|
|
|
- QVector<ElemPropertyData::StatusEffect> &animVec = elements[ui->listWidget_elem->currentItem()->text()]->statusEffect;
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ QVector<ElemPropertyData::StatusEffect> &animVec = elem->statusEffect;
|
|
|
if(column == 0){
|
|
|
QString newName = ui->tableWidget_animation->item(row,0)->text();
|
|
|
- if(!isSingleAnimName(animVec,newName)){
|
|
|
+ if(!elem->isSingleAnimName(newName)){
|
|
|
QMessageBox::critical(this,"警告","该动画名已存在!");
|
|
|
ui->tableWidget_animation->item(row,0)->setText(animVec[row].name);
|
|
|
return;
|
|
@@ -291,11 +316,11 @@ void MainWindow::on_tableWidget_animation_itemChanged(QTableWidgetItem *item)
|
|
|
int zOrder = ui->tableWidget_animation->item(row,3)->text().toInt();
|
|
|
if(zOrder<0 || zOrder>100000){
|
|
|
QMessageBox::critical(this,"警告","z-Order值超出范围!");
|
|
|
- ui->tableWidget_animation->item(row,3)->setText(QString::number(animVec[row].zOrder));
|
|
|
+ ui->tableWidget_animation->item(row,3)->setText(animVec[row].zOrder);
|
|
|
return;
|
|
|
}
|
|
|
std::cout<<"z-Order值发生改变,新值为:"<<zOrder<<std::endl;
|
|
|
- animVec[row].zOrder = zOrder;
|
|
|
+ animVec[row].zOrder = item->text();
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -398,24 +423,33 @@ void MainWindow::on_listWidget_collectAnim_currentItemChanged(QListWidgetItem *c
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//TODO: 生成模板时更新状态配置的数据,怎么米有反应。。。
|
|
|
+//生成模板并更新状态配置的数据
|
|
|
void MainWindow::on_pushButton_genTemp_clicked()
|
|
|
{
|
|
|
if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->count() > 0) return;
|
|
|
- for(int i=0;i<elements[ui->listWidget_elem->currentItem()->text()]->maxLayer.toInt();i++){
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ for(int i=0;i<elem->maxLayer.toInt();i++){
|
|
|
ui->listWidget_status->addItem(QString::number(i));
|
|
|
+ elem->statusConfig[QString::number(i)];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//TODO: 生成一个合法的状态值并修改数据
|
|
|
void MainWindow::on_pushButton_addStatus_clicked()
|
|
|
{
|
|
|
- //TODO: 检查状态值合法性
|
|
|
if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
-// for(int i=0;i<elements[ui->listWidget_elem->currentItem()->text()]->maxLayer.toInt();i++){
|
|
|
-// ui->listWidget_status->addItem(QString::number(i));
|
|
|
-// }
|
|
|
- ui->listWidget_status->addItem("3");
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ QString statusName;
|
|
|
+ for(int i=0;i<elem->maxLayer.toInt();i++){
|
|
|
+ if(elem->statusConfig.find(QString::number(i)) == elem->statusConfig.end()){
|
|
|
+ statusName = QString::number(i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!statusName.isEmpty()){
|
|
|
+ ui->listWidget_status->addItem(statusName);
|
|
|
+ elem->statusConfig[statusName];
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//TODO: 删除状态值对应的数据
|
|
@@ -423,40 +457,72 @@ void MainWindow::on_pushButton_delStatus_clicked()
|
|
|
{
|
|
|
if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
|
|
|
QMessageBox::StandardButton reply = QMessageBox::question(this,"删除状态","确定要删除此状态吗?");
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
if(reply == QMessageBox::Yes){
|
|
|
+ elem->statusConfig.remove(ui->listWidget_status->currentItem()->text());
|
|
|
delete ui->listWidget_status->takeItem(ui->listWidget_status->currentRow());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+//修改状态值,检查修改后的状态值是否合法,并转移数据
|
|
|
void MainWindow::on_listWidget_status_itemDoubleClicked(QListWidgetItem *item)
|
|
|
{
|
|
|
ChangeNameDialog newName;
|
|
|
newName.setModal(true);
|
|
|
newName.exec();
|
|
|
QString name = newName.getNewName();
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
if(!name.isEmpty()){
|
|
|
//TODO: 检查状态值合法性并转移数据
|
|
|
-// if(1){}
|
|
|
-// QString elemName = ui->listWidget_elem->currentItem()->text();
|
|
|
-// ElemPropertyData* newElem = elements[elemName];
|
|
|
-// elements.erase(elements.find(elemName));
|
|
|
-// elements[newName.getNewName()] = newElem;
|
|
|
- item->setText(newName.getNewName());
|
|
|
+ bool isNum;double tmp = name.toDouble(&isNum);
|
|
|
+ int maxlayer = ui->lineEdit_maxlayer->text().toInt();
|
|
|
+ int statusNum = name.toInt();
|
|
|
+ if(!isNum ||statusNum < 0 || statusNum >= maxlayer){
|
|
|
+ QMessageBox::critical(this,"错误","状态值必须是大于等于0且小于最大层数的数字");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(elem->statusConfig.find(name) != elem->statusConfig.end()){
|
|
|
+ QMessageBox::critical(this,"警告","该状态值已存在");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ ElemPropertyData::StatusConfig data = elem->statusConfig[item->text()];
|
|
|
+ elem->statusConfig.remove(item->text());
|
|
|
+ elem->statusConfig[name] = data;
|
|
|
+ item->setText(name);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
void MainWindow::on_pushButton_addContainer_clicked()
|
|
|
{
|
|
|
- //TODO: 检查名称唯一性
|
|
|
- ui->listWidget_pool->addItem("pool1");
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
+ QString poolName = "pool";
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ int id = 1;
|
|
|
+ while(1){
|
|
|
+ if(elem->container.find(poolName)==elem->container.end()){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ poolName = "pool" + QString::number(id++);
|
|
|
+ }
|
|
|
+ ui->listWidget_pool->addItem(new QListWidgetItem(poolName));
|
|
|
+ elem->container[poolName];
|
|
|
+ //子元素下拉列表添加可选项
|
|
|
+ int rowNum = ui->tableWidget_childElem->rowCount();
|
|
|
+ for(int i=0;i<rowNum;i++){
|
|
|
+ QComboBox *containers = qobject_cast<QComboBox*>(ui->tableWidget_childElem->cellWidget(i,1));
|
|
|
+ containers->addItem(poolName);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
|
void MainWindow::on_pushButton_delContainer_clicked()
|
|
|
{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr) return;
|
|
|
QMessageBox::StandardButton reply = QMessageBox::question(this,"删除状态","确定要删除此容器吗?");
|
|
|
if(reply == QMessageBox::Yes){
|
|
|
+ QString key = ui->listWidget_pool->currentItem()->text();
|
|
|
+ elements[ui->listWidget_elem->currentItem()->text()]->container.remove(key);
|
|
|
delete ui->listWidget_pool->takeItem(ui->listWidget_pool->currentRow());
|
|
|
}
|
|
|
}
|
|
@@ -464,16 +530,170 @@ void MainWindow::on_pushButton_delContainer_clicked()
|
|
|
|
|
|
void MainWindow::on_listWidget_pool_itemDoubleClicked(QListWidgetItem *item)
|
|
|
{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
ChangeNameDialog newName;
|
|
|
newName.setModal(true);
|
|
|
newName.exec();
|
|
|
QString name = newName.getNewName();
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
if(!name.isEmpty()){
|
|
|
//TODO: 检查新名字唯一性
|
|
|
+ if(elem->container.find(name) != elem->container.end()){
|
|
|
+ QMessageBox::critical(this,"警告","该容器名已存在!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ ElemPropertyData::ContainerConfig containerData = elem->container[item->text()];
|
|
|
+ elem->container.remove(item->text());
|
|
|
+ elem->container[name] = containerData;
|
|
|
item->setText(name);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+void MainWindow::on_listWidget_pool_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
|
|
|
+{
|
|
|
+ //TODO:保存切换前界面数据
|
|
|
+ if(current != nullptr){
|
|
|
+ setPoolUi(current->text());
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::on_pushButton_addKey_clicked()
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr) return;
|
|
|
+ int rowNum = ui->tableWidget_containerPool->rowCount();
|
|
|
+ ui->tableWidget_containerPool->insertRow(rowNum);
|
|
|
+ QString keyName = "0";
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ int id = 1;
|
|
|
+ while(1){
|
|
|
+ if(elem->isSingleContainerKey(ui->listWidget_pool->currentItem()->text(),keyName)){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ keyName = QString::number(id++);
|
|
|
+ }
|
|
|
+ ui->tableWidget_containerPool->setItem(rowNum,0,new QTableWidgetItem(keyName));
|
|
|
+ QTableWidgetItem* res = new QTableWidgetItem("双击添加资源文件");
|
|
|
+ // 此单元格不可编辑
|
|
|
+ res->setFlags(res->flags() & ~Qt::ItemIsEditable);
|
|
|
+ ui->tableWidget_containerPool->setItem(rowNum,1,res);
|
|
|
+ for(int i=2;i<=5;i++){
|
|
|
+ ui->tableWidget_containerPool->setCellWidget(rowNum,i,new QComboBox);
|
|
|
+ }
|
|
|
+ ui->tableWidget_containerPool->setItem(rowNum,3,new QTableWidgetItem("0"));
|
|
|
+ elem->container[ui->listWidget_pool->currentItem()->text()].table.push_back({keyName,"","","","","","0"});
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void MainWindow::on_pushButton_delKey_clicked()
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr || ui->tableWidget_containerPool->currentRow() == -1) return;
|
|
|
+ QMessageBox::StandardButton reply = QMessageBox::question(this,"删除容器","确定要删除此容器吗?");
|
|
|
+ if(reply == QMessageBox::Yes){
|
|
|
+ int curRow = ui->tableWidget_containerPool->currentRow();
|
|
|
+ QString containerName = ui->tableWidget_containerPool->item(curRow,0)->text();
|
|
|
+ QVector<ElemPropertyData::ContainTable> &containerTable = elements[ui->listWidget_elem->currentItem()->text()]->container[ui->listWidget_pool->currentItem()->text()].table;
|
|
|
+ for(int i=0;i<containerTable.size();i++){
|
|
|
+ if(containerName == containerTable[i].key){
|
|
|
+ containerTable.remove(i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ui->tableWidget_containerPool->removeRow(curRow);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::setPoolUi(QString poolName)
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ ElemPropertyData::ContainerConfig poolData = elem->container[poolName];
|
|
|
+ int rowNum = ui->tableWidget_containerPool->rowCount();
|
|
|
+ for(int i=0;i<rowNum;i++){
|
|
|
+ ui->tableWidget_containerPool->removeRow(0);
|
|
|
+ }
|
|
|
+ //TODO: 设置comboBox选项
|
|
|
+
|
|
|
+ int rowCnt = ui->tableWidget_containerPool->rowCount();
|
|
|
+ for(int i=0;i<rowCnt;i++){
|
|
|
+ ui->tableWidget_containerPool->removeRow(0);
|
|
|
+ }
|
|
|
+ for(const auto &i:poolData.table){
|
|
|
+ int rowNum = ui->tableWidget_containerPool->rowCount();
|
|
|
+ ui->tableWidget_containerPool->insertRow(rowNum);
|
|
|
+ ui->tableWidget_containerPool->setItem(rowNum,0,new QTableWidgetItem(i.key));
|
|
|
+ //TODO: 资源和时间线所在单元格替换数据
|
|
|
+ QTableWidgetItem* res = new QTableWidgetItem("双击添加资源文件");
|
|
|
+ // 此单元格不可编辑
|
|
|
+ res->setFlags(res->flags() & ~Qt::ItemIsEditable);
|
|
|
+ ui->tableWidget_containerPool->setItem(rowNum,1,res);
|
|
|
+ for(int col=2;col<=5;col++){
|
|
|
+ ui->tableWidget_containerPool->setCellWidget(rowNum,col,new QComboBox);
|
|
|
+ }
|
|
|
+ ui->tableWidget_containerPool->setItem(rowNum,6,new QTableWidgetItem(i.zOrder));
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::on_tableWidget_containerPool_cellDoubleClicked(int row, int column)
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr) return;
|
|
|
+ //容器表格内容修改flag
|
|
|
+ poolTableItemChanged = true;
|
|
|
+ if(column == 1){
|
|
|
+ ResFileDialog res;
|
|
|
+ res.setModal(true);
|
|
|
+ res.exec();
|
|
|
+ QString fileName = res.getResName();
|
|
|
+ if(!fileName.isEmpty()){
|
|
|
+ //TODO: 加载comboBox,随后文件名去除路径
|
|
|
+ ui->tableWidget_containerPool->setItem(row,column,new QTableWidgetItem(fileName));
|
|
|
+ elements[ui->listWidget_elem->currentItem()->text()]->container[ui->listWidget_pool->currentItem()->text()].table[row].res = fileName;
|
|
|
+// QComboBox* timeLine = new QComboBox;
|
|
|
+// timeLine->addItem("lml");
|
|
|
+// timeLine->addItem("xdf");
|
|
|
+// timeLine->addItem("cqf");
|
|
|
+// ui->tableWidget_animation->setCellWidget(row,column+1,timeLine);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void MainWindow::on_tableWidget_containerPool_itemChanged(QTableWidgetItem *item)
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr) return;
|
|
|
+ if(!poolTableItemChanged) return;
|
|
|
+ poolTableItemChanged = false;
|
|
|
+ int column = item->column();
|
|
|
+ int row = item->row();
|
|
|
+ QVector<ElemPropertyData::ContainTable> &containerVec = elements[ui->listWidget_elem->currentItem()->text()]->container[ui->listWidget_pool->currentItem()->text()].table;
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ if(column == 0){
|
|
|
+ bool isNum;double tmp = item->text().toDouble(&isNum);
|
|
|
+ if(item->text().toInt() < 0 || !isNum){
|
|
|
+ QMessageBox::critical(this,"错误","键值必须是大于等于0的数字");
|
|
|
+ item->setText(containerVec[row].key);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(!elem->isSingleContainerKey(ui->listWidget_pool->currentItem()->text(),item->text())){
|
|
|
+ QMessageBox::critical(this,"警告","该键值已存在!");
|
|
|
+ item->setText(containerVec[row].key);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ containerVec[row].key = item->text();
|
|
|
+ }
|
|
|
+ //检查zOrder合法性
|
|
|
+ else if(column == 6){
|
|
|
+ QString zOrder = item->text();
|
|
|
+ bool isNum;double tmp = zOrder.toDouble(&isNum);
|
|
|
+ if(item->text().toInt() < 0 || !isNum){
|
|
|
+ QMessageBox::critical(this,"错误","消失zOrder值必须是大于等于0的数字");
|
|
|
+ item->setText(containerVec[row].zOrder);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ containerVec[row].zOrder = zOrder;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
//切换tab时更新comboBox(或者每一次添加删除动画就更新一下该元素的comboBox?这样也更方便进行逻辑检查)
|
|
|
void MainWindow::on_tabWidget_currentChanged(int index)
|
|
|
{
|
|
@@ -500,4 +720,74 @@ void MainWindow::on_tabWidget_currentChanged(int index)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void MainWindow::on_pushButton_addChildElem_clicked()
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
+ int rowNum = ui->tableWidget_childElem->rowCount();
|
|
|
+ ui->tableWidget_childElem->insertRow(rowNum);
|
|
|
+ QString childElemName = "item";
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ int id = 1;
|
|
|
+ while(1){
|
|
|
+ if(elem->isSingleChildElemName(childElemName)){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ childElemName = "item" + QString::number(id++);
|
|
|
+ }
|
|
|
+ ui->tableWidget_childElem->setItem(rowNum,0,new QTableWidgetItem(childElemName));
|
|
|
+ QComboBox* containers = new QComboBox;
|
|
|
+ containers->addItems(elem->container.keys());
|
|
|
+ ui->tableWidget_childElem->setCellWidget(rowNum,1,containers);
|
|
|
+ elem->childElem.push_back({childElemName,""});
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::on_pushButton_delChildElem_clicked()
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->tableWidget_childElem->currentRow() == -1) return;
|
|
|
+ QMessageBox::StandardButton reply = QMessageBox::question(this,"删除子元素","确定要删除此子元素吗?");
|
|
|
+ if(reply == QMessageBox::Yes){
|
|
|
+ int curRow = ui->tableWidget_childElem->currentRow();
|
|
|
+ QString childElemName = ui->tableWidget_childElem->item(curRow,0)->text();
|
|
|
+ QVector<ElemPropertyData::ChildElem> &childElemVec = elements[ui->listWidget_elem->currentItem()->text()]->childElem;
|
|
|
+ for(int i=0;i<childElemVec.size();i++){
|
|
|
+ if(childElemName == childElemVec[i].name){
|
|
|
+ childElemVec.remove(i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ui->tableWidget_childElem->removeRow(curRow);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void MainWindow::on_tableWidget_childElem_itemChanged(QTableWidgetItem *item)
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
+ if(!childElemTableItemChanged) return;
|
|
|
+ childElemTableItemChanged = false;
|
|
|
+ int column = item->column();
|
|
|
+ int row = item->row();
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ QVector<ElemPropertyData::ChildElem> &childElemVec = elem->childElem;
|
|
|
+ if(column == 0){
|
|
|
+ if(!elem->isSingleChildElemName(item->text())){
|
|
|
+ QMessageBox::critical(this,"警告","该子元素名已存在!");
|
|
|
+ item->setText(childElemVec[row].name);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ childElemVec[row].name = item->text();
|
|
|
+ }
|
|
|
+ //TODO: comboBox值修改后的保存
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void MainWindow::on_tableWidget_childElem_cellDoubleClicked(int row, int column)
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
+ //子元素表格双击改名置flag为true
|
|
|
+ childElemTableItemChanged = true;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|