QtProAddFileHelper/source/qtproaddfilehelper.cpp

341 lines
8.4 KiB
C++

/**
* @author Rick Chan (cy187lion@sina.com)
* @date 2020-08-28
*/
#include "qtproaddfilehelper.h"
#include "ui_qtproaddfilehelper.h"
#include <QDir>
#include <QMessageBox>
#include <QTextStream>
#include <QFileDialog>
#include <QStandardPaths>
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<QCheckBox*>::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<QCheckBox*>::Iterator itr=CheckBoxes.begin();
itr!=CheckBoxes.end();
itr++)
(*itr)->setChecked(true);
}
else
{
for(QList<QCheckBox*>::Iterator itr=CheckBoxes.begin();
itr!=CheckBoxes.end();
itr++)
(*itr)->setChecked(false);
}
}
void QtProAddFileHelper::OnCheckBoxesClicked(bool checked)
{
if(checked)
{
for(QList<QCheckBox*>::Iterator itr=CheckBoxes.begin();
itr!=CheckBoxes.end();
itr++)
{
if(!(*itr)->isChecked())
return;
}
ui->SeleAllcheckBox->setChecked(true);
}
else
ui->SeleAllcheckBox->setChecked(false);
}