|
@@ -25,8 +25,6 @@ MainWindow::MainWindow(QWidget *parent)
|
|
|
QPixmap pix("/Users/menglanluo/pic.png");
|
|
|
ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
|
|
|
this->setAcceptDrops(true);
|
|
|
- resource = new QLineEdit(this);
|
|
|
- resource->setAcceptDrops(false);
|
|
|
ui->tableWidget_animation->setHorizontalHeaderLabels({"名称","资源","时间线","z-Order"});
|
|
|
}
|
|
|
|
|
@@ -35,63 +33,236 @@ MainWindow::~MainWindow()
|
|
|
delete ui;
|
|
|
}
|
|
|
|
|
|
-//TODO: 修改图标后更新列表对应元素的图标
|
|
|
+//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);
|
|
|
+ ui->lineEdit_size->setText(elem->size);
|
|
|
+ ui->lineEdit_maxlayer->setText(elem->maxLayer);
|
|
|
+ ui->lineEdit_score->setText(elem->score);
|
|
|
+ ui->spinBox_drop->setValue(elem->dropConfig);
|
|
|
+}
|
|
|
+
|
|
|
void MainWindow::on_pushButton_chooseFile_clicked()
|
|
|
{
|
|
|
+ //如果列表中尚未添加任何元素,无法触发按钮
|
|
|
+ if(ui->listWidget_elem->count()==0) return;
|
|
|
+ QString elem = ui->listWidget_elem->currentItem()->text();
|
|
|
QString file_name = QFileDialog::getOpenFileName(this,"Open a file",QDir::homePath());
|
|
|
+ if(file_name == nullptr){
|
|
|
+ file_name = elements[elem]->iconPath;
|
|
|
+ }
|
|
|
QPixmap pix(file_name);
|
|
|
ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
|
|
|
+ elements[elem]->iconPath = file_name;
|
|
|
+ ui->listWidget_elem->currentItem()->setIcon(QIcon(file_name));
|
|
|
}
|
|
|
|
|
|
-void MainWindow::dragEnterEvent(QDragEnterEvent *event)
|
|
|
+//TODO: 聚焦到新添加的元素上
|
|
|
+void MainWindow::on_pushButton_addElem_clicked()
|
|
|
{
|
|
|
- if(event->mimeData()->hasUrls()){
|
|
|
- event->acceptProposedAction();
|
|
|
+ QString elemName = "新加元素";
|
|
|
+ int id = 1;
|
|
|
+ while(1){
|
|
|
+ if(elements.find(elemName)==elements.end()){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ elemName = "新加元素" + QString::number(id++);
|
|
|
}
|
|
|
- else{
|
|
|
- event->ignore();
|
|
|
+ QListWidgetItem* item = new QListWidgetItem(QIcon("/Users/menglanluo/菜狗.png"),elemName);
|
|
|
+ ui->listWidget_elem->addItem(item);
|
|
|
+ //加上这一句之后总是异常闪退
|
|
|
+// ui->listWidget_elem->setCurrentItem(item);
|
|
|
+ elements[elemName] = new ElemPropertyData();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void MainWindow::on_pushButton_delElem_clicked()
|
|
|
+{
|
|
|
+ QMessageBox::StandardButton reply = QMessageBox::question(this,"删除元素","确定要删除此元素吗?");
|
|
|
+ if(reply == QMessageBox::Yes){
|
|
|
+ QString elemName = ui->listWidget_elem->currentItem()->text();
|
|
|
+ delete elements[elemName];
|
|
|
+ elements.erase(elements.find(elemName));
|
|
|
+ delete ui->listWidget_elem->takeItem(ui->listWidget_elem->currentRow());
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void MainWindow::on_listWidget_elem_itemDoubleClicked(QListWidgetItem *item)
|
|
|
+{
|
|
|
+ ChangeNameDialog newName;
|
|
|
+ newName.setModal(true);
|
|
|
+ newName.exec();
|
|
|
+ QString name = newName.getNewName();
|
|
|
+ if(!name.isEmpty()){
|
|
|
+ if(elements.find(name)!=elements.end()){
|
|
|
+ QMessageBox::critical(this,"警告","该元素名已存在!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ 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_lineEdit_name_editingFinished()
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->count()==0) 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;
|
|
|
+ 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;
|
|
|
+ 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;
|
|
|
+ QString key = ui->listWidget_elem->currentItem()->text();
|
|
|
+ elements[key]->score = ui->lineEdit_score->text();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void MainWindow::on_spinBox_drop_valueChanged(int arg1)
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->count()==0) return;
|
|
|
+ QString key = ui->listWidget_elem->currentItem()->text();
|
|
|
+ elements[key]->dropConfig = arg1;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//TODO: 保存当前元素的所有数据,界面加载当前元素数据
|
|
|
+void MainWindow::on_listWidget_elem_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
|
|
|
+{
|
|
|
+ //每一步改变基本都会触发保存,但是表格内嵌的组件如combobox暂时没找到触发保存的办法
|
|
|
+ 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::dropEvent(QDropEvent *event)
|
|
|
+
|
|
|
+//替换资源文件
|
|
|
+void MainWindow::on_tableWidget_animation_cellDoubleClicked(int row, int column)
|
|
|
{
|
|
|
- const QMimeData *mimeData = event->mimeData();
|
|
|
- if(mimeData->hasUrls()){
|
|
|
- QList<QUrl> urls = mimeData->urls();
|
|
|
- QString urlName = urls.at(0).toLocalFile();
|
|
|
- QString fileName = urlName;
|
|
|
- resource->setText(fileName);
|
|
|
+ if(column == 1){
|
|
|
+ ResFileDialog res;
|
|
|
+ res.setModal(true);
|
|
|
+ res.exec();
|
|
|
+ QString fileName = res.getResName();
|
|
|
+ if(!fileName.isEmpty()){
|
|
|
+ ui->tableWidget_animation->setItem(row,column,new QTableWidgetItem(fileName));
|
|
|
+ //TODO: 加入资源生成时间线代码
|
|
|
+ QComboBox* timeLine = new QComboBox;
|
|
|
+ timeLine->addItem("lml");
|
|
|
+ timeLine->addItem("xdf");
|
|
|
+ timeLine->addItem("cqf");
|
|
|
+ ui->tableWidget_animation->setCellWidget(row,column+1,timeLine);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void MainWindow::on_pushButton_addAnimation_clicked()
|
|
|
{
|
|
|
int rowNum = ui->tableWidget_animation->rowCount();
|
|
|
-// ui->tableWidget_animation->insertRow(rowNum);
|
|
|
- ui->tableWidget_animation->setRowCount(rowNum+1);
|
|
|
- //TODO: 命名唯一性检查
|
|
|
- ui->tableWidget_animation->setItem(rowNum,0,new QTableWidgetItem("anim_1"));
|
|
|
+ ui->tableWidget_animation->insertRow(rowNum);
|
|
|
+ QString elemName = ui->listWidget_elem->currentItem()->text();
|
|
|
+ ElemPropertyData* elem = elements[elemName];
|
|
|
+ QString animName = "anim";
|
|
|
+ int id = 1;
|
|
|
+ while(1){
|
|
|
+ if(isSingleAnimName(elem->statusEffect,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,new QComboBox);
|
|
|
ui->tableWidget_animation->setItem(rowNum,3,new QTableWidgetItem("0"));
|
|
|
+ elem->statusEffect.push_back({animName,"","",0});
|
|
|
}
|
|
|
|
|
|
-void MainWindow::on_pushButton_addElem_clicked()
|
|
|
-{
|
|
|
- ui->listWidget_elem->addItem(new QListWidgetItem(QIcon("/Users/menglanluo/菜狗.png"),"新加元素"));
|
|
|
-}
|
|
|
|
|
|
-
|
|
|
-void MainWindow::on_pushButton_delElem_clicked()
|
|
|
+void MainWindow::on_pushButton_delAnimation_clicked()
|
|
|
{
|
|
|
- QMessageBox::StandardButton reply = QMessageBox::question(this,"删除元素","确定要删除此元素吗?");
|
|
|
+ QMessageBox::StandardButton reply = QMessageBox::question(this,"删除动画","确定要删除此动画吗?");
|
|
|
if(reply == QMessageBox::Yes){
|
|
|
- delete ui->listWidget_elem->takeItem(ui->listWidget_elem->currentRow());
|
|
|
+ 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)
|
|
|
+ animVec.remove(i);
|
|
|
+ }
|
|
|
+ ui->tableWidget_animation->removeRow(curRow);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+//TODO: 名字变更时的数据变更及重名检查
|
|
|
+void MainWindow::on_tableWidget_animation_itemChanged(QTableWidgetItem *item)
|
|
|
+{
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ std::cout<<"名字发生改变,新名字:"<<qPrintable(newName)<<std::endl;
|
|
|
+ animVec[row].name = newName;
|
|
|
+ }
|
|
|
+ //资源名发生修改
|
|
|
+ else if(column == 1){
|
|
|
+ std::cout<<"动画资源发生改变,新资源名:"<<qPrintable(ui->tableWidget_animation->item(row,1)->text())<<std::endl;
|
|
|
+ }
|
|
|
+ // 时间线发生修改,居然没有反应。。。
|
|
|
+ else if(column == 2){
|
|
|
+ QComboBox *timeLine = qobject_cast<QComboBox*>(ui->tableWidget_animation->cellWidget(row,2));
|
|
|
+ std::cout<<"timeLine:"<<qPrintable(timeLine->currentText())<<std::endl;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ 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));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ std::cout<<"z-Order值发生改变,新值为:"<<zOrder<<std::endl;
|
|
|
+ animVec[row].zOrder = zOrder;
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
void MainWindow::on_pushButton_addCollectAnim_clicked()
|
|
|
{
|
|
@@ -99,7 +270,6 @@ void MainWindow::on_pushButton_addCollectAnim_clicked()
|
|
|
ui->listWidget_collectAnim->addItem(new QListWidgetItem("collAnim_1"));
|
|
|
}
|
|
|
|
|
|
-
|
|
|
void MainWindow::on_pushButton_delCollectAnim_clicked()
|
|
|
{
|
|
|
QMessageBox::StandardButton reply = QMessageBox::question(this,"删除动画","确定要删除此收集动画吗?");
|
|
@@ -165,69 +335,5 @@ void MainWindow::on_listWidget_pool_itemDoubleClicked(QListWidgetItem *item)
|
|
|
}
|
|
|
|
|
|
|
|
|
-void MainWindow::on_listWidget_elem_itemDoubleClicked(QListWidgetItem *item)
|
|
|
-{
|
|
|
- ChangeNameDialog newName;
|
|
|
- newName.setModal(true);
|
|
|
- newName.exec();
|
|
|
- if(!newName.getNewName().isEmpty()){
|
|
|
- item->setText(newName.getNewName());
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-void MainWindow::on_tableWidget_animation_cellDoubleClicked(int row, int column)
|
|
|
-{
|
|
|
- if(column == 1){
|
|
|
- ResFileDialog res;
|
|
|
- res.setModal(true);
|
|
|
- res.exec();
|
|
|
- QString fileName = res.getResName();
|
|
|
- if(!fileName.isEmpty()){
|
|
|
- ui->tableWidget_animation->setItem(row,column,new QTableWidgetItem(fileName));
|
|
|
- //TODO: 加入资源生成时间线代码
|
|
|
- QComboBox* timeLine = new QComboBox;
|
|
|
- timeLine->addItem("lml");
|
|
|
- timeLine->addItem("xdf");
|
|
|
- timeLine->addItem("cqf");
|
|
|
- ui->tableWidget_animation->setCellWidget(row,column+1,timeLine);
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-//TODO: 同步删除数据
|
|
|
-void MainWindow::on_pushButton_delAnimation_clicked()
|
|
|
-{
|
|
|
- QMessageBox::StandardButton reply = QMessageBox::question(this,"删除动画","确定要删除此动画吗?");
|
|
|
- if(reply == QMessageBox::Yes){
|
|
|
- int curRow = ui->tableWidget_animation->currentRow();
|
|
|
- ui->tableWidget_animation->removeRow(curRow);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-void MainWindow::on_tableWidget_animation_itemChanged(QTableWidgetItem *item)
|
|
|
-{
|
|
|
- int column = item->column();
|
|
|
- int row = item->row();
|
|
|
- //名字发生修改,检查新名称唯一性
|
|
|
- if(column == 0){
|
|
|
- std::cout<<"name:"<<qPrintable(ui->tableWidget_animation->item(row,0)->text())<<std::endl;
|
|
|
- }
|
|
|
- //资源名发生修改
|
|
|
- else if(column == 1){
|
|
|
- std::cout<<"resource:"<<qPrintable(ui->tableWidget_animation->item(row,1)->text())<<std::endl;
|
|
|
- }
|
|
|
- // 时间线发生修改,居然没有反应。。。
|
|
|
- else if(column == 2){
|
|
|
- QComboBox *timeLine = qobject_cast<QComboBox*>(ui->tableWidget_animation->cellWidget(row,2));
|
|
|
- std::cout<<"timeLine:"<<qPrintable(timeLine->currentText())<<std::endl;
|
|
|
- }
|
|
|
- //z-Order值发生修改,检查z-Order值合法性
|
|
|
- else{
|
|
|
- std::cout<<"z-Order:"<<qPrintable(ui->tableWidget_animation->item(row,3)->text())<<std::endl;
|
|
|
- }
|
|
|
-}
|
|
|
|
|
|
|