#include "NewMeasureAnalysisDlg.h" #include "ui_NewMeasureAnalysisDlg.h" #include "MeasureAnalysisProjectModel.h" #include #include #include #include NewMeasureAnalysisDlg::NewMeasureAnalysisDlg(QWidget *parent) : QDialog(parent) , ui(new Ui::NewMeasureAnalysisDlg) { ui->setupUi(this); initialization(); } NewMeasureAnalysisDlg::~NewMeasureAnalysisDlg() { delete ui; } void NewMeasureAnalysisDlg::initialization() { QRegExp rx(R"(^[^\\/:*?"<>|]+$)"); QValidator *validator = new QRegExpValidator(rx, this); ui->lineEdit_name->setValidator(validator); ui->rbtn_sample_spec->setChecked(true); connect(ui->rbtn_sample_spec, &QRadioButton::toggled, [this](bool checked){ ui->label_is_std_source->setEnabled(checked); ui->checkBox_is_std_source->setEnabled(checked); }); ui->label_is_std_source->setEnabled(true); ui->checkBox_is_std_source->setEnabled(true); ui->checkBox_file_data->setChecked(false); ui->label_filename->setEnabled(false); ui->lineEdit_filename->setEnabled(false); ui->btn_filename->setEnabled(false); connect(ui->checkBox_file_data, &QCheckBox::toggled, [this](bool checked){ ui->label_filename->setEnabled(checked); ui->lineEdit_filename->setEnabled(checked); ui->btn_filename->setEnabled(checked); ui->spinBox_measure_preset_time->setEnabled(!checked); ui->spinBox_conform_time->setEnabled(!checked); }); connect(ui->btn_filename, &QPushButton::clicked, [this](){ const QString& filename = QFileDialog::getOpenFileName(this, QStringLiteral(u"选择粒子数据文件"), QString(), QStringLiteral(u"CSV (*.csv);;GVF (*.gvf)")); if (filename.isEmpty()) { return; } QFileInfo file_info(filename); if (file_info.size() == 0) { QMessageBox::warning(this, QStringLiteral(u"警告"), QStringLiteral(u"选择的粒子数据文件为空文件!")); return; } ui->lineEdit_filename->setText(file_info.fileName()); ui->lineEdit_filename->setProperty("data_file_path", filename); }); ui->btn_ok->setEnabled(false); auto turnStackPageBtnState = [this](){ int last_stack_index = ui->stackedWidget->count() - 1; int current_stack_index = ui->stackedWidget->currentIndex(); if ( current_stack_index > 0 ) { ui->btn_previous_step->setEnabled(true); } else { ui->btn_previous_step->setEnabled(false); } if ( current_stack_index < last_stack_index ) { ui->btn_next_step->setEnabled(true); ui->btn_ok->setEnabled(false); } else { ui->btn_next_step->setEnabled(false); ui->btn_ok->setEnabled(true); } }; ui->btn_previous_step->setEnabled(false); connect(ui->btn_previous_step, &QPushButton::clicked, [turnStackPageBtnState, this](){ int current_stack_index = ui->stackedWidget->currentIndex(); if ( current_stack_index > 0 ) { --current_stack_index; } ui->stackedWidget->setCurrentIndex(current_stack_index); turnStackPageBtnState(); }); ui->btn_next_step->setEnabled(true); connect(ui->btn_next_step, &QPushButton::clicked, [turnStackPageBtnState, this](){ int last_stack_index = ui->stackedWidget->count() - 1; int current_stack_index = ui->stackedWidget->currentIndex(); if ( current_stack_index < last_stack_index ) { ++current_stack_index; } ui->stackedWidget->setCurrentIndex(current_stack_index); turnStackPageBtnState(); }); connect(ui->btn_cancel, &QPushButton::clicked, this, &NewMeasureAnalysisDlg::reject); } void NewMeasureAnalysisDlg::on_btn_ok_clicked() { const QString& project_name = ui->lineEdit_name->text(); if (project_name.isEmpty()) { QMessageBox::warning(this, QStringLiteral(u"警告"), QStringLiteral(u"请输入测量分析名称!")); return; } QString projects_dir_path = QDir(qApp->applicationDirPath()).filePath("Projects"); QDir projects_dir(projects_dir_path); QString project_dir_path = projects_dir.filePath(project_name); QDir project_dir(project_dir_path); if (project_dir.exists()) { QMessageBox::warning(this, QStringLiteral(u"警告"), QStringLiteral(u"测量分析名称已存在,请重新输入!")); return; } MeasureAnalysisProjectModel::SpectrumType spec_type = MeasureAnalysisProjectModel::SpectrumType::None; if (ui->rbtn_sample_spec->isChecked()) { spec_type = MeasureAnalysisProjectModel::SpectrumType::Sample; } else if (ui->rbtn_background_spec->isChecked()) { spec_type = MeasureAnalysisProjectModel::SpectrumType::Background; } bool is_std_source = ui->checkBox_is_std_source->isChecked(); ulong measure_preset_time = ui->spinBox_measure_preset_time->value(); uint conform_time_win = ui->spinBox_conform_time->value(); QString description_info = ui->plainTextEdit_description->toPlainText(); bool is_measure_complete = false; QString data_file_path; if (ui->checkBox_file_data->isChecked()) { data_file_path = ui->lineEdit_filename->property("data_file_path").toString(); if (data_file_path.isEmpty()) { QMessageBox::warning(this, QStringLiteral(u"警告"), QStringLiteral(u"请选择粒子数据文件!")); return; } } project_dir.mkpath(project_dir_path); // 拷贝粒子数据文件到项目目录 QFileInfo data_file_info(data_file_path); QString all_channel_particle_data_filename = project_dir.filePath(data_file_info.fileName()); if (!QFile::copy(data_file_path, all_channel_particle_data_filename)) { QMessageBox::warning(this, QStringLiteral(u"警告"), QStringLiteral(u"载入粒子数据文件到项目目录失败!")); project_dir.removeRecursively(); return; } else { is_measure_complete = true; } MeasureAnalysisProjectModel* model = new MeasureAnalysisProjectModel; model->SetProjectDir(project_dir_path); model->SetProjectName(project_name); model->SetSpectrumType(spec_type); model->SetIsStdSource(is_std_source); model->SetMeasurePresetTime(measure_preset_time); model->SetConformTimeWin(conform_time_win); model->SetDescriptionInfo(description_info); model->SetAllChannelParticleDataFilename(all_channel_particle_data_filename); model->SetIsMeasureComplete(is_measure_complete); ProjectList::Instance()->AddProjectModel(model); NewMeasureAnalysisDlg::accept(); }