265 lines
12 KiB
C++
265 lines
12 KiB
C++
#include "MeasureAnalysisTreeView.h"
|
|
#include "AnalysisTypeDefine.h"
|
|
#include "QHeaderView"
|
|
#include "MeasureAnalysisView.h"
|
|
|
|
MeasureAnalysisTreeView::MeasureAnalysisTreeView(QWidget* parent)
|
|
: QTreeView(parent)
|
|
{
|
|
this->setFrameShape(QFrame::NoFrame);
|
|
this->setLineWidth(0);
|
|
|
|
_model = ProjectList::Instance();
|
|
this->setModel(_model);
|
|
|
|
QHeaderView* header_view = this->header();
|
|
// header_view->setSectionResizeMode(QHeaderView::Interactive);
|
|
// header_view->setMinimumSectionSize(10);
|
|
// header_view->resizeSection(1, 20);
|
|
header_view->setSectionResizeMode(0, QHeaderView::Interactive);
|
|
header_view->setSectionResizeMode(_model->columnCount() - 1, QHeaderView::Fixed);
|
|
header_view->resizeSection(_model->columnCount() - 1, 20);
|
|
|
|
this->setEditTriggers(NoEditTriggers);
|
|
this->setSelectionBehavior(SelectRows);
|
|
this->setSelectionMode(SingleSelection);
|
|
|
|
setContextMenuPolicy(Qt::CustomContextMenu);
|
|
connect(this, &QTreeView::customContextMenuRequested, this, &MeasureAnalysisTreeView::onCustomContextMenuRequested);
|
|
|
|
connect(this, &QTreeView::doubleClicked, this, &MeasureAnalysisTreeView::onNodeDoubleClicked);
|
|
}
|
|
|
|
void MeasureAnalysisTreeView::RemoveItemView(const QString &item_name)
|
|
{
|
|
for (auto it = _item_views.constBegin(); it!=_item_views.constEnd(); ++it ) {
|
|
MeasureAnalysisView* view = it.value();
|
|
if (view) {
|
|
if ( view->GetViewName() == item_name ) {
|
|
emit removeItemView(view);
|
|
_item_views.remove(it.key());
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void MeasureAnalysisTreeView::onCustomContextMenuRequested(const QPoint& pos)
|
|
{
|
|
QModelIndex index = indexAt(pos);
|
|
if (!index.isValid())
|
|
return;
|
|
|
|
QStandardItem* item = _model->GetItemFromIndex(index);
|
|
if (!item)
|
|
return;
|
|
|
|
QVariant user_data = _model->GetNodeUserData(item);
|
|
}
|
|
void MeasureAnalysisTreeView::onNodeDoubleClicked(const QModelIndex& index)
|
|
{
|
|
if (!index.isValid())
|
|
return;
|
|
QStandardItem* item = _model->GetItemFromIndex(index);
|
|
if (!item)
|
|
return;
|
|
if (!_model->GetNodeStatus(item)) {
|
|
QVariant analysis_type_data = _model->GetNodeUserData(item, ProjectList::NodeType);
|
|
if (!analysis_type_data.isValid())
|
|
return;
|
|
AnalysisType analysis_type = analysis_type_data.value<AnalysisType>();
|
|
if(analysis_type != AnalysisType::DeviceParamsCfg)
|
|
return;
|
|
}
|
|
const QString& item_text = item->text();
|
|
QVariant project_name_data = _model->GetNodeUserData(item, ProjectList::ProjectName);
|
|
if (!project_name_data.isValid())
|
|
return;
|
|
QString project_name = project_name_data.toString();
|
|
QVariant analysis_type_data = _model->GetNodeUserData(item, ProjectList::NodeType);
|
|
if (!analysis_type_data.isValid())
|
|
return;
|
|
AnalysisType analysis_type = analysis_type_data.value<AnalysisType>();
|
|
QMap<QString, QVariant> data_files_set;
|
|
MeasureAnalysisView* view = nullptr;
|
|
if ( _item_views.contains(item) ) {
|
|
view = _item_views[item];
|
|
} else {
|
|
switch(analysis_type) {
|
|
case AnalysisType::ParticleData: {
|
|
MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name);
|
|
if (project_model) {
|
|
auto file_name = project_model->GetAllChannelParticleDataFilename();
|
|
if ( !file_name.isEmpty() ) {
|
|
data_files_set[QStringLiteral(u"粒子数据")] = file_name;
|
|
}
|
|
}
|
|
} break;
|
|
case AnalysisType::AddressCountData: {
|
|
QVariant ch_num_data = _model->GetNodeUserData(item, ProjectList::ChannelNum);
|
|
if (ch_num_data.isValid()) {
|
|
int ch_num = ch_num_data.toInt();
|
|
MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name);
|
|
if (project_model) {
|
|
auto file_name = project_model->GetChannelAddressCountDataFilename(ch_num);
|
|
if ( !file_name.isEmpty() ) {
|
|
data_files_set[QStringLiteral(u"通道%1道址计数").arg(ch_num)] = file_name;
|
|
}
|
|
}
|
|
}
|
|
} break;
|
|
case AnalysisType::ParticleEnergyData: {
|
|
MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name);
|
|
if (project_model) {
|
|
auto file_name = project_model->GetParticleEnergyDataFilename();
|
|
if ( !file_name.isEmpty() ) {
|
|
data_files_set[QStringLiteral(u"粒子能量数据")] = file_name;
|
|
}
|
|
}
|
|
} break;
|
|
case AnalysisType::EnergyCountData: {
|
|
MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name);
|
|
if (project_model) {
|
|
auto file_name = project_model->GetAllChannelEnergyTotalCountDataFilename();
|
|
if ( !file_name.isEmpty() ) {
|
|
data_files_set[QStringLiteral(u"能量计数数据")] = file_name;
|
|
}
|
|
}
|
|
} break;
|
|
case AnalysisType::ChannelEnergyCountData: {
|
|
MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name);
|
|
if (project_model) {
|
|
auto file_name_list = project_model->GetChannelEnergyCountDataFilenameList();
|
|
if ( !file_name_list.isEmpty() ) {
|
|
auto ch_num_list = file_name_list.keys();
|
|
for(auto ch_num : ch_num_list) {
|
|
auto file_name = file_name_list[ch_num];
|
|
if ( !file_name.isEmpty() ) {
|
|
data_files_set[QStringLiteral(u"通道%1").arg(ch_num)] = file_name;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} break;
|
|
case AnalysisType::CoincidenceParticleEnergyData: {
|
|
QVariant conform_info_v = _model->GetNodeUserData(item, ProjectList::ConformInfo);
|
|
if (conform_info_v.isValid()) {
|
|
auto conform_info = conform_info_v.toList();
|
|
if (conform_info.size() == 2) {
|
|
int conform_time_win = conform_info.at(0).toInt();
|
|
int order = conform_info.at(1).toInt();
|
|
MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name);
|
|
if (project_model) {
|
|
auto file_name_list = project_model->GetTimeWinConformEnergyDataFilenameList(conform_time_win);
|
|
if ( file_name_list.contains(order) ) {
|
|
const QString& data_name = QStringLiteral(u"%1个粒子符合能量数据[%2ns]").arg(conform_time_win).arg(order);;
|
|
data_files_set[data_name] = QString(file_name_list[order]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} break;
|
|
case AnalysisType::AddressCountSpectrumView: {
|
|
MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name);
|
|
if (project_model) {
|
|
auto file_name_list = project_model->GetChannelAddressCountDataFilenameList();
|
|
if ( !file_name_list.isEmpty() ) {
|
|
auto ch_num_list = file_name_list.keys();
|
|
for(auto ch_num : ch_num_list) {
|
|
auto file_name = file_name_list[ch_num];
|
|
if ( !file_name.isEmpty() ) {
|
|
data_files_set[QStringLiteral(u"通道%1").arg(ch_num)] = file_name;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} break;
|
|
case AnalysisType::EnergyCountSpectrumView: {
|
|
MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name);
|
|
if (project_model) {
|
|
auto all_ch_energy_count_file_name = project_model->GetAllChannelEnergyTotalCountDataFilename();
|
|
if (!all_ch_energy_count_file_name.isEmpty()) {
|
|
data_files_set[QStringLiteral(u"全通道")] = all_ch_energy_count_file_name;
|
|
}
|
|
auto ch_energy_count_file_name_list = project_model->GetChannelEnergyCountDataFilenameList();
|
|
if ( !ch_energy_count_file_name_list.isEmpty() ) {
|
|
auto ch_num_list = ch_energy_count_file_name_list.keys();
|
|
for(auto ch_num : ch_num_list) {
|
|
auto ch_file_name = ch_energy_count_file_name_list[ch_num];
|
|
if ( !ch_file_name.isEmpty() ) {
|
|
data_files_set[QStringLiteral(u"通道%1").arg(ch_num)] = ch_file_name; }
|
|
}
|
|
}
|
|
}
|
|
} break;
|
|
case AnalysisType::EnergyPeakFitView: {
|
|
MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name);
|
|
if (project_model) {
|
|
auto all_ch_energy_count_file_name = project_model->GetAllChannelEnergyTotalCountDataFilename();
|
|
if (!all_ch_energy_count_file_name.isEmpty()) {
|
|
data_files_set[QStringLiteral(u"测量能谱")] = all_ch_energy_count_file_name;
|
|
}
|
|
}
|
|
} break;
|
|
case AnalysisType::ParticleInTimeView: {
|
|
MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name);
|
|
if (project_model) {
|
|
auto file_name = project_model->GetParticleEnergyDataFilename();
|
|
if ( !file_name.isEmpty() ) {
|
|
data_files_set[QStringLiteral(u"粒子能量数据")] = file_name;
|
|
}
|
|
}
|
|
} break;
|
|
case AnalysisType::CountingRateView: {
|
|
MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name);
|
|
if (project_model) {
|
|
auto file_name = project_model->GetParticleEnergyDataFilename();
|
|
if ( !file_name.isEmpty() ) {
|
|
data_files_set[QStringLiteral(u"计数率")] = file_name;
|
|
}
|
|
}
|
|
} break;
|
|
case AnalysisType::ParticleTimeDiffView: {
|
|
MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name);
|
|
if (project_model) {
|
|
auto file_name = project_model->GetAllChannelParticleDataFilename();
|
|
if ( !file_name.isEmpty() ) {
|
|
data_files_set[QStringLiteral(u"粒子数据")] = file_name;
|
|
}
|
|
}
|
|
} break;
|
|
case AnalysisType::CoincidenceParticleEnergySpectrum3DView: {
|
|
MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name);
|
|
if (project_model) {
|
|
auto file_name_list = project_model->GetTimeWinConformEnergyDataFilenameList(project_model->GetConformTimeWin());
|
|
for (auto it = file_name_list.constBegin(); it!=file_name_list.constEnd(); ++it) {
|
|
data_files_set[QString::number(it.key())] = it.value();
|
|
}
|
|
}
|
|
} break;
|
|
case AnalysisType::DeviceParamsCfg: {
|
|
MeasureAnalysisProjectModel* project_model = _model->GetProjectModel(project_name);
|
|
if (project_model) {
|
|
QString file_name = project_model->GetMeasureDeviceParamsCfgFilename();
|
|
data_files_set[QStringLiteral(u"设备参数配置")] = file_name;
|
|
}
|
|
} break;
|
|
default:
|
|
break;
|
|
}
|
|
if (!data_files_set.isEmpty()) {
|
|
view = MeasureAnalysisView::NewAnalyzeView(analysis_type);
|
|
view->SetProjectName(project_name);
|
|
const auto& view_name = QStringLiteral(u"%1[%2]").arg(item_text).arg(project_name);
|
|
view->SetViewName(view_name);
|
|
view->SetViewDescription(view_name);
|
|
view->InitViewWorkspace(project_name);
|
|
view->SetAnalyzeDataFilename(data_files_set);
|
|
}
|
|
}
|
|
if ( view ) {
|
|
_item_views[item] = view;
|
|
emit currentItemView(view);
|
|
}
|
|
}
|