From 629e73876f22e3f6e97269693665ca82c62f694c Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Mon, 23 May 2022 19:52:11 +0200 Subject: [PATCH] doing IntensityDataPropertyWidget connections --- GUI/Model/Job/JobItem.cpp | 11 ++++---- GUI/View/Common/ItemComboWidget.cpp | 1 - GUI/View/Plot2D/IntensityDataWidget.cpp | 4 +-- .../PlotComparison/FitComparisonWidget.cpp | 2 +- .../PlotUtil/IntensityDataPropertyWidget.cpp | 28 +++++++++++++++++-- .../PlotUtil/IntensityDataPropertyWidget.h | 8 ++++-- .../IntensityDataProjectionsWidget.cpp | 5 ++-- GUI/View/Projection/ProjectionsEditor.cpp | 4 +-- GUI/View/Projection/ProjectionsEditor.h | 3 +- 9 files changed, 45 insertions(+), 21 deletions(-) diff --git a/GUI/Model/Job/JobItem.cpp b/GUI/Model/Job/JobItem.cpp index 5bf8691d7cf..3a71c8eb053 100644 --- a/GUI/Model/Job/JobItem.cpp +++ b/GUI/Model/Job/JobItem.cpp @@ -41,7 +41,6 @@ const QString Instrument("Instrument"); } // namespace Tags } // namespace - JobItem::JobItem() : SessionItem(M_TYPE) { @@ -65,11 +64,11 @@ JobItem::JobItem() registerTag(T_FIT_SUITE, 1, 1, {FitSuiteItem::M_TYPE}); - mapper()->setOnChildPropertyChange([this](SessionItem* item, const QString& name) { - if (item->parent() == this && dynamic_cast<DataItem*>(item) - && DataItem::isAxesUnitsPropertyName(name)) - dynamic_cast<DataItem*>(item)->updateCoords(instrumentItem()); - }); +// mapper()->setOnChildPropertyChange([this](SessionItem* item, const QString& name) { +// if (item->parent() == this && dynamic_cast<DataItem*>(item) +// && DataItem::isAxesUnitsPropertyName(name)) +// dynamic_cast<DataItem*>(item)->updateCoords(instrumentItem()); +// }); } QString JobItem::getIdentifier() const diff --git a/GUI/View/Common/ItemComboWidget.cpp b/GUI/View/Common/ItemComboWidget.cpp index 7ae926256c7..860b8e30ab8 100644 --- a/GUI/View/Common/ItemComboWidget.cpp +++ b/GUI/View/Common/ItemComboWidget.cpp @@ -47,7 +47,6 @@ void ItemComboWidget::registerWidget(const QString& presentationType, factory_fu } //! Sets stack to show widget corresponding to given presentation - void ItemComboWidget::setPresentation(const QString& presentationType) { if (presentationType.isEmpty()) { diff --git a/GUI/View/Plot2D/IntensityDataWidget.cpp b/GUI/View/Plot2D/IntensityDataWidget.cpp index 71db6e22223..cdd24da6574 100644 --- a/GUI/View/Plot2D/IntensityDataWidget.cpp +++ b/GUI/View/Plot2D/IntensityDataWidget.cpp @@ -25,9 +25,9 @@ IntensityDataWidget::IntensityDataWidget(QWidget* parent) : SessionItemWidget(parent) , m_intensityCanvas(new IntensityDataCanvas) - , m_propertyWidget(new IntensityDataPropertyWidget) + , m_propertyWidget(new IntensityDataPropertyWidget(this)) , m_fftPresenter(new IntensityDataFFTPresenter(this)) -{ +{ setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_propertyWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum); diff --git a/GUI/View/PlotComparison/FitComparisonWidget.cpp b/GUI/View/PlotComparison/FitComparisonWidget.cpp index d700e6a86cc..c50f97a3f8e 100644 --- a/GUI/View/PlotComparison/FitComparisonWidget.cpp +++ b/GUI/View/PlotComparison/FitComparisonWidget.cpp @@ -35,7 +35,7 @@ FitComparisonWidget::FitComparisonWidget(QWidget* parent) , m_relativeDiffPlot(new ColorMapCanvas) , m_fitFlowWidget(new FitFlowWidget) , m_statusLabel(new PlotStatusLabel(nullptr, this)) - , m_propertyWidget(new IntensityDataPropertyWidget) + , m_propertyWidget(new IntensityDataPropertyWidget(this)) , m_resetViewAction(new QAction(this)) , m_comparisonController(new FitComparisonController2D(this)) { diff --git a/GUI/View/PlotUtil/IntensityDataPropertyWidget.cpp b/GUI/View/PlotUtil/IntensityDataPropertyWidget.cpp index 0cbcbd88ba7..a63050dfb0d 100644 --- a/GUI/View/PlotUtil/IntensityDataPropertyWidget.cpp +++ b/GUI/View/PlotUtil/IntensityDataPropertyWidget.cpp @@ -14,6 +14,8 @@ #include "GUI/View/PlotUtil/IntensityDataPropertyWidget.h" #include "GUI/Model/Data/IntensityDataItem.h" +#include "GUI/View/Common/SessionItemWidget.h" +#include "GUI/Model/Job/JobItem.h" #include "GUI/Model/Device/AxesItems.h" #include "GUI/Util/ComboProperty.h" #include "GUI/View/Common/DoubleSpinBox.h" @@ -27,6 +29,7 @@ IntensityDataPropertyWidget::IntensityDataPropertyWidget(QWidget* parent) : QWidget(parent) + , parent(parent) , m_item(nullptr) { setWindowTitle("Properties"); @@ -44,6 +47,7 @@ IntensityDataPropertyWidget::~IntensityDataPropertyWidget() m_item->mapper()->unsubscribe(this); } +#include <QDebug> void IntensityDataPropertyWidget::setItem(IntensityDataItem* item) { if (m_item) @@ -56,7 +60,18 @@ void IntensityDataPropertyWidget::setItem(IntensityDataItem* item) if (!item) return; - m_mainLayout->addRow("Axes units:", createComboBox(item->axesUnits())); + QComboBox* axesUnitsCombo = createComboBox(item->axesUnits()); + // Connection instead of using sessionItem mapper + connect(axesUnitsCombo, &QComboBox::currentTextChanged, this, [=](QString currentText) { + Q_UNUSED(currentText) + // It doesn't work for real data map and diff data map + // Also need to connect other intensity data items + if(jobItem()) + item->updateCoords(jobItem()->instrumentItem()); + }); + qInfo() << "IntensityDataPropertyWidget : jobItem is" << jobItem() << endl; + + m_mainLayout->addRow("Axes units:", axesUnitsCombo); m_mainLayout->addRow("Color scheme:", createComboBox(item->gradient())); m_mainLayout->addRow(createCheckBox( @@ -109,6 +124,15 @@ void IntensityDataPropertyWidget::setItem(IntensityDataItem* item) item->mapper()->setOnItemDestroy([this](SessionItem*) { m_item = nullptr; }, this); } +const JobItem* IntensityDataPropertyWidget::jobItem() const +{ + SessionItemWidget* sessionItemWidget = dynamic_cast<SessionItemWidget*>(parent); + if(!sessionItemWidget) + return nullptr; + + return dynamic_cast<JobItem*>(sessionItemWidget->currentItem()); +} + QWidget* IntensityDataPropertyWidget::createDoubleSpinbox(DoubleDescriptor d) { auto* spinBox = new DoubleSpinBox(this, d); @@ -151,7 +175,7 @@ QWidget* IntensityDataPropertyWidget::createCheckBox(const QString& title, funct return checkBox; } -QWidget* IntensityDataPropertyWidget::createComboBox(SelectionDescriptor<QString> d) +QComboBox* IntensityDataPropertyWidget::createComboBox(SelectionDescriptor<QString> d) { auto* combo = new QComboBox(this); combo->addItems(d.options); diff --git a/GUI/View/PlotUtil/IntensityDataPropertyWidget.h b/GUI/View/PlotUtil/IntensityDataPropertyWidget.h index b6753446fc6..fb5fca9a7d6 100644 --- a/GUI/View/PlotUtil/IntensityDataPropertyWidget.h +++ b/GUI/View/PlotUtil/IntensityDataPropertyWidget.h @@ -18,11 +18,11 @@ #include "GUI/Model/Descriptor/SelectionDescriptor.h" #include <QList> #include <QString> -#include <QWidget> +#include <QComboBox> #include <functional> class IntensityDataItem; -class SessionItem; +class JobItem; class QFormLayout; class DoubleDescriptor; @@ -37,6 +37,7 @@ public: ~IntensityDataPropertyWidget(); void setItem(IntensityDataItem* item); + const JobItem* jobItem() const; private: QWidget* createDoubleSpinbox(DoubleDescriptor d); @@ -44,11 +45,12 @@ private: QWidget* createCheckBox(const QString& title, SessionItem* item); QWidget* createCheckBox(const QString& title, function<bool()> getter, function<void(bool)> setter); - QWidget* createComboBox(SelectionDescriptor<QString> d); + QComboBox* createComboBox(SelectionDescriptor<QString> d); void updateUIValues(); private: + QWidget* parent; IntensityDataItem* m_item; QFormLayout* m_mainLayout; QList<function<void()>> m_updaters; diff --git a/GUI/View/Projection/IntensityDataProjectionsWidget.cpp b/GUI/View/Projection/IntensityDataProjectionsWidget.cpp index 0870a5a163a..14b1a715fb0 100644 --- a/GUI/View/Projection/IntensityDataProjectionsWidget.cpp +++ b/GUI/View/Projection/IntensityDataProjectionsWidget.cpp @@ -21,13 +21,12 @@ IntensityDataProjectionsWidget::IntensityDataProjectionsWidget(QWidget* parent) : SessionItemWidget(parent) - , m_projectionsEditor(new ProjectionsEditor) + , m_projectionsEditor(new ProjectionsEditor(this)) { - auto* vlayout = new QVBoxLayout(this); + auto* vlayout = new QVBoxLayout; vlayout->setMargin(0); vlayout->setSpacing(0); vlayout->addWidget(m_projectionsEditor); - setLayout(vlayout); } diff --git a/GUI/View/Projection/ProjectionsEditor.cpp b/GUI/View/Projection/ProjectionsEditor.cpp index 2ba6dc4370f..930375038db 100644 --- a/GUI/View/Projection/ProjectionsEditor.cpp +++ b/GUI/View/Projection/ProjectionsEditor.cpp @@ -24,13 +24,13 @@ #include <QItemSelectionModel> #include <QSplitter> -ProjectionsEditor::ProjectionsEditor(QWidget* parent) +ProjectionsEditor::ProjectionsEditor(SessionItemWidget* upperSessionItemWidget, QWidget* parent) : QMainWindow(parent) , m_editorActions(new ProjectionsEditorActions(this)) , m_toolbar(new ProjectionsToolbar(m_editorActions)) , m_projectionsCanvas(new ProjectionsEditorCanvas) , m_projectionsWidget(new ProjectionsWidget) - , m_propertyPanel(new IntensityDataPropertyWidget) + , m_propertyPanel(new IntensityDataPropertyWidget(upperSessionItemWidget)) // here not "this", because IntensityDataPropertyWidget requires access to jobItem , m_selectionModel(nullptr) { addToolBar(Qt::RightToolBarArea, m_toolbar); diff --git a/GUI/View/Projection/ProjectionsEditor.h b/GUI/View/Projection/ProjectionsEditor.h index bb4d3900f99..a565f954401 100644 --- a/GUI/View/Projection/ProjectionsEditor.h +++ b/GUI/View/Projection/ProjectionsEditor.h @@ -27,6 +27,7 @@ class ProjectionsEditorCanvas; class ProjectionsWidget; class QItemSelectionModel; class IntensityDataPropertyWidget; +class SessionItemWidget; //! Editor to draw projections on top of intensity plot. Part of @@ -34,7 +35,7 @@ class ProjectionsEditor : public QMainWindow { Q_OBJECT public: - ProjectionsEditor(QWidget* parent = nullptr); + ProjectionsEditor(SessionItemWidget* upperSessionItemWidget = nullptr, QWidget* parent = nullptr); void setContext(SessionModel* model, const QModelIndex& shapeContainerIndex, IntensityDataItem* intensityItem); -- GitLab