// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #include #include #include "JFJochViewerDatasetInfo.h" JFJochViewerDatasetInfo::JFJochViewerDatasetInfo(QWidget *parent) : QWidget(parent) { setFixedHeight(200); auto layout = new QGridLayout(this); combo_box = new QComboBox(this); layout->addWidget(combo_box, 0, 0); auto reset_button = new QPushButton("Reset zoom", this); layout->addWidget(reset_button, 0, 1); chart_view = new JFJochChartView(this); layout->addWidget(chart_view, 1, 0, 1, 2); connect(chart_view, &JFJochChartView::imageSelected, this, &JFJochViewerDatasetInfo::imageSelectedInChart); connect(reset_button, &QPushButton::clicked, chart_view, &JFJochChartView::resetZoom); setLayout(layout); } void JFJochViewerDatasetInfo::datasetLoaded(std::shared_ptr dataset) { this->dataset = dataset; if (dataset) { combo_box->clear(); if (!dataset->bkg_estimate.empty()) combo_box->addItem("Background estimate", 0); if (!dataset->spot_count.empty()) combo_box->addItem("Spot count", 1); if (!dataset->indexing_result.empty()) combo_box->addItem("Indexing result", 2); if (!dataset->resolution_estimate.empty()) combo_box->addItem("Resolution estimate", 3); if (!dataset->b_factor.empty()) combo_box->addItem("B-factor", 4); if (!dataset->profile_radius.empty()) combo_box->addItem("Profile radius", 5); for (int i = 0; i < dataset->roi.size(); i++) { combo_box->addItem(QString::fromStdString("ROI " + dataset->roi[i] + " sum"), 1024 + 4 * i); combo_box->addItem(QString::fromStdString("ROI " + dataset->roi[i] + " pixels"), 1024 + 4 * i + 1); } connect(combo_box, &QComboBox::currentIndexChanged, this, &JFJochViewerDatasetInfo::comboBoxSelected); comboBoxSelected(0); } else chart_view->loadValues({}, 0); } void JFJochViewerDatasetInfo::imageLoaded(std::shared_ptr image) { this->image = image; if (image) chart_view->setImage(image->ImageData().number); } void JFJochViewerDatasetInfo::imageSelectedInChart(int64_t number) { emit imageSelected(number, 1); } void JFJochViewerDatasetInfo::comboBoxSelected(int index) { int val = combo_box->itemData(index).toInt(); std::vector tmp; if (dataset) { int64_t image_number = 0; if (image) image_number = image->ImageData().number; if (val == 0) chart_view->loadValues(dataset->bkg_estimate, image_number); else if (val == 1) chart_view->loadValues(dataset->spot_count, image_number); else if (val == 2) chart_view->loadValues(dataset->indexing_result, image_number); else if (val == 3) chart_view->loadValues(dataset->resolution_estimate, image_number); else if (val == 4) chart_view->loadValues(dataset->b_factor, image_number); else if (val == 5) chart_view->loadValues(dataset->profile_radius, image_number); else if ((val & 1024)) { int roi_number = (val - 1024) / 4; if (roi_number < dataset->roi.size()) { if (val % 4 == 0) chart_view->loadValues(dataset->roi_sum[roi_number], image_number); else if (val % 4 == 1) chart_view->loadValues(dataset->roi_npixel[roi_number], image_number); } } } }