#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 = header(); header_view->setSectionResizeMode(QHeaderView::Interactive); header_view->setMinimumSectionSize(10); header_view->resizeSection(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::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; 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(); 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() ) { QMap data_files_set; data_files_set[QStringLiteral(u"粒子数据")] = file_name; MeasureAnalysisView* view = MeasureAnalysisView::NewAnalyzeView(analysis_type); if ( view ) { const auto& view_name = QStringLiteral(u"%1 [%2]").arg(item_text).arg(project_name); view->SetViewName(view_name); view->SetViewDescription(view_name); view->SetAnalyzeDataFilename(data_files_set); emit currentItemView(view); } } } } 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() ) { QMap data_files_set; data_files_set[QStringLiteral(u"通道%1道址计数").arg(ch_num)] = file_name; MeasureAnalysisView* view = MeasureAnalysisView::NewAnalyzeView(analysis_type); if ( view ) { const auto& view_name = QStringLiteral(u"%1 [%2]").arg(item_text).arg(project_name); view->SetViewName(view_name); view->SetViewDescription(view_name); view->SetAnalyzeDataFilename(data_files_set); emit currentItemView(view); } } } } } 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() ) { QMap data_files_set; 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; } } MeasureAnalysisView* view = nullptr; if ( _item_views.contains(item) ) { view = _item_views[item]; } else { view = MeasureAnalysisView::NewAnalyzeView(analysis_type); const auto& view_name = QStringLiteral(u"%1 [%2]").arg(item_text).arg(project_name); view->SetViewName(view_name); view->SetViewDescription(view_name); view->SetAnalyzeDataFilename(data_files_set); } if ( view ) { _item_views[item] = view; emit currentItemView(view); } } } } break; default: break; } }