|
@@ -26,6 +26,7 @@ MainWindow::MainWindow(QWidget *parent)
|
|
|
ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
|
|
|
this->setAcceptDrops(true);
|
|
|
ui->tableWidget_animation->setHorizontalHeaderLabels({"名称","资源","时间线","z-Order"});
|
|
|
+ ui->tabWidget->setCurrentIndex(0);
|
|
|
}
|
|
|
|
|
|
MainWindow::~MainWindow()
|
|
@@ -43,12 +44,45 @@ 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){
|
|
|
+ int rowNum = ui->tableWidget_animation->rowCount();
|
|
|
+ ui->tableWidget_animation->insertRow(rowNum);
|
|
|
+ ui->tableWidget_animation->setItem(rowNum,0,new QTableWidgetItem(i.name));
|
|
|
+ //TODO: 资源和时间线所在单元格替换数据
|
|
|
+ QTableWidgetItem* res = new QTableWidgetItem("双击添加资源文件");
|
|
|
+ // 此单元格不可编辑
|
|
|
+ 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->listWidget_collectAnim->clear();
|
|
|
+ ui->listWidget_collectAnim->addItems(elem->collAnim.keys());
|
|
|
+// ui->listWidget_collectAnim->item(0)->setSelected(true); // 设置选中
|
|
|
+
|
|
|
+ //设置收集动画和状态配置的comboBox
|
|
|
+ ui->comboBox_initAnim->clear();
|
|
|
+ ui->comboBox_clickAnim->clear();
|
|
|
+ ui->comboBox_collectAnimation->clear();
|
|
|
+ ui->comboBox_animation->clear();
|
|
|
+ for(const auto &i:elem->statusEffect){
|
|
|
+ ui->comboBox_clickAnim->addItem(i.name);
|
|
|
+ ui->comboBox_animation->addItem(i.name);
|
|
|
+ ui->comboBox_initAnim->addItem(i.name);
|
|
|
+ }
|
|
|
+ ui->comboBox_collectAnimation->addItems(elem->collAnim.keys());
|
|
|
}
|
|
|
|
|
|
void MainWindow::on_pushButton_chooseFile_clicked()
|
|
|
{
|
|
|
- //如果列表中尚未添加任何元素,无法触发按钮
|
|
|
- if(ui->listWidget_elem->count()==0) return;
|
|
|
+ //如果未选中列表中的按钮,无法触发此按钮
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
QString elem = ui->listWidget_elem->currentItem()->text();
|
|
|
QString file_name = QFileDialog::getOpenFileName(this,"Open a file",QDir::homePath());
|
|
|
if(file_name == nullptr){
|
|
@@ -60,7 +94,7 @@ void MainWindow::on_pushButton_chooseFile_clicked()
|
|
|
ui->listWidget_elem->currentItem()->setIcon(QIcon(file_name));
|
|
|
}
|
|
|
|
|
|
-//TODO: 聚焦到新添加的元素上
|
|
|
+
|
|
|
void MainWindow::on_pushButton_addElem_clicked()
|
|
|
{
|
|
|
QString elemName = "新加元素";
|
|
@@ -73,14 +107,15 @@ void MainWindow::on_pushButton_addElem_clicked()
|
|
|
}
|
|
|
QListWidgetItem* item = new QListWidgetItem(QIcon("/Users/menglanluo/菜狗.png"),elemName);
|
|
|
ui->listWidget_elem->addItem(item);
|
|
|
- //加上这一句之后总是异常闪退
|
|
|
-// ui->listWidget_elem->setCurrentItem(item);
|
|
|
+// ui->listWidget_elem->item(ui->listWidget_elem->count() - 1)->setSelected(true); // 设置选中
|
|
|
+// ui->listWidget_elem->scrollToBottom();
|
|
|
elements[elemName] = new ElemPropertyData();
|
|
|
}
|
|
|
|
|
|
|
|
|
void MainWindow::on_pushButton_delElem_clicked()
|
|
|
{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
QMessageBox::StandardButton reply = QMessageBox::question(this,"删除元素","确定要删除此元素吗?");
|
|
|
if(reply == QMessageBox::Yes){
|
|
|
QString elemName = ui->listWidget_elem->currentItem()->text();
|
|
@@ -112,28 +147,28 @@ void MainWindow::on_listWidget_elem_itemDoubleClicked(QListWidgetItem *item)
|
|
|
|
|
|
void MainWindow::on_lineEdit_name_editingFinished()
|
|
|
{
|
|
|
- if(ui->listWidget_elem->count()==0) return;
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
QString key = ui->listWidget_elem->currentItem()->text();
|
|
|
elements[key]->labelName = ui->lineEdit_name->text();
|
|
|
}
|
|
|
|
|
|
void MainWindow::on_lineEdit_size_editingFinished()
|
|
|
{
|
|
|
- if(ui->listWidget_elem->count()==0) return;
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
QString key = ui->listWidget_elem->currentItem()->text();
|
|
|
elements[key]->size = ui->lineEdit_size->text();
|
|
|
}
|
|
|
|
|
|
void MainWindow::on_lineEdit_maxlayer_editingFinished()
|
|
|
{
|
|
|
- if(ui->listWidget_elem->count()==0) return;
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
QString key = ui->listWidget_elem->currentItem()->text();
|
|
|
elements[key]->maxLayer = ui->lineEdit_maxlayer->text();
|
|
|
}
|
|
|
|
|
|
void MainWindow::on_lineEdit_score_editingFinished()
|
|
|
{
|
|
|
- if(ui->listWidget_elem->count()==0) return;
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
QString key = ui->listWidget_elem->currentItem()->text();
|
|
|
elements[key]->score = ui->lineEdit_score->text();
|
|
|
}
|
|
@@ -141,7 +176,7 @@ void MainWindow::on_lineEdit_score_editingFinished()
|
|
|
|
|
|
void MainWindow::on_spinBox_drop_valueChanged(int arg1)
|
|
|
{
|
|
|
- if(ui->listWidget_elem->count()==0) return;
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
QString key = ui->listWidget_elem->currentItem()->text();
|
|
|
elements[key]->dropConfig = arg1;
|
|
|
}
|
|
@@ -165,6 +200,8 @@ bool MainWindow::isSingleAnimName(const QVector<ElemPropertyData::StatusEffect>
|
|
|
//替换资源文件
|
|
|
void MainWindow::on_tableWidget_animation_cellDoubleClicked(int row, int column)
|
|
|
{
|
|
|
+ //表格内容修改flag
|
|
|
+ animTableItemChanged = true;
|
|
|
if(column == 1){
|
|
|
ResFileDialog res;
|
|
|
res.setModal(true);
|
|
@@ -184,6 +221,7 @@ void MainWindow::on_tableWidget_animation_cellDoubleClicked(int row, int column)
|
|
|
|
|
|
void MainWindow::on_pushButton_addAnimation_clicked()
|
|
|
{
|
|
|
+ if(ui->listWidget_elem->currentItem()==nullptr) return;
|
|
|
int rowNum = ui->tableWidget_animation->rowCount();
|
|
|
ui->tableWidget_animation->insertRow(rowNum);
|
|
|
QString elemName = ui->listWidget_elem->currentItem()->text();
|
|
@@ -209,6 +247,7 @@ void MainWindow::on_pushButton_addAnimation_clicked()
|
|
|
|
|
|
void MainWindow::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();
|
|
@@ -222,21 +261,17 @@ void MainWindow::on_pushButton_delAnimation_clicked()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//TODO: 名字变更时的数据变更及重名检查
|
|
|
void MainWindow::on_tableWidget_animation_itemChanged(QTableWidgetItem *item)
|
|
|
{
|
|
|
+ if(!animTableItemChanged) return;
|
|
|
+ animTableItemChanged = false;
|
|
|
int column = item->column();
|
|
|
int row = item->row();
|
|
|
- int rowCnt = ui->tableWidget_animation->rowCount();
|
|
|
QVector<ElemPropertyData::StatusEffect> &animVec = elements[ui->listWidget_elem->currentItem()->text()]->statusEffect;
|
|
|
- std::cout<<"animVec size:"<<animVec.size()<<std::endl;
|
|
|
- std::cout<<"row:"<<rowCnt<<std::endl;
|
|
|
- if(rowCnt != animVec.size()) return;
|
|
|
if(column == 0){
|
|
|
QString newName = ui->tableWidget_animation->item(row,0)->text();
|
|
|
if(!isSingleAnimName(animVec,newName)){
|
|
|
QMessageBox::critical(this,"警告","该动画名已存在!");
|
|
|
- //TODO: 解决setText导致的重复触发itemChanged
|
|
|
ui->tableWidget_animation->item(row,0)->setText(animVec[row].name);
|
|
|
return;
|
|
|
}
|
|
@@ -266,14 +301,28 @@ void MainWindow::on_tableWidget_animation_itemChanged(QTableWidgetItem *item)
|
|
|
|
|
|
void MainWindow::on_pushButton_addCollectAnim_clicked()
|
|
|
{
|
|
|
- //TODO: 检查默认名称唯一性
|
|
|
- ui->listWidget_collectAnim->addItem(new QListWidgetItem("collAnim_1"));
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
+ QString collAnimName = "collAnim";
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ int id = 1;
|
|
|
+ while(1){
|
|
|
+ if(elem->collAnim.find(collAnimName)==elem->collAnim.end()){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ collAnimName = "collAnim" + QString::number(id++);
|
|
|
+ }
|
|
|
+ ui->listWidget_collectAnim->addItem(new QListWidgetItem(collAnimName));
|
|
|
+ elem->collAnim[collAnimName] = {ui->comboBox_animationType->itemText(0),ui->comboBox_animation->itemText(0),"",""};
|
|
|
+// ui->listWidget_collectAnim->item(ui->listWidget_collectAnim->count() - 1)->setSelected(true); // 设置选中
|
|
|
+// ui->listWidget_collectAnim->scrollToBottom();
|
|
|
}
|
|
|
|
|
|
void MainWindow::on_pushButton_delCollectAnim_clicked()
|
|
|
{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_collectAnim->currentItem() == nullptr) return;
|
|
|
QMessageBox::StandardButton reply = QMessageBox::question(this,"删除动画","确定要删除此收集动画吗?");
|
|
|
if(reply == QMessageBox::Yes){
|
|
|
+ elements[ui->listWidget_elem->currentItem()->text()]->collAnim.remove(ui->listWidget_collectAnim->currentItem()->text());
|
|
|
delete ui->listWidget_collectAnim->takeItem(ui->listWidget_collectAnim->currentRow());
|
|
|
}
|
|
|
}
|
|
@@ -284,27 +333,118 @@ void MainWindow::on_listWidget_collectAnim_itemDoubleClicked(QListWidgetItem *it
|
|
|
ChangeNameDialog newName;
|
|
|
newName.setModal(true);
|
|
|
newName.exec();
|
|
|
- if(!newName.getNewName().isEmpty()){
|
|
|
- item->setText(newName.getNewName());
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ QString name = newName.getNewName();
|
|
|
+ if(!name.isEmpty()){
|
|
|
+ if(elem->collAnim.find(name)!=elem->collAnim.end()){
|
|
|
+ QMessageBox::critical(this,"警告","该收集动画名已存在!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ QString collAnimName = ui->listWidget_collectAnim->currentItem()->text();
|
|
|
+ ElemPropertyData::CollAnim collAnimData = elem->collAnim[collAnimName];
|
|
|
+ elem->collAnim.remove(collAnimName);
|
|
|
+ elem->collAnim[name] = collAnimData;
|
|
|
+ item->setText(name);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::on_comboBox_animationType_currentTextChanged(const QString &arg1)
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_collectAnim->currentItem() == nullptr) return;
|
|
|
+ elements[ui->listWidget_elem->currentItem()->text()]->collAnim[ui->listWidget_collectAnim->currentItem()->text()].type = arg1;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void MainWindow::on_comboBox_animation_currentTextChanged(const QString &arg1)
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_collectAnim->currentItem() == nullptr) return;
|
|
|
+ elements[ui->listWidget_elem->currentItem()->text()]->collAnim[ui->listWidget_collectAnim->currentItem()->text()].anim = arg1;
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::on_lineEdit_node_editingFinished()
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_collectAnim->currentItem() == nullptr) return;
|
|
|
+ elements[ui->listWidget_elem->currentItem()->text()]->collAnim[ui->listWidget_collectAnim->currentItem()->text()].node = ui->lineEdit_node->text();
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::on_lineEdit_shadow_editingFinished()
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_collectAnim->currentItem() == nullptr) return;
|
|
|
+ elements[ui->listWidget_elem->currentItem()->text()]->collAnim[ui->listWidget_collectAnim->currentItem()->text()].shadow = ui->lineEdit_shadow->text();
|
|
|
+}
|
|
|
+
|
|
|
+//设置收集动画显示
|
|
|
+void MainWindow::setCollectAnimUi(QString collectAnimName)
|
|
|
+{
|
|
|
+ if(ui->listWidget_collectAnim->currentItem() != nullptr){
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ ElemPropertyData::CollAnim collAnimData = elem->collAnim[collectAnimName];
|
|
|
+ ui->lineEdit_node->setText(collAnimData.node);
|
|
|
+ ui->lineEdit_shadow->setText(collAnimData.shadow);
|
|
|
+ std::cout<<qPrintable(collAnimData.anim)<<"\t"<<qPrintable(collAnimData.type)<<std::endl;
|
|
|
+ //TODO: 使用comboBox的index来修改当前要显示的值
|
|
|
+// ui->comboBox_animation->setCurrentText(collAnimData.anim);
|
|
|
+// ui->comboBox_animationType->setCurrentText(collAnimData.type);
|
|
|
+ ui->comboBox_animation->setCurrentIndex(1);
|
|
|
+ ui->comboBox_animationType->setCurrentIndex(1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void MainWindow::on_listWidget_collectAnim_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
|
|
|
+{
|
|
|
+ //TODO: 或许需要另外保存当前界面的数据
|
|
|
+ if(current != nullptr){
|
|
|
+ setCollectAnimUi(current->text());
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
+//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++){
|
|
|
+ ui->listWidget_status->addItem(QString::number(i));
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//TODO: 生成一个合法的状态值并修改数据
|
|
|
void MainWindow::on_pushButton_addStatus_clicked()
|
|
|
{
|
|
|
//TODO: 检查状态值合法性
|
|
|
- ui->listWidget_status->addItem("1");
|
|
|
+ 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");
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+//TODO: 删除状态值对应的数据
|
|
|
void MainWindow::on_pushButton_delStatus_clicked()
|
|
|
{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
|
|
|
QMessageBox::StandardButton reply = QMessageBox::question(this,"删除状态","确定要删除此状态吗?");
|
|
|
if(reply == QMessageBox::Yes){
|
|
|
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();
|
|
|
+ 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());
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
void MainWindow::on_pushButton_addContainer_clicked()
|
|
|
{
|
|
@@ -334,6 +474,30 @@ void MainWindow::on_listWidget_pool_itemDoubleClicked(QListWidgetItem *item)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+//切换tab时更新comboBox(或者每一次添加删除动画就更新一下该元素的comboBox?这样也更方便进行逻辑检查)
|
|
|
+void MainWindow::on_tabWidget_currentChanged(int index)
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
+ QVector<ElemPropertyData::StatusEffect> &animVec = elements[ui->listWidget_elem->currentItem()->text()]->statusEffect;
|
|
|
+ //如果目前展示的是收集动画,加载状态与效果配置中的动画到收集动画的动画下拉列表中
|
|
|
+ //目前这种方法较为暴力,后期可以视动画数量进行优化
|
|
|
+ if(index == 1){
|
|
|
+ ui->comboBox_animation->clear();
|
|
|
+ for(const auto &i:animVec){
|
|
|
+ ui->comboBox_animation->addItem(i.name);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //如果目前展示的是状态配置,加载相应状态效果配置动画和收集动画
|
|
|
+ else if(index == 2){
|
|
|
+ ui->comboBox_initAnim->clear();
|
|
|
+ ui->comboBox_clickAnim->clear();
|
|
|
+ ui->comboBox_collectAnimation->clear();
|
|
|
+ for(const auto &i:animVec){
|
|
|
+ ui->comboBox_initAnim->addItem(i.name);
|
|
|
+ ui->comboBox_clickAnim->addItem(i.name);
|
|
|
+ }
|
|
|
+ ui->comboBox_collectAnimation->addItems(elements[ui->listWidget_elem->currentItem()->text()]->collAnim.keys());
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
|