EnergySpectrumAnalyer/src/MeasureAnalysisProjectModel.h
2026-03-20 00:24:07 +08:00

174 lines
6.3 KiB
C++

#ifndef MEASUREANALYSISPROJECTMODEL_H
#define MEASUREANALYSISPROJECTMODEL_H
#include <QObject>
#include <QMap>
#include <QStandardItemModel>
#include "AnalysisTypeDefine.h"
class MeasureAnalysisView;
class MeasureAnalysisProjectModel
{
public:
enum SpectrumType {
None,
Sample, // 样品谱
Background, // 本底谱
};
public:
virtual ~MeasureAnalysisProjectModel();
void SetProjectDir(const QString& project_dir);
void SetProjectName(const QString& project_name);
void SetSpectrumType(SpectrumType spec_type);
void SetIsStdSource(bool is_std_source);
void SetDescriptionInfo(const QString& description_info);
void SetMeasurePresetTime(ulong measure_preset_time);
void SetConformTimeWin(uint conform_time_win);
void SetIsMeasureComplete(bool is_measure_complete);
void SetMeasureDeviceParamsCfgFilename(const QString& filename);
void SetEnergyScaleFilename(const QString& filename);
void SetEfficiencyScaleFilename(const QString& filename);
void SetAllChannelParticleDataFilename(const QString& filename);
void SetSortedParticleDataFilename(const QString& filename);
// void SetChannelParticleDataFilename(uint channel, const QString& filename);
void SetChannelAddressCountDataFilename(uint channel, const QString& filename);
// void SetAllChannelParticleTotalCountDataFilename(const QString& filename);
void SetChannelEnergyCountDataFilename(uint channel, const QString& filename);
void SetAllChannelEnergyTotalCountDataFilename(const QString& filename);
void SetTimeWinConformParticleData(uint time_win, uint conform_particle_count, const QString& filename);
void SetAnalysisCustomData(AnalysisType analysis_type, const QString& data_item_name, const QString& data_filename);
const QString& GetProjectDir() const;
const QString& GetProjectName() const;
SpectrumType GetSpectrumType() const;
bool GetIsStdSource() const;
const QString& GetDescriptionInfo() const;
ulong GetMeasurePresetTime() const;
uint GetConformTimeWin() const;
bool GetIsMeasureComplete() const;
const QString& GetMeasureDeviceParamsCfgFilename() const;
const QString& GetEnergyScaleFilename() const;
const QString& GetEfficiencyScaleFilename() const;
const QString& GetAllChannelParticleDataFilename() const;
const QString& GetSortAllChannelParticleDataFilename() const;
// const QMap<uint, QString>& GetChannelParticleDataFilenameList() const;
// const QString& GetChannelParticleDataFilename(uint channel) const;
const QMap<uint, QString>& GetChannelAddressCountDataFilenameList() const;
const QString GetChannelAddressCountDataFilename(uint channel) const;
// const QString& GetAllChannelParticleTotalCountDataFilename() const;
const QMap<uint, QString>& GetChannelEnergyCountDataFilenameList() const;
const QString GetChannelEnergyCountDataFilename(uint channel) const;
const QString& GetAllChannelEnergyTotalCountDataFilename() const;
const QMap<uint, QString> GetTimeWinConformParticleDataFilenameList(uint time_win) const;
const QString GetAnalysisCustomData(AnalysisType analysis_type, const QString& data_item_name);
private:
QString _project_dir;
QString _project_name;
SpectrumType _spec_type = SpectrumType::None;
bool _is_std_source = false;
QString _description_info;
ulong _measure_preset_time = 0;
uint _conform_time_win = 50;
bool _is_measure_complete = false;
QString _measure_device_params_cfg_filename;
QString _energy_scale_filename;
QString _efficiency_scale_filename;
QString _all_channel_particle_data_filename;
QString _sorted_particle_data_filename;
// QMap<uint, QString> _channel_particle_data_filename_list;
QMap<uint, QString> _channel_address_count_data_filename_list;
// QString _all_channel_particle_total_count_data_filename;
QMap<uint, QString> _channel_energy_count_data_filename_list;
QString _all_channel_energy_total_count_data_filename;
QMap<uint, QMap<uint, QString> > _time_win_conform_particle_data;
QMap<AnalysisType, QMap<QString, QString> > _analysis_custom_data_set;
public:
bool LoadProjectModel(const QString& project_filename);
bool SaveProjectModel();
private:
QString _project_filename;
};
class MeasureAnalysisProjectModelList : public QStandardItemModel
{
Q_OBJECT
public:
enum UserDataType {
NodeType = Qt::UserRole,
Fixed = Qt::UserRole + 1,
ProjectName = Qt::UserRole + 2,
ChannelNum = Qt::UserRole + 3
};
public:
static MeasureAnalysisProjectModelList* Instance();
virtual ~MeasureAnalysisProjectModelList();
bool AddProjectModel(MeasureAnalysisProjectModel* model);
bool RmProjectModel(const QString& project_name);
MeasureAnalysisProjectModel* GetProjectModel(const QString& project_name);
MeasureAnalysisProjectModel* GetCurrentProjectModel();
QList<MeasureAnalysisProjectModel*> GetProjectModels();
void SetCurrentProjectModel(const QString& project_name);
public:
QStandardItem* GetItemFromIndex(const QModelIndex &index) const;
QStandardItem* AddChildNode(QStandardItem *parent_item,
const QString &node_name,
const QString &status = QString(),
const QVariant &user_data = QVariant(),
bool is_fixed = false);
bool RemoveNode(QStandardItem *item);
void SetNodeUserData(QStandardItem* item, const QVariant& data);
QVariant GetNodeUserData(QStandardItem* item, UserDataType data_type = NodeType) const;
void SetNodeStatus(QStandardItem* item, const QString& status);
QString GetNodeStatus(QStandardItem* item) const;
private slots:
void onChannelAddressCountProcessFinished(const QString& project_name);
private:
void intiProjectNodeStruce(MeasureAnalysisProjectModel *pro_model);
private:
explicit MeasureAnalysisProjectModelList(QObject *parent = nullptr);
static MeasureAnalysisProjectModelList* _s_instance;
private:
MeasureAnalysisProjectModel* _current_project_model;
QMap<QString, MeasureAnalysisProjectModel*> _project_models;
QMap<QString, QMap<QString, QStandardItem*> > _project_node_items;
};
typedef MeasureAnalysisProjectModelList ProjectList;
#endif // MEASUREANALYSISPROJECTMODEL_H