EnergySpectrumAnalyer/src/MeasureAnalysisTreeView.cpp

132 lines
5.4 KiB
C++

#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<AnalysisType>();
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<QString, QVariant> 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<QString, QVariant> 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<QString, QVariant> 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;
}
}