/** * @author Rick Chan (cy187lion@sina.com) * @date 2020-08-28 */ #include "qtproaddfilehelper.h" #include "ui_qtproaddfilehelper.h" #include #include #include #include #include QtProAddFileHelper::QtProAddFileHelper(QWidget *parent) : QMainWindow(parent), ui(new Ui::QtProAddFileHelper) { ui->setupUi(this); StatusLabel = new QLabel(this); StatusLabel->adjustSize(); ui->statusBar->addWidget(StatusLabel); StatusLabel->setText("By: Lion Chen @Giraffe Ver:2.3.0"); CheckBoxes.clear(); CheckBoxes.append(ui->cCheckBox); CheckBoxes.append(ui->CpupuCheckBox); CheckBoxes.append(ui->cppCheckBox); CheckBoxes.append(ui->cxxCheckBox); CheckBoxes.append(ui->ccCheckBox); CheckBoxes.append(ui->tccCheckBox); CheckBoxes.append(ui->hCheckBox); CheckBoxes.append(ui->hpupuCheckBox); CheckBoxes.append(ui->hppCheckBox); CheckBoxes.append(ui->hxxCheckBox); CheckBoxes.append(ui->MkfCheckBox); CheckBoxes.append(ui->asmCheckBox); CheckBoxes.append(ui->sCheckBox); CheckBoxes.append(ui->xmlCheckBox); for(QList::Iterator itr=CheckBoxes.begin(); itr!=CheckBoxes.end(); itr++) connect(*itr, &QCheckBox::clicked, this, &QtProAddFileHelper::OnCheckBoxesClicked); } QtProAddFileHelper::~QtProAddFileHelper() { delete ui; } void QtProAddFileHelper::SetUiEnable(bool en) { ui->OKButton->setEnabled(en); ui->ProEdit->setEnabled(en); ui->PathEdit->setEnabled(en); ui->cCheckBox->setEnabled(en); ui->CpupuCheckBox->setEnabled(en); ui->cppCheckBox->setEnabled(en); ui->cxxCheckBox->setEnabled(en); ui->ccCheckBox->setEnabled(en); ui->tccCheckBox->setEnabled(en); ui->hCheckBox->setEnabled(en); ui->hpupuCheckBox->setEnabled(en); ui->hppCheckBox->setEnabled(en); ui->hxxCheckBox->setEnabled(en); ui->MkfCheckBox->setEnabled(en); ui->asmCheckBox->setEnabled(en); ui->sCheckBox->setEnabled(en); ui->xmlCheckBox->setEnabled(en); ui->RelaPthcheckBox->setEnabled(en); } void QtProAddFileHelper::on_OKButton_clicked() { SetUiEnable(false); /** * @brief 获取搜索路径 */ QDir schDir(ui->PathEdit->text()); /** 判断路径是否合法 */ if (schDir.path().isEmpty() || !schDir.exists()) { QMessageBox WrrMsg; WrrMsg.setInformativeText("请输入有效的搜索路径!"); WrrMsg.show(); WrrMsg.exec(); SetUiEnable(true); return; } ui->PathEdit->setText(schDir.path()); /** * @brief 获取项目文件 */ QFileInfo proFileInfo(ui->ProEdit->text()); /** 判断项目文件是否合法 */ if(proFileInfo.filePath().isEmpty() || false==proFileInfo.exists() || "pro"!=proFileInfo.suffix().toLower() || false==proFileInfo.isFile()) { QMessageBox WrrMsg; WrrMsg.setInformativeText("请输入有效的项目文件!"); WrrMsg.show(); WrrMsg.exec(); SetUiEnable(true); return; } /** * | H |----------------------------| L | * | | tcc | cc | cxx | cpp | c++ | c | * | 00 | 1 | 1 | 1 | 1 | 1 | 1 | * * | | hxx | hpp | h++ | h | * | 0000 | 1 | 1 | 1 | 1 | * * | |.xml.|.s.|.asm.|.Makefile.| * | 0000 | 1 | 1 | 1 | 1 | */ FILE_TYPES selectedFile; /**< Sources */ if(ui->cCheckBox->isChecked()) { selectedFile.Source |= 0x01; } if(ui->CpupuCheckBox->isChecked()) { selectedFile.Source |= 0x02; } if(ui->cppCheckBox->isChecked()) { selectedFile.Source |= 0x04; } if(ui->cxxCheckBox->isChecked()) { selectedFile.Source |= 0x08; } if(ui->ccCheckBox->isChecked()) { selectedFile.Source |= 0x10; } if(ui->tccCheckBox->isChecked()) { selectedFile.Source |= 0x20; } /**< Headers */ if(ui->hCheckBox->isChecked()) { selectedFile.Header |= 0x01; } if(ui->hpupuCheckBox->isChecked()) { selectedFile.Header |= 0x02; } if(ui->hppCheckBox->isChecked()) { selectedFile.Header |= 0x04; } if(ui->hxxCheckBox->isChecked()) { selectedFile.Header |= 0x08; } /**< Others */ if(ui->MkfCheckBox->isChecked()) { selectedFile.Other |= 0x01; } if(ui->asmCheckBox->isChecked()) { selectedFile.Other |= 0x02; } if(ui->sCheckBox->isChecked()) { selectedFile.Other |= 0x04; } if(ui->xmlCheckBox->isChecked()) { selectedFile.Other |= 0x08; } if(0==selectedFile.Source && 0==selectedFile.Header && 0==selectedFile.Other) { QMessageBox WrrMsg; WrrMsg.setInformativeText("没有选中任何文件类型!"); WrrMsg.show(); WrrMsg.exec(); SetUiEnable(true); return; } if(ui->RelaPthcheckBox->isChecked()) { KEngine = new Engine(proFileInfo.absolutePath(), schDir.path(), proFileInfo.filePath(), selectedFile, this); } else { KEngine = new Engine("", schDir.path(), proFileInfo.filePath(), selectedFile, this); } connect(KEngine, SIGNAL(EngineProcessing(bool,int)), this, SLOT(on_EngineProcessing(bool,int))); KEngine->start(); } void QtProAddFileHelper::on_EngineProcessing(bool done, int processedCount) { if(done) { if(NULL!=KEngine) { delete KEngine; KEngine = NULL; } SetUiEnable(true); StatusLabel->setText("处理完成!"); } else { StatusLabel->setText("已处理文件数:"+QString::number(processedCount,10)); } } void QtProAddFileHelper::on_ProButton_clicked() { QFileDialog *fileDialog = new QFileDialog(this); fileDialog->setWindowTitle("打开Qt项目件"); QString lastOpenPth; if(!ui->PathEdit->text().isEmpty()) { lastOpenPth = ui->PathEdit->text(); } else { lastOpenPth = QStandardPaths::standardLocations(QStandardPaths::DesktopLocation).at(0); } QDir tstPth(lastOpenPth); if(tstPth.exists()) { fileDialog->setDirectory(lastOpenPth); } else { fileDialog->setDirectory(QStandardPaths::standardLocations(QStandardPaths::DesktopLocation).at(0)); } fileDialog->setNameFilter("Qt项目件(*.pro)"); if(fileDialog->exec() == QDialog::Accepted) { ui->ProEdit->setText(fileDialog->selectedFiles().at(0)); } } void QtProAddFileHelper::on_PathButton_clicked() { QFileDialog *fileDialog = new QFileDialog(this); fileDialog->setWindowTitle("选择搜索路径"); QString lastOpenPth; if(!ui->ProEdit->text().isEmpty()) { lastOpenPth = ui->ProEdit->text(); } else if(!ui->PathEdit->text().isEmpty()) { lastOpenPth = ui->PathEdit->text(); } else { lastOpenPth = QStandardPaths::standardLocations(QStandardPaths::DesktopLocation).at(0); } QDir tstPth(lastOpenPth); if(tstPth.exists()) { fileDialog->setDirectory(lastOpenPth); } else { fileDialog->setDirectory(QStandardPaths::standardLocations(QStandardPaths::DesktopLocation).at(0)); } fileDialog->setFileMode(QFileDialog::Directory); if(fileDialog->exec() == QDialog::Accepted) { ui->PathEdit->setText(fileDialog->selectedFiles().at(0)); } } void QtProAddFileHelper::on_PathEdit_editingFinished() { ui->PathEdit->setText(ui->PathEdit->text().replace("\\","/")); if(ui->ProEdit->text().isEmpty()) { ui->ProEdit->setText(ui->PathEdit->text()); } } void QtProAddFileHelper::on_SeleAllcheckBox_clicked(bool checked) { if(checked) { for(QList::Iterator itr=CheckBoxes.begin(); itr!=CheckBoxes.end(); itr++) (*itr)->setChecked(true); } else { for(QList::Iterator itr=CheckBoxes.begin(); itr!=CheckBoxes.end(); itr++) (*itr)->setChecked(false); } } void QtProAddFileHelper::OnCheckBoxesClicked(bool checked) { if(checked) { for(QList::Iterator itr=CheckBoxes.begin(); itr!=CheckBoxes.end(); itr++) { if(!(*itr)->isChecked()) return; } ui->SeleAllcheckBox->setChecked(true); } else ui->SeleAllcheckBox->setChecked(false); }