#ifndef MEASUREANALYSISPROJECTMODEL_H #define MEASUREANALYSISPROJECTMODEL_H #include #include #include #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& GetChannelParticleDataFilenameList() const; // const QString& GetChannelParticleDataFilename(uint channel) const; const QMap& GetChannelAddressCountDataFilenameList() const; const QString GetChannelAddressCountDataFilename(uint channel) const; // const QString& GetAllChannelParticleTotalCountDataFilename() const; const QMap& GetChannelEnergyCountDataFilenameList() const; const QString GetChannelEnergyCountDataFilename(uint channel) const; const QString& GetAllChannelEnergyTotalCountDataFilename() const; const QMap 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 _channel_particle_data_filename_list; QMap _channel_address_count_data_filename_list; // QString _all_channel_particle_total_count_data_filename; QMap _channel_energy_count_data_filename_list; QString _all_channel_energy_total_count_data_filename; QMap > _time_win_conform_particle_data; QMap > _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 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 _project_models; QMap > _project_node_items; }; typedef MeasureAnalysisProjectModelList ProjectList; #endif // MEASUREANALYSISPROJECTMODEL_H