#include "MeasureAnalysisTreeView.h" #include "AnalysisTypeDefine.h" #include "QHeaderView" #include "MeasureAnalysisView.h" MeasureAnalysisTreeView::MeasureAnalysisTreeView(QWidget* parent) : QTreeView(parent) { _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)) { 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(); QMap 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::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::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 = project_model->GetAllChannelParticleDataFilename(); if ( !file_name.isEmpty() ) { data_files_set[QStringLiteral(u"符合粒子能量3D视图")] = 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); } }