From 50cb3941648dc5b3d4b919c2ee73665ba8e76273 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Wed, 20 Jul 2022 16:46:38 +0200 Subject: [PATCH 01/32] DataAccessWidget: add fourier case --- GUI/View/Common/DataAccessWidget.cpp | 13 +++++++++++++ GUI/View/Common/DataAccessWidget.h | 3 +++ 2 files changed, 16 insertions(+) diff --git a/GUI/View/Common/DataAccessWidget.cpp b/GUI/View/Common/DataAccessWidget.cpp index 3e54b763728..1117b762229 100644 --- a/GUI/View/Common/DataAccessWidget.cpp +++ b/GUI/View/Common/DataAccessWidget.cpp @@ -31,6 +31,11 @@ void DataAccessWidget::setJobOrRealItem(JobRealBase* item) connect(m_item, &QObject::destroyed, this, [=](){ m_item = nullptr; }); } +void DataAccessWidget::setFourierItem(IntensityDataItem* fftItem) +{ + m_fftItem = fftItem; +} + QList<QAction*> DataAccessWidget::actionList() { return QList<QAction*>(); @@ -109,21 +114,29 @@ SpecularDataItem* DataAccessWidget::currentSpecularDataItem() const QList<IntensityDataItem*> DataAccessWidget::mainIntensityDataItems() const { + if(m_fftItem) + return {m_fftItem}; return mainDataItems<IntensityDataItem>(); } QList<IntensityDataItem*> DataAccessWidget::otherMainIntensityDataItems() const { + if(m_fftItem) + return {}; return otherMainDataItems<IntensityDataItem>(); } QList<IntensityDataItem*> DataAccessWidget::allIntensityDataItems() const { + if(m_fftItem) + return {m_fftItem}; return allDataItems<IntensityDataItem>(); } QList<IntensityDataItem*> DataAccessWidget::otherAllIntensityDataItems() const { + if(m_fftItem) + return {}; return otherAllDataItems<IntensityDataItem>(); } diff --git a/GUI/View/Common/DataAccessWidget.h b/GUI/View/Common/DataAccessWidget.h index 2ffb8e23f06..c5863cffa9c 100644 --- a/GUI/View/Common/DataAccessWidget.h +++ b/GUI/View/Common/DataAccessWidget.h @@ -34,6 +34,8 @@ public: virtual void setJobOrRealItem(JobRealBase* item); + void setFourierItem(IntensityDataItem* fftItem); + virtual QList<QAction*> actionList(); JobItem* jobItem() const; @@ -131,6 +133,7 @@ private: QList<T*> otherMainDataItems() const; JobRealBase* m_item; + IntensityDataItem* m_fftItem; }; template <class T> -- GitLab From 976287aa7e4de8a254167add403635c9355e3d98 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Wed, 20 Jul 2022 17:43:33 +0200 Subject: [PATCH 02/32] IntensityDataWidget: fft update --- GUI/View/Common/DataAccessWidget.cpp | 2 ++ GUI/View/Common/DataAccessWidget.h | 2 +- GUI/View/Plot2D/IntensityDataCanvas.cpp | 19 +++++-------------- GUI/View/Plot2D/IntensityDataCanvas.h | 3 +-- .../Plot2D/IntensityDataPropertyWidget.cpp | 10 ++++++++-- GUI/View/Plot2D/IntensityDataPropertyWidget.h | 3 ++- GUI/View/Plot2D/IntensityDataWidget.cpp | 14 +++++++++----- 7 files changed, 28 insertions(+), 25 deletions(-) diff --git a/GUI/View/Common/DataAccessWidget.cpp b/GUI/View/Common/DataAccessWidget.cpp index 1117b762229..0bfcd596195 100644 --- a/GUI/View/Common/DataAccessWidget.cpp +++ b/GUI/View/Common/DataAccessWidget.cpp @@ -18,6 +18,8 @@ DataAccessWidget::DataAccessWidget(QWidget* parent) : QWidget(parent) + , m_item(nullptr) + , m_fftItem(nullptr) { } DataAccessWidget::~DataAccessWidget() = default; diff --git a/GUI/View/Common/DataAccessWidget.h b/GUI/View/Common/DataAccessWidget.h index c5863cffa9c..bd4530f0636 100644 --- a/GUI/View/Common/DataAccessWidget.h +++ b/GUI/View/Common/DataAccessWidget.h @@ -34,7 +34,7 @@ public: virtual void setJobOrRealItem(JobRealBase* item); - void setFourierItem(IntensityDataItem* fftItem); + virtual void setFourierItem(IntensityDataItem* fftItem); virtual QList<QAction*> actionList(); diff --git a/GUI/View/Plot2D/IntensityDataCanvas.cpp b/GUI/View/Plot2D/IntensityDataCanvas.cpp index ca069a6110c..509b0ba1637 100644 --- a/GUI/View/Plot2D/IntensityDataCanvas.cpp +++ b/GUI/View/Plot2D/IntensityDataCanvas.cpp @@ -38,7 +38,6 @@ IntensityDataCanvas::IntensityDataCanvas(QWidget* parent) , m_resetViewAction(nullptr) , m_rotateDataAction(nullptr) , m_savePlotAction(nullptr) - , m_fftItem(nullptr) { setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); @@ -65,15 +64,10 @@ void IntensityDataCanvas::setJobOrRealItem(JobRealBase* job_or_real_Item) initRotation(); } -void IntensityDataCanvas::setFourierIntensity(IntensityDataItem* fftItem) +void IntensityDataCanvas::setFourierItem(IntensityDataItem* fftItem) { - if(fftItem) { - m_fftItem = fftItem; - m_colorMapCanvas->setIntensityItem(m_fftItem); - } else { - m_fftItem = nullptr; - m_colorMapCanvas->setIntensityItem(currentIntensityDataItem()); - } + DataAccessWidget::setFourierItem(fftItem); + m_colorMapCanvas->setIntensityItem(currentIntensityDataItem()); } QSize IntensityDataCanvas::sizeHint() const @@ -96,11 +90,8 @@ QList<QAction*> IntensityDataCanvas::actionList() void IntensityDataCanvas::onResetViewAction() { - if(m_fftItem) - m_fftItem->resetView(); - else - for(auto item : allIntensityDataItems()) - item->resetView(); + for(auto item : allIntensityDataItems()) + item->resetView(); } void IntensityDataCanvas::onSavePlotAction() diff --git a/GUI/View/Plot2D/IntensityDataCanvas.h b/GUI/View/Plot2D/IntensityDataCanvas.h index e5574491690..3d2b95a77c5 100644 --- a/GUI/View/Plot2D/IntensityDataCanvas.h +++ b/GUI/View/Plot2D/IntensityDataCanvas.h @@ -30,7 +30,7 @@ public: explicit IntensityDataCanvas(QWidget* parent = nullptr); void setJobOrRealItem(JobRealBase* job_or_real_Item) override; - void setFourierIntensity(IntensityDataItem* fftItem); + void setFourierItem(IntensityDataItem* fftItem) override; QSize sizeHint() const override; QSize minimumSizeHint() const override; @@ -50,7 +50,6 @@ private: QAction* m_resetViewAction; QAction* m_rotateDataAction; QAction* m_savePlotAction; - IntensityDataItem* m_fftItem; }; #endif // BORNAGAIN_GUI_VIEW_PLOT2D_INTENSITYDATACANVAS_H diff --git a/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp b/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp index abc0a21b57c..9af8baece5e 100644 --- a/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp +++ b/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp @@ -44,10 +44,16 @@ IntensityDataPropertyWidget::IntensityDataPropertyWidget(QWidget* parent) void IntensityDataPropertyWidget::setJobOrRealItem(JobRealBase* job_or_real_Item) { DataAccessWidget::setJobOrRealItem(job_or_real_Item); - setIntensityItems(allIntensityDataItems()); + createPanelElements(allIntensityDataItems()); } -void IntensityDataPropertyWidget::setIntensityItems(const QList<IntensityDataItem*>& items) +void IntensityDataPropertyWidget::setFourierItem(IntensityDataItem* fftItem) +{ + DataAccessWidget::setFourierItem(fftItem); + createPanelElements(allIntensityDataItems()); +} + +void IntensityDataPropertyWidget::createPanelElements(const QList<IntensityDataItem*>& items) { if (items.size() == 0) return; diff --git a/GUI/View/Plot2D/IntensityDataPropertyWidget.h b/GUI/View/Plot2D/IntensityDataPropertyWidget.h index 68bde3a44e2..2a2d35358d8 100644 --- a/GUI/View/Plot2D/IntensityDataPropertyWidget.h +++ b/GUI/View/Plot2D/IntensityDataPropertyWidget.h @@ -29,7 +29,8 @@ public: explicit IntensityDataPropertyWidget(QWidget* parent = nullptr); void setJobOrRealItem(JobRealBase* job_or_real_Item) override; - void setIntensityItems(const QList<IntensityDataItem*>& items); + void setFourierItem(IntensityDataItem* fftItem) override; + void createPanelElements(const QList<IntensityDataItem*>& items); private: void updateUIValues(); diff --git a/GUI/View/Plot2D/IntensityDataWidget.cpp b/GUI/View/Plot2D/IntensityDataWidget.cpp index 890d18ded56..44c441befaa 100644 --- a/GUI/View/Plot2D/IntensityDataWidget.cpp +++ b/GUI/View/Plot2D/IntensityDataWidget.cpp @@ -51,10 +51,14 @@ IntensityDataWidget::IntensityDataWidget(QWidget* parent) void IntensityDataWidget::setJobOrRealItem(JobRealBase* job_or_real_item) { + JobItem* oldJob = jobItem(); DataAccessWidget::setJobOrRealItem(job_or_real_item); m_intensityCanvas->setJobOrRealItem(job_or_real_item); m_propertyWidget->setJobOrRealItem(job_or_real_item); - m_fftPresenter->reset(); + + if(oldJob != jobItem()) + m_fftPresenter->reset(); + onFFTAction(); } QList<QAction*> IntensityDataWidget::actionList() @@ -78,11 +82,11 @@ void IntensityDataWidget::onFFTAction() if (m_fftPresenter->inFFTMode()) { auto* fftItem = m_fftPresenter->fftItem(currentIntensityDataItem()); - m_intensityCanvas->setFourierIntensity(fftItem); - m_propertyWidget->setIntensityItems({fftItem}); + m_intensityCanvas->setFourierItem(fftItem); + m_propertyWidget->setFourierItem(fftItem); } else { // returning ColorMap to non-fft presentation - m_intensityCanvas->setFourierIntensity(nullptr); - m_propertyWidget->setIntensityItems(allIntensityDataItems()); + m_intensityCanvas->setFourierItem(nullptr); + m_propertyWidget->setFourierItem(nullptr); } } -- GitLab From d33c9fd2799392c30c3665eaae1ae81eabc1c780 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Wed, 20 Jul 2022 18:03:42 +0200 Subject: [PATCH 03/32] IntensityDataPropertyWidget: use built-in list views --- .../Plot2D/IntensityDataPropertyWidget.cpp | 85 +++++++++---------- GUI/View/Plot2D/IntensityDataPropertyWidget.h | 5 +- .../PlotSpecular/SpecularDataPropertyWidget.h | 2 +- 3 files changed, 43 insertions(+), 49 deletions(-) diff --git a/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp b/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp index 9af8baece5e..5cb6faa935c 100644 --- a/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp +++ b/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp @@ -44,51 +44,44 @@ IntensityDataPropertyWidget::IntensityDataPropertyWidget(QWidget* parent) void IntensityDataPropertyWidget::setJobOrRealItem(JobRealBase* job_or_real_Item) { DataAccessWidget::setJobOrRealItem(job_or_real_Item); - createPanelElements(allIntensityDataItems()); + createPanelElements(); } void IntensityDataPropertyWidget::setFourierItem(IntensityDataItem* fftItem) { + ASSERT(jobRealBase()); DataAccessWidget::setFourierItem(fftItem); - createPanelElements(allIntensityDataItems()); + createPanelElements(); } -void IntensityDataPropertyWidget::createPanelElements(const QList<IntensityDataItem*>& items) +void IntensityDataPropertyWidget::unsubscribe() { - if (items.size() == 0) - return; + for(auto item : allIntensityDataItems()) + disconnect(item, nullptr, this, nullptr); +} - IntensityDataItem* firstItem = items.first(); - if(!firstItem) +void IntensityDataPropertyWidget::createPanelElements() +{ + if (allIntensityDataItems().size() == 0) return; - QList<IntensityDataItem*> otherItems = items; - otherItems.removeFirst(); - - QList<IntensityDataItem*> otherMainItems = items; - otherMainItems.removeFirst(); - if(otherMainItems.size() > 0) - otherMainItems.removeLast(); - - for(auto item : items) - disconnect(item, nullptr, this, nullptr); - + unsubscribe(); GUI::Util::Layout::clearLayout(m_mainLayout); m_updaters.clear(); m_mainLayout->addRow("Axes units:", GUI::Util::createComboBoxUpdScroll( - firstItem->axesUnits(), &m_updaters, [=](int newIndex) { - for(auto item : otherItems) + currentIntensityDataItem()->axesUnits(), &m_updaters, [=](int newIndex) { + for(auto item : otherAllIntensityDataItems()) item->axesUnits().setCurrentIndex(newIndex); })); m_mainLayout->addRow("Color scheme:", GUI::Util::createComboBoxUpdScroll( - firstItem->gradient(), &m_updaters, [=](int newIndex) { - for(auto item : otherItems) + currentIntensityDataItem()->gradient(), &m_updaters, [=](int newIndex) { + for(auto item : otherAllIntensityDataItems()) item->gradient().setCurrentIndex(newIndex); })); m_mainLayout->addRow(GUI::Util::createCheckBox("Interpolate", - [=]() { return firstItem->isInterpolated(); }, [=](bool b) { - for(auto item : items) + [=]() { return currentIntensityDataItem()->isInterpolated(); }, [=](bool b) { + for(auto item : allIntensityDataItems()) item->setInterpolated(b); }, &m_updaters)); // -- x-axis @@ -98,18 +91,18 @@ void IntensityDataPropertyWidget::createPanelElements(const QList<IntensityDataI xFormLayout->setSpacing(5); xFormLayout->addRow("Min:", GUI::Util::createDoubleSpinboxScroll( - firstItem->xAxisItem()->min(), &m_updaters, [=](double newValue) { - for(auto item : otherItems) + currentIntensityDataItem()->xAxisItem()->min(), &m_updaters, [=](double newValue) { + for(auto item : otherAllIntensityDataItems()) item->xAxisItem()->min().set(newValue); })); xFormLayout->addRow("Max:", GUI::Util::createDoubleSpinboxScroll( - firstItem->xAxisItem()->max(), &m_updaters, [=](double newValue) { - for(auto item : otherItems) + currentIntensityDataItem()->xAxisItem()->max(), &m_updaters, [=](double newValue) { + for(auto item : otherAllIntensityDataItems()) item->xAxisItem()->max().set(newValue); })); xFormLayout->addRow("Title:", GUI::Util::createTextEdit( - [=]() { return firstItem->xAxisItem()->title(); }, [=](QString newText) { - for(auto item : items) + [=]() { return currentIntensityDataItem()->xAxisItem()->title(); }, [=](QString newText) { + for(auto item : allIntensityDataItems()) item->xAxisItem()->setTitle(newText); }, &m_updaters)); m_mainLayout->addRow(xGroup); @@ -121,18 +114,18 @@ void IntensityDataPropertyWidget::createPanelElements(const QList<IntensityDataI yFormLayout->setSpacing(5); yFormLayout->addRow("Min:", GUI::Util::createDoubleSpinboxScroll( - firstItem->yAxisItem()->min(), &m_updaters, [=](double newValue) { - for(auto item : otherItems) + currentIntensityDataItem()->yAxisItem()->min(), &m_updaters, [=](double newValue) { + for(auto item : otherAllIntensityDataItems()) item->yAxisItem()->min().set(newValue); })); yFormLayout->addRow("Max:", GUI::Util::createDoubleSpinboxScroll( - firstItem->yAxisItem()->max(), &m_updaters, [=](double newValue) { - for(auto item : otherItems) + currentIntensityDataItem()->yAxisItem()->max(), &m_updaters, [=](double newValue) { + for(auto item : otherAllIntensityDataItems()) item->yAxisItem()->max().set(newValue); })); yFormLayout->addRow("Title:", GUI::Util::createTextEdit( - [=]() { return firstItem->yAxisItem()->title(); }, [=](QString newText) { - for(auto item : items) + [=]() { return currentIntensityDataItem()->yAxisItem()->title(); }, [=](QString newText) { + for(auto item : allIntensityDataItems()) item->yAxisItem()->setTitle(newText); }, &m_updaters)); m_mainLayout->addRow(yGroup); @@ -144,23 +137,23 @@ void IntensityDataPropertyWidget::createPanelElements(const QList<IntensityDataI zFormLayout->setSpacing(5); zFormLayout->addRow("Min:", GUI::Util::createDoubleSpinboxScroll( - firstItem->zAxisItem()->min(), &m_updaters, [=](double newValue) { - for(auto item : otherMainItems) + currentIntensityDataItem()->zAxisItem()->min(), &m_updaters, [=](double newValue) { + for(auto item : otherMainIntensityDataItems()) item->zAxisItem()->min().set(newValue); })); zFormLayout->addRow("Max:", GUI::Util::createDoubleSpinboxScroll( - firstItem->zAxisItem()->max(), &m_updaters, [=](double newValue) { - for(auto item : otherMainItems) + currentIntensityDataItem()->zAxisItem()->max(), &m_updaters, [=](double newValue) { + for(auto item : otherMainIntensityDataItems()) item->zAxisItem()->max().set(newValue); })); zFormLayout->addRow(GUI::Util::createCheckBox("log10", - [=]() { return firstItem->zAxisItem()->isLogScale(); }, [=](bool b) { - for(auto item : items) + [=]() { return currentIntensityDataItem()->zAxisItem()->isLogScale(); }, [=](bool b) { + for(auto item : allIntensityDataItems()) item->zAxisItem()->setLogScale(b); }, &m_updaters)); zFormLayout->addRow(GUI::Util::createCheckBox("Visible", - [=]() { return firstItem->zAxisItem()->isVisible(); }, [=](bool b) { - for(auto item : items) + [=]() { return currentIntensityDataItem()->zAxisItem()->isVisible(); }, [=](bool b) { + for(auto item : allIntensityDataItems()) item->zAxisItem()->setVisibilityValue(b); }, &m_updaters)); m_mainLayout->addRow(zGroup); @@ -168,11 +161,11 @@ void IntensityDataPropertyWidget::createPanelElements(const QList<IntensityDataI updateUIValues(); // react on external changes (e.g. zooming in customplot shall update the axis values) - connect(firstItem, &DataItem::itemAxesRangeChanged, this, + connect(currentIntensityDataItem(), &DataItem::itemAxesRangeChanged, this, &IntensityDataPropertyWidget::updateUIValues, Qt::UniqueConnection); // update coordinates on axes units change - for(auto item : items) + for(auto item : allIntensityDataItems()) connect(item, &DataItem::axesUnitsChanged, this, &IntensityDataPropertyWidget::updateItemCoords, Qt::UniqueConnection); } diff --git a/GUI/View/Plot2D/IntensityDataPropertyWidget.h b/GUI/View/Plot2D/IntensityDataPropertyWidget.h index 2a2d35358d8..9cf7e581f24 100644 --- a/GUI/View/Plot2D/IntensityDataPropertyWidget.h +++ b/GUI/View/Plot2D/IntensityDataPropertyWidget.h @@ -30,11 +30,12 @@ public: void setJobOrRealItem(JobRealBase* job_or_real_Item) override; void setFourierItem(IntensityDataItem* fftItem) override; - void createPanelElements(const QList<IntensityDataItem*>& items); private: - void updateUIValues(); + void unsubscribe(); + void createPanelElements(); void updateItemCoords(DataItem* item); + void updateUIValues(); QWidget* parent; QVector<IntensityDataItem*> m_items; diff --git a/GUI/View/PlotSpecular/SpecularDataPropertyWidget.h b/GUI/View/PlotSpecular/SpecularDataPropertyWidget.h index e8e17c7d539..a74945452c6 100644 --- a/GUI/View/PlotSpecular/SpecularDataPropertyWidget.h +++ b/GUI/View/PlotSpecular/SpecularDataPropertyWidget.h @@ -34,10 +34,10 @@ public: void setJobOrRealItem(JobRealBase* job_or_real_Item) override; private: - void updateUIValues(); void unsubscribe(); void createPanelElements(); void updateItemCoords(DataItem* item); + void updateUIValues(); private: QFormLayout* m_mainLayout; -- GitLab From 9ff086ce71060c3451eb9af4c23f5a80ffe4d8a5 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Wed, 20 Jul 2022 18:35:22 +0200 Subject: [PATCH 04/32] DataPropertyWidget: class added --- .../Plot2D/IntensityDataPropertyWidget.cpp | 3 +- GUI/View/Plot2D/IntensityDataPropertyWidget.h | 8 ++-- GUI/View/Plot2D/IntensityDataWidget.cpp | 2 +- .../PlotSpecular/SpecularDataPropertyWidget.h | 6 +-- GUI/View/PlotUtil/DataPropertyWidget.cpp | 47 +++++++++++++++++++ GUI/View/PlotUtil/DataPropertyWidget.h | 40 ++++++++++++++++ 6 files changed, 95 insertions(+), 11 deletions(-) create mode 100644 GUI/View/PlotUtil/DataPropertyWidget.cpp create mode 100644 GUI/View/PlotUtil/DataPropertyWidget.h diff --git a/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp b/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp index 5cb6faa935c..cc798fb580e 100644 --- a/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp +++ b/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp @@ -30,14 +30,13 @@ IntensityDataPropertyWidget::IntensityDataPropertyWidget(QWidget* parent) : DataAccessWidget(parent) - , parent(parent) { setWindowTitle("Properties"); setAttribute(Qt::WA_StyledBackground, true); setProperty("stylable", true); // for stylesheet addressing m_mainLayout = new QFormLayout(this); - m_mainLayout->setContentsMargins(8, 8, 8, 8); + m_mainLayout->setContentsMargins(8, 20, 8, 8); m_mainLayout->setSpacing(5); } diff --git a/GUI/View/Plot2D/IntensityDataPropertyWidget.h b/GUI/View/Plot2D/IntensityDataPropertyWidget.h index 9cf7e581f24..7c8ae95b3e4 100644 --- a/GUI/View/Plot2D/IntensityDataPropertyWidget.h +++ b/GUI/View/Plot2D/IntensityDataPropertyWidget.h @@ -12,8 +12,8 @@ // // ************************************************************************************************ -#ifndef BORNAGAIN_GUI_VIEW_PLOTUTIL_INTENSITYDATAPROPERTYWIDGET_H -#define BORNAGAIN_GUI_VIEW_PLOTUTIL_INTENSITYDATAPROPERTYWIDGET_H +#ifndef BORNAGAIN_GUI_VIEW_PLOT2D_INTENSITYDATAPROPERTYWIDGET_H +#define BORNAGAIN_GUI_VIEW_PLOT2D_INTENSITYDATAPROPERTYWIDGET_H #include "GUI/View/Common/DataAccessWidget.h" @@ -37,10 +37,8 @@ private: void updateItemCoords(DataItem* item); void updateUIValues(); - QWidget* parent; - QVector<IntensityDataItem*> m_items; QFormLayout* m_mainLayout; QList<function<void()>> m_updaters; }; -#endif // BORNAGAIN_GUI_VIEW_PLOTUTIL_INTENSITYDATAPROPERTYWIDGET_H +#endif // BORNAGAIN_GUI_VIEW_PLOT2D_INTENSITYDATAPROPERTYWIDGET_H diff --git a/GUI/View/Plot2D/IntensityDataWidget.cpp b/GUI/View/Plot2D/IntensityDataWidget.cpp index 44c441befaa..3117cbaffff 100644 --- a/GUI/View/Plot2D/IntensityDataWidget.cpp +++ b/GUI/View/Plot2D/IntensityDataWidget.cpp @@ -23,7 +23,7 @@ IntensityDataWidget::IntensityDataWidget(QWidget* parent) : DataAccessWidget(parent) - , m_intensityCanvas(new IntensityDataCanvas) + , m_intensityCanvas(new IntensityDataCanvas(this)) , m_propertyWidget(new IntensityDataPropertyWidget(this)) , m_fftPresenter(new IntensityDataFFTPresenter(this)) { diff --git a/GUI/View/PlotSpecular/SpecularDataPropertyWidget.h b/GUI/View/PlotSpecular/SpecularDataPropertyWidget.h index a74945452c6..5780790f995 100644 --- a/GUI/View/PlotSpecular/SpecularDataPropertyWidget.h +++ b/GUI/View/PlotSpecular/SpecularDataPropertyWidget.h @@ -12,8 +12,8 @@ // // ************************************************************************************************ -#ifndef BORNAGAIN_GUI_VIEW_PROPERTYEDITOR_SPECULARDATAPROPERTYWIDGET_H -#define BORNAGAIN_GUI_VIEW_PROPERTYEDITOR_SPECULARDATAPROPERTYWIDGET_H +#ifndef BORNAGAIN_GUI_VIEW_PLOTSPECULAR_SPECULARDATAPROPERTYWIDGET_H +#define BORNAGAIN_GUI_VIEW_PLOTSPECULAR_SPECULARDATAPROPERTYWIDGET_H #include "GUI/View/Common/DataAccessWidget.h" #include <functional> @@ -44,4 +44,4 @@ private: QList<function<void()>> m_updaters; }; -#endif // BORNAGAIN_GUI_VIEW_PROPERTYEDITOR_SPECULARDATAPROPERTYWIDGET_H +#endif // BORNAGAIN_GUI_VIEW_PLOTSPECULAR_SPECULARDATAPROPERTYWIDGET_H diff --git a/GUI/View/PlotUtil/DataPropertyWidget.cpp b/GUI/View/PlotUtil/DataPropertyWidget.cpp new file mode 100644 index 00000000000..2d463334616 --- /dev/null +++ b/GUI/View/PlotUtil/DataPropertyWidget.cpp @@ -0,0 +1,47 @@ +#include "GUI/View/PlotUtil/DataPropertyWidget.h" +#include "GUI/Model/Data/DataItem.h" +#include <QFormLayout> + +DataPropertyWidget::DataPropertyWidget(QWidget* parent) + : DataAccessWidget(parent) +{ + setWindowTitle("Properties"); + setAttribute(Qt::WA_StyledBackground, true); + setProperty("stylable", true); // for stylesheet addressing + + m_mainLayout = new QFormLayout(this); + m_mainLayout->setContentsMargins(8, 20, 8, 8); + m_mainLayout->setSpacing(5); +} + +void DataPropertyWidget::setJobOrRealItem(JobRealBase* job_or_real_Item) +{ + DataAccessWidget::setJobOrRealItem(job_or_real_Item); + createPanelElements(); +} + +void DataPropertyWidget::updateItemCoords(DataItem* item) +{ + // TODO change units for real item with linked instrument + if (!item || !jobItem()) + return; + +// InstrumentItem* instrument; +// if(jobItem()) +// instrument = jobItem()->instrumentItem(); +// else if(realItem()) +// instrument = gSessionData->instrumentLibrary.collectedItems() +// ->findInstrumentById(realItem()->instrumentId()); +// if(instrument) { + item->blockSignals(true); + item->updateCoords(jobItem()->instrumentItem()); + item->blockSignals(false); + emit item->axesUnitsReplotRequested(); +// } +} + +void DataPropertyWidget::updateUIValues() +{ + for (const auto& updater : m_updaters) + updater(); +} diff --git a/GUI/View/PlotUtil/DataPropertyWidget.h b/GUI/View/PlotUtil/DataPropertyWidget.h new file mode 100644 index 00000000000..0cc52865416 --- /dev/null +++ b/GUI/View/PlotUtil/DataPropertyWidget.h @@ -0,0 +1,40 @@ +// ************************************************************************************************ +// +// BornAgain: simulate and fit reflection and scattering +// +//! @file GUI/View/PlotUtil/IntensityDataPropertyWidget.h +//! @brief Defines class IntensityDataPropertyWidget +//! +//! @homepage http://www.bornagainproject.org +//! @license GNU General Public License v3 or higher (see COPYING) +//! @copyright Forschungszentrum Jülich GmbH 2022 +//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS) +// +// ************************************************************************************************ + +#ifndef BORNAGAIN_GUI_VIEW_PLOTUTIL_DATAPROPERTYWIDGET_H +#define BORNAGAIN_GUI_VIEW_PLOTUTIL_DATAPROPERTYWIDGET_H + +#include "GUI/View/Common/DataAccessWidget.h" + +class QFormLayout; + +using std::function; + +class DataPropertyWidget : public DataAccessWidget { + Q_OBJECT +public: + explicit DataPropertyWidget(QWidget* parent = nullptr); + + void setJobOrRealItem(JobRealBase* job_or_real_Item) override; + +protected: + void updateItemCoords(DataItem* item); + void updateUIValues(); + virtual void createPanelElements() = 0; + + QFormLayout* m_mainLayout; + QList<function<void()>> m_updaters; +}; + +#endif // BORNAGAIN_GUI_VIEW_PLOTUTIL_DATAPROPERTYWIDGET_H -- GitLab From e5c9810e87ffd6c5e11226c27851b8f2714230fa Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Wed, 20 Jul 2022 18:44:47 +0200 Subject: [PATCH 05/32] IntensityDataPropertyWidget: inherits DataPropertyWidget --- .../Plot2D/IntensityDataPropertyWidget.cpp | 45 +------------------ GUI/View/Plot2D/IntensityDataPropertyWidget.h | 16 ++----- GUI/View/PlotUtil/DataPropertyWidget.cpp | 14 ++++++ GUI/View/PlotUtil/DataPropertyWidget.h | 6 ++- 4 files changed, 22 insertions(+), 59 deletions(-) diff --git a/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp b/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp index cc798fb580e..7e65f630af2 100644 --- a/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp +++ b/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp @@ -15,35 +15,18 @@ #include "GUI/View/Plot2D/IntensityDataPropertyWidget.h" #include "GUI/Model/Data/IntensityDataItem.h" #include "GUI/Model/Device/AxesItems.h" -#include "GUI/Model/Job/JobItem.h" #include "GUI/Util/ComboProperty.h" #include "GUI/View/Common/DoubleSpinBox.h" -#include "GUI/View/Common/SessionItemWidget.h" #include "GUI/View/Tool/LayoutUtils.h" #include "GUI/View/Tool/WidgetUtils.h" -#include <QAction> #include <QCheckBox> -#include <QComboBox> #include <QFormLayout> #include <QGroupBox> #include <QLineEdit> IntensityDataPropertyWidget::IntensityDataPropertyWidget(QWidget* parent) - : DataAccessWidget(parent) + : DataPropertyWidget(parent) { - setWindowTitle("Properties"); - setAttribute(Qt::WA_StyledBackground, true); - setProperty("stylable", true); // for stylesheet addressing - - m_mainLayout = new QFormLayout(this); - m_mainLayout->setContentsMargins(8, 20, 8, 8); - m_mainLayout->setSpacing(5); -} - -void IntensityDataPropertyWidget::setJobOrRealItem(JobRealBase* job_or_real_Item) -{ - DataAccessWidget::setJobOrRealItem(job_or_real_Item); - createPanelElements(); } void IntensityDataPropertyWidget::setFourierItem(IntensityDataItem* fftItem) @@ -168,29 +151,3 @@ void IntensityDataPropertyWidget::createPanelElements() connect(item, &DataItem::axesUnitsChanged, this, &IntensityDataPropertyWidget::updateItemCoords, Qt::UniqueConnection); } - -void IntensityDataPropertyWidget::updateItemCoords(DataItem* item) -{ - // TODO change units for real item with linked instrument - if (!item || !jobItem()) - return; - -// InstrumentItem* instrument; -// if(jobItem()) -// instrument = jobItem()->instrumentItem(); -// else if(realItem()) -// instrument = gSessionData->instrumentLibrary.collectedItems() -// ->findInstrumentById(realItem()->instrumentId()); -// if(instrument) { - item->blockSignals(true); - item->updateCoords(jobItem()->instrumentItem()); - item->blockSignals(false); - emit item->axesUnitsReplotRequested(); -// } -} - -void IntensityDataPropertyWidget::updateUIValues() -{ - for (const auto& updater : m_updaters) - updater(); -} diff --git a/GUI/View/Plot2D/IntensityDataPropertyWidget.h b/GUI/View/Plot2D/IntensityDataPropertyWidget.h index 7c8ae95b3e4..a1ea8618d14 100644 --- a/GUI/View/Plot2D/IntensityDataPropertyWidget.h +++ b/GUI/View/Plot2D/IntensityDataPropertyWidget.h @@ -15,30 +15,20 @@ #ifndef BORNAGAIN_GUI_VIEW_PLOT2D_INTENSITYDATAPROPERTYWIDGET_H #define BORNAGAIN_GUI_VIEW_PLOT2D_INTENSITYDATAPROPERTYWIDGET_H -#include "GUI/View/Common/DataAccessWidget.h" - -class QFormLayout; - -using std::function; +#include "GUI/View/PlotUtil/DataPropertyWidget.h" //! Widget to edit properties of an IntensityDataItem. -class IntensityDataPropertyWidget : public DataAccessWidget { +class IntensityDataPropertyWidget : public DataPropertyWidget { Q_OBJECT public: explicit IntensityDataPropertyWidget(QWidget* parent = nullptr); - void setJobOrRealItem(JobRealBase* job_or_real_Item) override; void setFourierItem(IntensityDataItem* fftItem) override; private: void unsubscribe(); - void createPanelElements(); - void updateItemCoords(DataItem* item); - void updateUIValues(); - - QFormLayout* m_mainLayout; - QList<function<void()>> m_updaters; + void createPanelElements() override; }; #endif // BORNAGAIN_GUI_VIEW_PLOT2D_INTENSITYDATAPROPERTYWIDGET_H diff --git a/GUI/View/PlotUtil/DataPropertyWidget.cpp b/GUI/View/PlotUtil/DataPropertyWidget.cpp index 2d463334616..1794d02677e 100644 --- a/GUI/View/PlotUtil/DataPropertyWidget.cpp +++ b/GUI/View/PlotUtil/DataPropertyWidget.cpp @@ -1,3 +1,17 @@ +// ************************************************************************************************ +// +// BornAgain: simulate and fit reflection and scattering +// +//! @file GUI/View/PlotUtil/DataPropertyWidget.h +//! @brief Defines class DataPropertyWidget +//! +//! @homepage http://www.bornagainproject.org +//! @license GNU General Public License v3 or higher (see COPYING) +//! @copyright Forschungszentrum Jülich GmbH 2022 +//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS) +// +// ************************************************************************************************ + #include "GUI/View/PlotUtil/DataPropertyWidget.h" #include "GUI/Model/Data/DataItem.h" #include <QFormLayout> diff --git a/GUI/View/PlotUtil/DataPropertyWidget.h b/GUI/View/PlotUtil/DataPropertyWidget.h index 0cc52865416..6816fb2542b 100644 --- a/GUI/View/PlotUtil/DataPropertyWidget.h +++ b/GUI/View/PlotUtil/DataPropertyWidget.h @@ -2,8 +2,8 @@ // // BornAgain: simulate and fit reflection and scattering // -//! @file GUI/View/PlotUtil/IntensityDataPropertyWidget.h -//! @brief Defines class IntensityDataPropertyWidget +//! @file GUI/View/PlotUtil/DataPropertyWidget.h +//! @brief Defines class DataPropertyWidget //! //! @homepage http://www.bornagainproject.org //! @license GNU General Public License v3 or higher (see COPYING) @@ -21,6 +21,8 @@ class QFormLayout; using std::function; +//! Base class for IntensityDataPropertyWidget and SpecularDataPropertyWidget. + class DataPropertyWidget : public DataAccessWidget { Q_OBJECT public: -- GitLab From c0172920704ab925a13281a53f59329e86026168 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Wed, 20 Jul 2022 18:51:47 +0200 Subject: [PATCH 06/32] SpecularDataPropertyWidget: inherits DataPropertyWidget --- .../Plot2D/IntensityDataPropertyWidget.cpp | 2 +- GUI/View/Plot2D/IntensityDataPropertyWidget.h | 2 +- .../SpecularDataPropertyWidget.cpp | 46 +------------------ .../PlotSpecular/SpecularDataPropertyWidget.h | 23 ++-------- 4 files changed, 8 insertions(+), 65 deletions(-) diff --git a/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp b/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp index 7e65f630af2..3b9ba00b31d 100644 --- a/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp +++ b/GUI/View/Plot2D/IntensityDataPropertyWidget.cpp @@ -2,7 +2,7 @@ // // BornAgain: simulate and fit reflection and scattering // -//! @file GUI/View/PlotUtil/IntensityDataPropertyWidget.cpp +//! @file GUI/View/Plot2D/IntensityDataPropertyWidget.cpp //! @brief Implements class IntensityDataPropertyWidget //! //! @homepage http://www.bornagainproject.org diff --git a/GUI/View/Plot2D/IntensityDataPropertyWidget.h b/GUI/View/Plot2D/IntensityDataPropertyWidget.h index a1ea8618d14..1e1ebd74f24 100644 --- a/GUI/View/Plot2D/IntensityDataPropertyWidget.h +++ b/GUI/View/Plot2D/IntensityDataPropertyWidget.h @@ -2,7 +2,7 @@ // // BornAgain: simulate and fit reflection and scattering // -//! @file GUI/View/PlotUtil/IntensityDataPropertyWidget.h +//! @file GUI/View/Plot2D/IntensityDataPropertyWidget.h //! @brief Defines class IntensityDataPropertyWidget //! //! @homepage http://www.bornagainproject.org diff --git a/GUI/View/PlotSpecular/SpecularDataPropertyWidget.cpp b/GUI/View/PlotSpecular/SpecularDataPropertyWidget.cpp index e0d718ac196..ef7e3634d27 100644 --- a/GUI/View/PlotSpecular/SpecularDataPropertyWidget.cpp +++ b/GUI/View/PlotSpecular/SpecularDataPropertyWidget.cpp @@ -2,7 +2,7 @@ // // BornAgain: simulate and fit reflection and scattering // -//! @file GUI/View/PropertyEditor/SpecularDataPropertyWidget.cpp +//! @file GUI/View/PlotSpecular/SpecularDataPropertyWidget.cpp //! @brief Implements class SpecularDataPropertyWidget //! //! @homepage http://www.bornagainproject.org @@ -14,34 +14,18 @@ #include "GUI/View/PlotSpecular/SpecularDataPropertyWidget.h" #include "GUI/Model/Data/SpecularDataItem.h" -#include "GUI/Model/Data/SessionData.h" #include "GUI/Util/ComboProperty.h" #include "GUI/View/Common/DoubleSpinBox.h" #include "GUI/View/Tool/LayoutUtils.h" #include "GUI/View/Tool/WidgetUtils.h" #include <QAction> #include <QCheckBox> -#include <QComboBox> #include <QFormLayout> -#include <QGroupBox> #include <QLineEdit> SpecularDataPropertyWidget::SpecularDataPropertyWidget(QWidget* parent) - : DataAccessWidget(parent) + : DataPropertyWidget(parent) { - setWindowTitle("Properties"); - setAttribute(Qt::WA_StyledBackground, true); - setProperty("stylable", true); // for stylesheet addressing - - m_mainLayout = new QFormLayout(this); - m_mainLayout->setContentsMargins(8, 20, 8, 8); - m_mainLayout->setSpacing(5); -} - -void SpecularDataPropertyWidget::setJobOrRealItem(JobRealBase* job_or_real_Item) -{ - DataAccessWidget::setJobOrRealItem(job_or_real_Item); - createPanelElements(); } void SpecularDataPropertyWidget::unsubscribe() @@ -126,29 +110,3 @@ void SpecularDataPropertyWidget::createPanelElements() connect(item, &DataItem::axesUnitsChanged, this, &SpecularDataPropertyWidget::updateItemCoords, Qt::UniqueConnection); } - -void SpecularDataPropertyWidget::updateItemCoords(DataItem* item) -{ - // TODO change units for real item with linked instrument - if (!item || !jobItem()) - return; - -// InstrumentItem* instrument; -// if(jobItem()) -// instrument = jobItem()->instrumentItem(); -// else if(realItem()) -// instrument = gSessionData->instrumentLibrary.collectedItems() -// ->findInstrumentById(realItem()->instrumentId()); -// if(instrument) { - item->blockSignals(true); - item->updateCoords(jobItem()->instrumentItem()); - item->blockSignals(false); - emit item->axesUnitsReplotRequested(); -// } -} - -void SpecularDataPropertyWidget::updateUIValues() -{ - for (const auto& updater : m_updaters) - updater(); -} diff --git a/GUI/View/PlotSpecular/SpecularDataPropertyWidget.h b/GUI/View/PlotSpecular/SpecularDataPropertyWidget.h index 5780790f995..24505a53ded 100644 --- a/GUI/View/PlotSpecular/SpecularDataPropertyWidget.h +++ b/GUI/View/PlotSpecular/SpecularDataPropertyWidget.h @@ -15,33 +15,18 @@ #ifndef BORNAGAIN_GUI_VIEW_PLOTSPECULAR_SPECULARDATAPROPERTYWIDGET_H #define BORNAGAIN_GUI_VIEW_PLOTSPECULAR_SPECULARDATAPROPERTYWIDGET_H -#include "GUI/View/Common/DataAccessWidget.h" -#include <functional> +#include "GUI/View/PlotUtil/DataPropertyWidget.h" -class SpecularDataItem; -class QFormLayout; -class DoubleDescriptor; +//! Widget to edit properties of a SpecularDataItem. -using std::function; - -//! Widget to edit properties of a SpecularDataItem or a Data1DViewItem. - -class SpecularDataPropertyWidget : public DataAccessWidget { +class SpecularDataPropertyWidget : public DataPropertyWidget { Q_OBJECT public: explicit SpecularDataPropertyWidget(QWidget* parent = nullptr); - void setJobOrRealItem(JobRealBase* job_or_real_Item) override; - private: void unsubscribe(); - void createPanelElements(); - void updateItemCoords(DataItem* item); - void updateUIValues(); - -private: - QFormLayout* m_mainLayout; - QList<function<void()>> m_updaters; + void createPanelElements() override; }; #endif // BORNAGAIN_GUI_VIEW_PLOTSPECULAR_SPECULARDATAPROPERTYWIDGET_H -- GitLab From 1d224e0740b617841978863908becda39c59bf0e Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Wed, 20 Jul 2022 18:55:03 +0200 Subject: [PATCH 07/32] DataPropertyWidget: issue created --- GUI/View/PlotUtil/DataPropertyWidget.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/GUI/View/PlotUtil/DataPropertyWidget.cpp b/GUI/View/PlotUtil/DataPropertyWidget.cpp index 1794d02677e..4b4153be63e 100644 --- a/GUI/View/PlotUtil/DataPropertyWidget.cpp +++ b/GUI/View/PlotUtil/DataPropertyWidget.cpp @@ -36,7 +36,9 @@ void DataPropertyWidget::setJobOrRealItem(JobRealBase* job_or_real_Item) void DataPropertyWidget::updateItemCoords(DataItem* item) { - // TODO change units for real item with linked instrument + // TODO : https://jugit.fz-juelich.de/mlz/bornagain/-/issues/320 + // Also change units for real item with linked instrument + if (!item || !jobItem()) return; -- GitLab From 9b461142913e13d5e52aa73ba4d9da338cae17a8 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Thu, 21 Jul 2022 10:22:43 +0200 Subject: [PATCH 08/32] RangeUtils: commonRage added --- GUI/View/PlotUtil/RangeUtils.cpp | 15 +++++++++++++++ GUI/View/PlotUtil/RangeUtils.h | 3 +++ 2 files changed, 18 insertions(+) diff --git a/GUI/View/PlotUtil/RangeUtils.cpp b/GUI/View/PlotUtil/RangeUtils.cpp index 0b01f8529ea..546c804baaf 100644 --- a/GUI/View/PlotUtil/RangeUtils.cpp +++ b/GUI/View/PlotUtil/RangeUtils.cpp @@ -14,6 +14,7 @@ #include "GUI/View/PlotUtil/RangeUtils.h" #include "GUI/Model/Data/IntensityDataItem.h" +#include "GUI/Model/Device/AxesItems.h" #include "GUI/Util/Error.h" #include "GUI/View/Tool/StyleUtils.h" @@ -141,3 +142,17 @@ void GUI::View::RangeUtils::setDefaultMargins(QCustomPlot* customPlot) axisRectangle->setAutoMargins(QCP::msTop | QCP::msBottom); axisRectangle->setMargins(defaultMargins(*customPlot)); } + +QCPRange GUI::View::RangeUtils::commonRange(const QList<BasicAxisItem*>& axes) +{ + double min = +std::numeric_limits<double>::max(); + double max = -std::numeric_limits<double>::max(); + + for(auto axis : axes) { + if(min<axis->min()) + min = axis->min(); + if(max>axis->max()) + max = axis->max(); + } + return QCPRange(min, max); +} diff --git a/GUI/View/PlotUtil/RangeUtils.h b/GUI/View/PlotUtil/RangeUtils.h index 0e574fad7b4..e051a2a4422 100644 --- a/GUI/View/PlotUtil/RangeUtils.h +++ b/GUI/View/PlotUtil/RangeUtils.h @@ -21,6 +21,7 @@ #include "qcustomplot.h" class IntensityDataItem; +class BasicAxisItem; class ColorMap; //! Provides few helper functions for ColorMapPlot. @@ -48,6 +49,8 @@ QCPRange itemDataRange(const IntensityDataItem* item); //! Returns z-axis visible range (zoom). QCPRange itemDataZoom(const IntensityDataItem* item); +QCPRange commonRange(const QList<BasicAxisItem*>& axes); + void setLogz(QCPColorScale* scale, bool isLogz); void setLogz(QCPAxis* axis, bool isLogz); -- GitLab From ffa8bb8545a8ea8f043c956a6ba0035f0282d5de Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Thu, 21 Jul 2022 11:57:56 +0200 Subject: [PATCH 09/32] RangeUtils: setCommonRange added --- GUI/View/PlotUtil/RangeUtils.cpp | 57 ++++++++++++++++++++++++++++---- GUI/View/PlotUtil/RangeUtils.h | 15 ++++++++- 2 files changed, 64 insertions(+), 8 deletions(-) diff --git a/GUI/View/PlotUtil/RangeUtils.cpp b/GUI/View/PlotUtil/RangeUtils.cpp index 546c804baaf..d9f24d29989 100644 --- a/GUI/View/PlotUtil/RangeUtils.cpp +++ b/GUI/View/PlotUtil/RangeUtils.cpp @@ -14,6 +14,7 @@ #include "GUI/View/PlotUtil/RangeUtils.h" #include "GUI/Model/Data/IntensityDataItem.h" +#include "GUI/Model/Data/SpecularDataItem.h" #include "GUI/Model/Device/AxesItems.h" #include "GUI/Util/Error.h" #include "GUI/View/Tool/StyleUtils.h" @@ -143,16 +144,58 @@ void GUI::View::RangeUtils::setDefaultMargins(QCustomPlot* customPlot) axisRectangle->setMargins(defaultMargins(*customPlot)); } -QCPRange GUI::View::RangeUtils::commonRange(const QList<BasicAxisItem*>& axes) +double GUI::View::RangeUtils::commonMin(const QList<AmplitudeAxisItem*>& axes) { double min = +std::numeric_limits<double>::max(); - double max = -std::numeric_limits<double>::max(); - - for(auto axis : axes) { - if(min<axis->min()) + for(auto axis : axes) + if(min>axis->min()) min = axis->min(); - if(max>axis->max()) + return min; +} + +double GUI::View::RangeUtils::commonMax(const QList<AmplitudeAxisItem*>& axes) +{ + double max = -std::numeric_limits<double>::max(); + for(auto axis : axes) + if(max<axis->max()) max = axis->max(); + return max; +} + +QCPRange GUI::View::RangeUtils::commonRange(const QList<AmplitudeAxisItem*>& axes) +{ + return QCPRange(commonMin(axes), commonMax(axes)); +} + +void GUI::View::RangeUtils::setCommonRange(QList<DataItem*> items) +{ + QCPRange range = commonRange(valueAxesFromItems(items)); + for(auto item : items) { + SpecularDataItem* specular = dynamic_cast<SpecularDataItem*>(item); + IntensityDataItem* intensity = dynamic_cast<IntensityDataItem*>(item); + if(specular) { + specular->setLowerY(range.lower); + specular->setUpperY(range.upper); + } else if(intensity) { + intensity->setLowerZ(range.lower); + intensity->setUpperZ(range.upper); + } else + ASSERT(0); + } +} + +QList<AmplitudeAxisItem*> GUI::View::RangeUtils::valueAxesFromItems(const QList<DataItem*>& items) +{ + QList<AmplitudeAxisItem*> axes; + for(auto item : items) { + SpecularDataItem* specular = dynamic_cast<SpecularDataItem*>(item); + IntensityDataItem* intensity = dynamic_cast<IntensityDataItem*>(item); + if(specular) + axes.append(specular->yAxisItem()); + else if(intensity) + axes.append(intensity->zAxisItem()); + else + ASSERT(0); } - return QCPRange(min, max); + return axes; } diff --git a/GUI/View/PlotUtil/RangeUtils.h b/GUI/View/PlotUtil/RangeUtils.h index e051a2a4422..d59f4393945 100644 --- a/GUI/View/PlotUtil/RangeUtils.h +++ b/GUI/View/PlotUtil/RangeUtils.h @@ -21,7 +21,9 @@ #include "qcustomplot.h" class IntensityDataItem; +class DataItem; class BasicAxisItem; +class AmplitudeAxisItem; class ColorMap; //! Provides few helper functions for ColorMapPlot. @@ -49,7 +51,18 @@ QCPRange itemDataRange(const IntensityDataItem* item); //! Returns z-axis visible range (zoom). QCPRange itemDataZoom(const IntensityDataItem* item); -QCPRange commonRange(const QList<BasicAxisItem*>& axes); +//! Returns common min for a list of axes (zoom). +double commonMin(const QList<AmplitudeAxisItem*>& axes); + +//! Returns common max for a list of axes (zoom). +double commonMax(const QList<AmplitudeAxisItem*>& axes); + +//! Returns common range for a list of axes (zoom). +QCPRange commonRange(const QList<AmplitudeAxisItem*>& axes); + +void setCommonRange(QList<DataItem*> items); + +QList<AmplitudeAxisItem*> valueAxesFromItems(const QList<DataItem*>& items); void setLogz(QCPColorScale* scale, bool isLogz); void setLogz(QCPAxis* axis, bool isLogz); -- GitLab From 6ed9f27e486c4732d1262ad7aa10003859ad803d Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Thu, 21 Jul 2022 12:09:37 +0200 Subject: [PATCH 10/32] RangeUtils: changed --- .../PlotComparison/FitComparisonWidget.cpp | 4 ++ GUI/View/PlotUtil/RangeUtils.cpp | 47 ++++++++++--------- GUI/View/PlotUtil/RangeUtils.h | 13 ++++- 3 files changed, 39 insertions(+), 25 deletions(-) diff --git a/GUI/View/PlotComparison/FitComparisonWidget.cpp b/GUI/View/PlotComparison/FitComparisonWidget.cpp index 432d818028b..2527fc13dd4 100644 --- a/GUI/View/PlotComparison/FitComparisonWidget.cpp +++ b/GUI/View/PlotComparison/FitComparisonWidget.cpp @@ -21,6 +21,7 @@ #include "GUI/View/Plot2D/IntensityDataPropertyWidget.h" #include "GUI/View/PlotComparison/FitFlowWidget.h" #include "GUI/View/PlotUtil/PlotStatusLabel.h" +#include "GUI/View/PlotUtil/RangeUtils.h" #include "GUI/Util/ActionFactory.h" #include "Device/Histo/DiffUtil.h" #include <QAction> @@ -113,6 +114,9 @@ void FitComparisonWidget::connectItems() connect(senderItem, &DataItem::updateOtherPlots, receiverItem, &DataItem::copyXYRangesFromItem, Qt::UniqueConnection); + // synchronize data range at start +// GUI::View::RangeUtils::setCommonRangeZ(mainIntensityDataItems()); + // sync Z range between sumulated and real // simu --> real connect(simuIntensityDataItem(), &DataItem::updateOtherPlots, realIntensityDataItem(), diff --git a/GUI/View/PlotUtil/RangeUtils.cpp b/GUI/View/PlotUtil/RangeUtils.cpp index d9f24d29989..e6ab00f1aeb 100644 --- a/GUI/View/PlotUtil/RangeUtils.cpp +++ b/GUI/View/PlotUtil/RangeUtils.cpp @@ -167,35 +167,36 @@ QCPRange GUI::View::RangeUtils::commonRange(const QList<AmplitudeAxisItem*>& axe return QCPRange(commonMin(axes), commonMax(axes)); } -void GUI::View::RangeUtils::setCommonRange(QList<DataItem*> items) +void GUI::View::RangeUtils::setCommonRangeY(QList<SpecularDataItem*> items) { - QCPRange range = commonRange(valueAxesFromItems(items)); + QCPRange range = commonRange(valueAxesFromSpecularItems(items)); for(auto item : items) { - SpecularDataItem* specular = dynamic_cast<SpecularDataItem*>(item); - IntensityDataItem* intensity = dynamic_cast<IntensityDataItem*>(item); - if(specular) { - specular->setLowerY(range.lower); - specular->setUpperY(range.upper); - } else if(intensity) { - intensity->setLowerZ(range.lower); - intensity->setUpperZ(range.upper); - } else - ASSERT(0); + item->setLowerY(range.lower); + item->setUpperY(range.upper); } } -QList<AmplitudeAxisItem*> GUI::View::RangeUtils::valueAxesFromItems(const QList<DataItem*>& items) +void GUI::View::RangeUtils::setCommonRangeZ(QList<IntensityDataItem*> items) { - QList<AmplitudeAxisItem*> axes; - for(auto item : items) { - SpecularDataItem* specular = dynamic_cast<SpecularDataItem*>(item); - IntensityDataItem* intensity = dynamic_cast<IntensityDataItem*>(item); - if(specular) - axes.append(specular->yAxisItem()); - else if(intensity) - axes.append(intensity->zAxisItem()); - else - ASSERT(0); + QCPRange range = commonRange(valueAxesFromIntensityItems(items)); + for(auto item : items) { + item->setLowerZ(range.lower); + item->setUpperZ(range.upper); } +} + +QList<AmplitudeAxisItem*> GUI::View::RangeUtils::valueAxesFromSpecularItems(const QList<SpecularDataItem*>& items) +{ + QList<AmplitudeAxisItem*> axes; + for(auto item : items) + axes.append(item->yAxisItem()); + return axes; +} + +QList<AmplitudeAxisItem*> GUI::View::RangeUtils::valueAxesFromIntensityItems(const QList<IntensityDataItem*>& items) +{ + QList<AmplitudeAxisItem*> axes; + for(auto item : items) + axes.append(item->zAxisItem()); return axes; } diff --git a/GUI/View/PlotUtil/RangeUtils.h b/GUI/View/PlotUtil/RangeUtils.h index d59f4393945..505bfeb3ab9 100644 --- a/GUI/View/PlotUtil/RangeUtils.h +++ b/GUI/View/PlotUtil/RangeUtils.h @@ -21,6 +21,7 @@ #include "qcustomplot.h" class IntensityDataItem; +class SpecularDataItem; class DataItem; class BasicAxisItem; class AmplitudeAxisItem; @@ -60,9 +61,17 @@ double commonMax(const QList<AmplitudeAxisItem*>& axes); //! Returns common range for a list of axes (zoom). QCPRange commonRange(const QList<AmplitudeAxisItem*>& axes); -void setCommonRange(QList<DataItem*> items); +//! Sets common Y range for a list of items (zoom). +void setCommonRangeY(QList<SpecularDataItem*> items); -QList<AmplitudeAxisItem*> valueAxesFromItems(const QList<DataItem*>& items); +//! Sets common Z range for a list of items (zoom). +void setCommonRangeZ(QList<IntensityDataItem*> items); + +//! Gets Y axes from a list of specular items. +QList<AmplitudeAxisItem*> valueAxesFromSpecularItems(const QList<SpecularDataItem*>& items); + +//! Gets Z axes from a list of intensity items. +QList<AmplitudeAxisItem*> valueAxesFromIntensityItems(const QList<IntensityDataItem*>& items); void setLogz(QCPColorScale* scale, bool isLogz); void setLogz(QCPAxis* axis, bool isLogz); -- GitLab From d66fdde51ceeae0b8a7eb6211cbfe19ca00a7c70 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Thu, 21 Jul 2022 12:23:15 +0200 Subject: [PATCH 11/32] FitComparisonWidget: common range --- GUI/View/PlotComparison/FitComparisonWidget.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/GUI/View/PlotComparison/FitComparisonWidget.cpp b/GUI/View/PlotComparison/FitComparisonWidget.cpp index 2527fc13dd4..20f6f6eb833 100644 --- a/GUI/View/PlotComparison/FitComparisonWidget.cpp +++ b/GUI/View/PlotComparison/FitComparisonWidget.cpp @@ -79,11 +79,16 @@ FitComparisonWidget::FitComparisonWidget(QWidget* parent) void FitComparisonWidget::setJobOrRealItem(JobRealBase* job_item) { + JobItem* oldJob = jobItem(); + DataAccessWidget::setJobOrRealItem(job_item); ASSERT(jobItem()); updateDiffData(); - connectItems(); + if(oldJob != jobItem()) { + GUI::View::RangeUtils::setCommonRangeZ(mainIntensityDataItems()); + connectItems(); + } m_simuCanvas->setIntensityItem(simuIntensityDataItem()); m_realCanvas->setIntensityItem(realIntensityDataItem()); @@ -103,6 +108,9 @@ void FitComparisonWidget::onResetViewAction() simuIntensityDataItem()->resetView(); realIntensityDataItem()->resetView(); diffIntensityDataItem()->resetView(); + + // synchronize data range between simulated and real + GUI::View::RangeUtils::setCommonRangeZ(mainIntensityDataItems()); } void FitComparisonWidget::connectItems() @@ -114,9 +122,6 @@ void FitComparisonWidget::connectItems() connect(senderItem, &DataItem::updateOtherPlots, receiverItem, &DataItem::copyXYRangesFromItem, Qt::UniqueConnection); - // synchronize data range at start -// GUI::View::RangeUtils::setCommonRangeZ(mainIntensityDataItems()); - // sync Z range between sumulated and real // simu --> real connect(simuIntensityDataItem(), &DataItem::updateOtherPlots, realIntensityDataItem(), -- GitLab From 12f816e5071af0745e165367c15916ed53f114b4 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Thu, 21 Jul 2022 12:34:49 +0200 Subject: [PATCH 12/32] IntensityDataCanvas: renge synch --- GUI/View/Plot2D/IntensityDataCanvas.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/GUI/View/Plot2D/IntensityDataCanvas.cpp b/GUI/View/Plot2D/IntensityDataCanvas.cpp index 509b0ba1637..6fcbb05a668 100644 --- a/GUI/View/Plot2D/IntensityDataCanvas.cpp +++ b/GUI/View/Plot2D/IntensityDataCanvas.cpp @@ -89,9 +89,13 @@ QList<QAction*> IntensityDataCanvas::actionList() } void IntensityDataCanvas::onResetViewAction() -{ +{ for(auto item : allIntensityDataItems()) item->resetView(); + + // synchronize real item with current item + for(auto item : otherMainIntensityDataItems()) + item->copyZRangeFromItem(currentIntensityDataItem()); } void IntensityDataCanvas::onSavePlotAction() -- GitLab From c8cd92372bdd15e58db66f7e5b340df34034ab3a Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Thu, 21 Jul 2022 12:50:31 +0200 Subject: [PATCH 13/32] FitComparisonWidget1D: common range --- GUI/View/PlotComparison/FitComparisonWidget1D.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/GUI/View/PlotComparison/FitComparisonWidget1D.cpp b/GUI/View/PlotComparison/FitComparisonWidget1D.cpp index 9021d113189..157d5e7d7bf 100644 --- a/GUI/View/PlotComparison/FitComparisonWidget1D.cpp +++ b/GUI/View/PlotComparison/FitComparisonWidget1D.cpp @@ -18,6 +18,7 @@ #include "GUI/View/PlotComparison/FitComparisonWidget1D.h" #include "GUI/View/PlotComparison/FitFlowWidget.h" #include "GUI/View/PlotUtil/PlotStatusLabel.h" +#include "GUI/View/PlotUtil/RangeUtils.h" #include "GUI/View/PlotSpecular/SpecularDataPropertyWidget.h" #include "GUI/View/PlotSpecular/SpecularPlotCanvas.h" #include "GUI/View/PlotSpecular/SpecularPlot.h" @@ -75,11 +76,16 @@ FitComparisonWidget1D::FitComparisonWidget1D(QWidget* parent) void FitComparisonWidget1D::setJobOrRealItem(JobRealBase* job_item) { + JobItem* oldJob = jobItem(); + DataAccessWidget::setJobOrRealItem(job_item); ASSERT(jobItem()); updateDiffData(); - connectItems(); + if(oldJob != jobItem()) { + GUI::View::RangeUtils::setCommonRangeY(mainSpecularDataItems()); + connectItems(); + } m_data_canvas->setSpecularItems({simuSpecularDataItem(), realSpecularDataItem()}); @@ -99,6 +105,9 @@ void FitComparisonWidget1D::onResetViewAction() simuSpecularDataItem()->resetView(); realSpecularDataItem()->resetView(); diffSpecularDataItem()->resetView(); + + // synchronize data range between simulated and real + GUI::View::RangeUtils::setCommonRangeY(mainSpecularDataItems()); } void FitComparisonWidget1D::connectItems() -- GitLab From 98bcf07267df0636cb9ce5b858eee3f78710732b Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Thu, 21 Jul 2022 12:56:09 +0200 Subject: [PATCH 14/32] RangeUtils: ticks values --- GUI/View/PlotUtil/RangeUtils.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GUI/View/PlotUtil/RangeUtils.cpp b/GUI/View/PlotUtil/RangeUtils.cpp index e6ab00f1aeb..0f6bbb5cf03 100644 --- a/GUI/View/PlotUtil/RangeUtils.cpp +++ b/GUI/View/PlotUtil/RangeUtils.cpp @@ -130,7 +130,7 @@ void GUI::View::RangeUtils::setLogz(QCPAxis* axis, bool isLogz) axis->setTicker(ticker); } else { axis->setNumberFormat("f"); - axis->setNumberPrecision(0); + axis->setNumberPrecision(1); axis->setScaleType(QCPAxis::stLinear); QSharedPointer<QCPAxisTicker> ticker(new QCPAxisTicker); axis->setTicker(ticker); -- GitLab From 53965004ffcdc43cc2cae90f0d9f0080e601cc91 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Thu, 21 Jul 2022 12:58:34 +0200 Subject: [PATCH 15/32] RangeUtils: format --- GUI/View/PlotUtil/RangeUtils.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/GUI/View/PlotUtil/RangeUtils.cpp b/GUI/View/PlotUtil/RangeUtils.cpp index 0f6bbb5cf03..826df77f500 100644 --- a/GUI/View/PlotUtil/RangeUtils.cpp +++ b/GUI/View/PlotUtil/RangeUtils.cpp @@ -185,7 +185,8 @@ void GUI::View::RangeUtils::setCommonRangeZ(QList<IntensityDataItem*> items) } } -QList<AmplitudeAxisItem*> GUI::View::RangeUtils::valueAxesFromSpecularItems(const QList<SpecularDataItem*>& items) +QList<AmplitudeAxisItem*> +GUI::View::RangeUtils::valueAxesFromSpecularItems(const QList<SpecularDataItem*>& items) { QList<AmplitudeAxisItem*> axes; for(auto item : items) @@ -193,7 +194,8 @@ QList<AmplitudeAxisItem*> GUI::View::RangeUtils::valueAxesFromSpecularItems(cons return axes; } -QList<AmplitudeAxisItem*> GUI::View::RangeUtils::valueAxesFromIntensityItems(const QList<IntensityDataItem*>& items) +QList<AmplitudeAxisItem*> +GUI::View::RangeUtils::valueAxesFromIntensityItems(const QList<IntensityDataItem*>& items) { QList<AmplitudeAxisItem*> axes; for(auto item : items) -- GitLab From 11e62cb6537215fb18aa7677a1c31f2269d037e9 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Thu, 21 Jul 2022 13:00:51 +0200 Subject: [PATCH 16/32] FitComparison: fix --- GUI/View/PlotComparison/FitComparisonWidget.cpp | 7 +++---- GUI/View/PlotComparison/FitComparisonWidget1D.cpp | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/GUI/View/PlotComparison/FitComparisonWidget.cpp b/GUI/View/PlotComparison/FitComparisonWidget.cpp index 20f6f6eb833..604796ea78b 100644 --- a/GUI/View/PlotComparison/FitComparisonWidget.cpp +++ b/GUI/View/PlotComparison/FitComparisonWidget.cpp @@ -84,11 +84,10 @@ void FitComparisonWidget::setJobOrRealItem(JobRealBase* job_item) DataAccessWidget::setJobOrRealItem(job_item); ASSERT(jobItem()); - updateDiffData(); - if(oldJob != jobItem()) { + if(oldJob != jobItem()) GUI::View::RangeUtils::setCommonRangeZ(mainIntensityDataItems()); - connectItems(); - } + updateDiffData(); + connectItems(); m_simuCanvas->setIntensityItem(simuIntensityDataItem()); m_realCanvas->setIntensityItem(realIntensityDataItem()); diff --git a/GUI/View/PlotComparison/FitComparisonWidget1D.cpp b/GUI/View/PlotComparison/FitComparisonWidget1D.cpp index 157d5e7d7bf..381811f183a 100644 --- a/GUI/View/PlotComparison/FitComparisonWidget1D.cpp +++ b/GUI/View/PlotComparison/FitComparisonWidget1D.cpp @@ -81,11 +81,10 @@ void FitComparisonWidget1D::setJobOrRealItem(JobRealBase* job_item) DataAccessWidget::setJobOrRealItem(job_item); ASSERT(jobItem()); - updateDiffData(); - if(oldJob != jobItem()) { + if(oldJob != jobItem()) GUI::View::RangeUtils::setCommonRangeY(mainSpecularDataItems()); - connectItems(); - } + updateDiffData(); + connectItems(); m_data_canvas->setSpecularItems({simuSpecularDataItem(), realSpecularDataItem()}); -- GitLab From a4a45b0aef6315bfba76aade4ea35b935bf0785d Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Thu, 21 Jul 2022 14:03:30 +0200 Subject: [PATCH 17/32] Mask and Projections update fix --- GUI/View/Import/RealDataMaskWidget.cpp | 1 + GUI/View/Projection/IntensityDataProjectionsWidget.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/GUI/View/Import/RealDataMaskWidget.cpp b/GUI/View/Import/RealDataMaskWidget.cpp index ce423a32f89..a765cae3de1 100644 --- a/GUI/View/Import/RealDataMaskWidget.cpp +++ b/GUI/View/Import/RealDataMaskWidget.cpp @@ -59,6 +59,7 @@ void RealDataMaskWidget::setJobOrRealItem(JobRealBase* job_or_real_item) { DataAccessWidget::setJobOrRealItem(job_or_real_item); m_editorPropertyPanel->setJobOrRealItem(job_or_real_item); + setContext(); } //! shows/hides right panel with properties diff --git a/GUI/View/Projection/IntensityDataProjectionsWidget.cpp b/GUI/View/Projection/IntensityDataProjectionsWidget.cpp index bcd92096e16..9dae7a9aa20 100644 --- a/GUI/View/Projection/IntensityDataProjectionsWidget.cpp +++ b/GUI/View/Projection/IntensityDataProjectionsWidget.cpp @@ -58,6 +58,7 @@ void IntensityDataProjectionsWidget::setJobOrRealItem(JobRealBase* job_or_real_i { DataAccessWidget::setJobOrRealItem(job_or_real_item); m_propertyPanel->setJobOrRealItem(job_or_real_item); + setContext(); } void IntensityDataProjectionsWidget::setContext() -- GitLab From aa32e306048b566cfb590f5bb82cf2e44f5acfc8 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Thu, 21 Jul 2022 14:25:17 +0200 Subject: [PATCH 18/32] IntensityDataItem: gradient_map --- GUI/Model/Data/IntensityDataItem.cpp | 36 +++++++++++++--------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/GUI/Model/Data/IntensityDataItem.cpp b/GUI/Model/Data/IntensityDataItem.cpp index 660c1221b60..c282bd19261 100644 --- a/GUI/Model/Data/IntensityDataItem.cpp +++ b/GUI/Model/Data/IntensityDataItem.cpp @@ -21,27 +21,25 @@ #include "GUI/Model/Device/MaskUnitsConverter.h" #include "GUI/Support/IO/ImportDataInfo.h" #include "GUI/Util/Error.h" +#include <qcustomplot.h> namespace { -ComboProperty gradientSet() -{ - ComboProperty result; - result << "Grayscale" - << "Hot" - << "Cold" - << "Night" - << "Candy" - << "Geography" - << "Ion" - << "Thermal" - << "Polar" - << "Spectrum" - << "Jet" - << "Hues"; - result.setValue("Thermal"); - return result; -} +// gradient map for colormaps +const QMap<QString, QCPColorGradient::GradientPreset> gradient_map = { + {"Grayscale", QCPColorGradient::gpGrayscale}, + {"Hot", QCPColorGradient::gpHot}, + {"Cold", QCPColorGradient::gpCold}, + {"Night", QCPColorGradient::gpNight}, + {"Candy", QCPColorGradient::gpCandy}, + {"Geography", QCPColorGradient::gpGeography}, + {"Ion", QCPColorGradient::gpIon}, + {"Thermal", QCPColorGradient::gpThermal}, + {"Polar", QCPColorGradient::gpPolar}, + {"Spectrum", QCPColorGradient::gpSpectrum}, + {"Jet", QCPColorGradient::gpJet}, + {"Hues", QCPColorGradient::gpHues} +}; } // namespace @@ -51,7 +49,7 @@ IntensityDataItem::IntensityDataItem() addProperty(P_TITLE, QString()); addProperty(P_PROJECTIONS, false); addProperty(P_IS_INTERPOLATED, true); - addProperty(P_GRADIENT, gradientSet().variant()); + addProperty(P_GRADIENT, ComboProperty::fromList(gradient_map.keys(), "Thermal").variant()); addProperty<AmplitudeAxisItem>(P_ZAXIS); registerTag(T_MASKS, 0, -1, {MaskContainerItem::M_TYPE}); -- GitLab From b3565a118c515e1e96510d682d0c147791baa979 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Thu, 21 Jul 2022 14:44:49 +0200 Subject: [PATCH 19/32] IntensityDataItem: gradient is only here --- GUI/Model/Data/IntensityDataItem.cpp | 8 +++--- GUI/Model/Data/IntensityDataItem.h | 5 ++-- GUI/View/Plot2D/ColorMap.cpp | 2 +- GUI/View/PlotUtil/RangeUtils.cpp | 37 ---------------------------- GUI/View/PlotUtil/RangeUtils.h | 3 --- 5 files changed, 8 insertions(+), 47 deletions(-) diff --git a/GUI/Model/Data/IntensityDataItem.cpp b/GUI/Model/Data/IntensityDataItem.cpp index c282bd19261..3ffbd4dfcb3 100644 --- a/GUI/Model/Data/IntensityDataItem.cpp +++ b/GUI/Model/Data/IntensityDataItem.cpp @@ -21,7 +21,6 @@ #include "GUI/Model/Device/MaskUnitsConverter.h" #include "GUI/Support/IO/ImportDataInfo.h" #include "GUI/Util/Error.h" -#include <qcustomplot.h> namespace { @@ -46,10 +45,11 @@ const QMap<QString, QCPColorGradient::GradientPreset> gradient_map = { IntensityDataItem::IntensityDataItem() : DataItem(M_TYPE) { + QString startGradient = gradient_map.key(QCPColorGradient::gpThermal); addProperty(P_TITLE, QString()); addProperty(P_PROJECTIONS, false); addProperty(P_IS_INTERPOLATED, true); - addProperty(P_GRADIENT, ComboProperty::fromList(gradient_map.keys(), "Thermal").variant()); + addProperty(P_GRADIENT, ComboProperty::fromList(gradient_map.keys(), startGradient).variant()); addProperty<AmplitudeAxisItem>(P_ZAXIS); registerTag(T_MASKS, 0, -1, {MaskContainerItem::M_TYPE}); @@ -134,9 +134,9 @@ void IntensityDataItem::copyZRangeFromItem(DataItem* sourceItem) setUpperZ(source->upperZ()); } -QString IntensityDataItem::gradientValue() const +QCPColorGradient IntensityDataItem::gradientQCP() const { - return gradientCombo().getValue(); + return gradient_map.value(gradientCombo().getValue()); } ComboProperty IntensityDataItem::gradientCombo() const diff --git a/GUI/Model/Data/IntensityDataItem.h b/GUI/Model/Data/IntensityDataItem.h index 22cfeccd4f3..3709aafafe1 100644 --- a/GUI/Model/Data/IntensityDataItem.h +++ b/GUI/Model/Data/IntensityDataItem.h @@ -17,6 +17,7 @@ #include "GUI/Model/Data/DataItem.h" #include "GUI/Model/Descriptor/SelectionDescriptor.h" +#include <qcustomplot.h> class BasicAxisItem; class AmplitudeAxisItem; @@ -61,10 +62,10 @@ public: void setLowerZ(double zmin); void setUpperZ(double zmax); void setLowerAndUpperZ(double zmin, double zmax); - void copyZRangeFromItem(DataItem *sourceItem); + void copyZRangeFromItem(DataItem* sourceItem); // Color scheme of the color map - QString gradientValue() const; + QCPColorGradient gradientQCP() const; ComboProperty gradientCombo() const; void setGradient(const ComboProperty& gradient); SelectionDescriptor<QString> gradient() const; diff --git a/GUI/View/Plot2D/ColorMap.cpp b/GUI/View/Plot2D/ColorMap.cpp index c7326a4bbd0..82867508874 100644 --- a/GUI/View/Plot2D/ColorMap.cpp +++ b/GUI/View/Plot2D/ColorMap.cpp @@ -119,7 +119,7 @@ void ColorMap::setGradient() { if(!intensityItem()) return; - m_colorMap->setGradient(GUI::View::RangeUtils::itemGradient(intensityItem())); + m_colorMap->setGradient(intensityItem()->gradientQCP()); replot(); } diff --git a/GUI/View/PlotUtil/RangeUtils.cpp b/GUI/View/PlotUtil/RangeUtils.cpp index 826df77f500..b20fc9d5cdb 100644 --- a/GUI/View/PlotUtil/RangeUtils.cpp +++ b/GUI/View/PlotUtil/RangeUtils.cpp @@ -19,30 +19,8 @@ #include "GUI/Util/Error.h" #include "GUI/View/Tool/StyleUtils.h" -using gradient_map_t = QMap<QString, QCPColorGradient::GradientPreset>; - namespace { -gradient_map_t createGradientMap() -{ - gradient_map_t result; - - result["Grayscale"] = QCPColorGradient::gpGrayscale; - result["Hot"] = QCPColorGradient::gpHot; - result["Cold"] = QCPColorGradient::gpCold; - result["Night"] = QCPColorGradient::gpNight; - result["Candy"] = QCPColorGradient::gpCandy; - result["Geography"] = QCPColorGradient::gpGeography; - result["Ion"] = QCPColorGradient::gpIon; - result["Thermal"] = QCPColorGradient::gpThermal; - result["Polar"] = QCPColorGradient::gpPolar; - result["Spectrum"] = QCPColorGradient::gpSpectrum; - result["Jet"] = QCPColorGradient::gpJet; - result["Hues"] = QCPColorGradient::gpHues; - - return result; -} - // Converts xmin (low edge of first bin) and xmax (upper edge of last bin) to the // range expected by QCPColorMapData::setRange. QCPRange qcpRange(double xmin, double xmax, int nbins) @@ -63,21 +41,6 @@ QMargins defaultMargins(const QWidget& widget) } // namespace -QCPColorGradient GUI::View::RangeUtils::getGradient(const QString& gradientName) -{ - static gradient_map_t gradient_map = createGradientMap(); - - auto it = gradient_map.find(gradientName); - if (it == gradient_map.end()) - throw Error("ColorMapHelper::getGradient() -> Error. No such gradient" + gradientName); - return QCPColorGradient(it.value()); -} - -QCPColorGradient GUI::View::RangeUtils::itemGradient(const IntensityDataItem* item) -{ - return getGradient(item->gradientValue()); -} - QCPRange GUI::View::RangeUtils::itemXrange(const IntensityDataItem* item) { return qcpRange(item->xMin(), item->xMax(), item->xSize()); diff --git a/GUI/View/PlotUtil/RangeUtils.h b/GUI/View/PlotUtil/RangeUtils.h index 505bfeb3ab9..f836430c5d4 100644 --- a/GUI/View/PlotUtil/RangeUtils.h +++ b/GUI/View/PlotUtil/RangeUtils.h @@ -31,9 +31,6 @@ class ColorMap; namespace GUI::View::RangeUtils { -QCPColorGradient getGradient(const QString& gradientName); -QCPColorGradient itemGradient(const IntensityDataItem* item); - //! Returns x-axis range. QCPRange itemXrange(const IntensityDataItem* item); -- GitLab From e8b608ec3a9265cd7f857711d026f36ba2f7ae35 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Thu, 21 Jul 2022 16:00:44 +0200 Subject: [PATCH 20/32] DataItem: cleanup --- GUI/Model/Data/DataItem.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/GUI/Model/Data/DataItem.h b/GUI/Model/Data/DataItem.h index c42d39064ff..648636859ce 100644 --- a/GUI/Model/Data/DataItem.h +++ b/GUI/Model/Data/DataItem.h @@ -99,8 +99,6 @@ public: ComboProperty axesUnitsCombo() const; void setAxesUnits(const ComboProperty& units); SelectionDescriptor<QString> axesUnits() const; - - //! Returns currently selected axes units QString selectedAxesUnits() const; //! Updates data on the change of axes units -- GitLab From 4598452f4ab74685d3e3c164cd35b3a25dbf57b1 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Thu, 21 Jul 2022 16:37:12 +0200 Subject: [PATCH 21/32] DataPropertyWidget: change units in real data --- GUI/View/PlotUtil/DataPropertyWidget.cpp | 25 ++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/GUI/View/PlotUtil/DataPropertyWidget.cpp b/GUI/View/PlotUtil/DataPropertyWidget.cpp index 4b4153be63e..c17b3b77310 100644 --- a/GUI/View/PlotUtil/DataPropertyWidget.cpp +++ b/GUI/View/PlotUtil/DataPropertyWidget.cpp @@ -13,6 +13,8 @@ // ************************************************************************************************ #include "GUI/View/PlotUtil/DataPropertyWidget.h" +#include "GUI/Model/Data/SessionData.h" +#include "GUI/Model/Project/ProjectDocument.h" #include "GUI/Model/Data/DataItem.h" #include <QFormLayout> @@ -39,21 +41,24 @@ void DataPropertyWidget::updateItemCoords(DataItem* item) // TODO : https://jugit.fz-juelich.de/mlz/bornagain/-/issues/320 // Also change units for real item with linked instrument - if (!item || !jobItem()) + if (!item) return; -// InstrumentItem* instrument; -// if(jobItem()) -// instrument = jobItem()->instrumentItem(); -// else if(realItem()) -// instrument = gSessionData->instrumentLibrary.collectedItems() -// ->findInstrumentById(realItem()->instrumentId()); -// if(instrument) { + InstrumentItem* instrument = nullptr; + if(jobItem()) + instrument = jobItem()->instrumentItem(); + else if(realItem()) { + instrument = gSessionData->projectDocument.value()->collectedItems() + ->findInstrumentById(realItem()->instrumentId()); + } else + ASSERT(0) + + if(instrument) { item->blockSignals(true); - item->updateCoords(jobItem()->instrumentItem()); + item->updateCoords(instrument); item->blockSignals(false); emit item->axesUnitsReplotRequested(); -// } + } } void DataPropertyWidget::updateUIValues() -- GitLab From bd2c10702944f94d1b7c36adca59c366d1bd0cc0 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Thu, 21 Jul 2022 16:53:00 +0200 Subject: [PATCH 22/32] DataPropertyWidget: cleanup --- GUI/View/PlotUtil/DataPropertyWidget.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/GUI/View/PlotUtil/DataPropertyWidget.cpp b/GUI/View/PlotUtil/DataPropertyWidget.cpp index c17b3b77310..903d18cf564 100644 --- a/GUI/View/PlotUtil/DataPropertyWidget.cpp +++ b/GUI/View/PlotUtil/DataPropertyWidget.cpp @@ -38,9 +38,6 @@ void DataPropertyWidget::setJobOrRealItem(JobRealBase* job_or_real_Item) void DataPropertyWidget::updateItemCoords(DataItem* item) { - // TODO : https://jugit.fz-juelich.de/mlz/bornagain/-/issues/320 - // Also change units for real item with linked instrument - if (!item) return; -- GitLab From 6061640522631ff5104ab9051b537e718bc444de Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Thu, 21 Jul 2022 17:16:33 +0200 Subject: [PATCH 23/32] RealDataSelector: instrument change notification --- GUI/View/Import/RealDataPropertiesWidget.cpp | 2 ++ GUI/View/Import/RealDataPropertiesWidget.h | 3 +++ GUI/View/Import/RealDataSelectorWidget.cpp | 3 +++ 3 files changed, 8 insertions(+) diff --git a/GUI/View/Import/RealDataPropertiesWidget.cpp b/GUI/View/Import/RealDataPropertiesWidget.cpp index 9656b263303..8c0fab804d1 100644 --- a/GUI/View/Import/RealDataPropertiesWidget.cpp +++ b/GUI/View/Import/RealDataPropertiesWidget.cpp @@ -88,6 +88,8 @@ void RealDataPropertiesWidget::onInstrumentComboIndexChanged(int /*index*/) } else // Linking was impossible or denied. Set combo to previous state updateInstrumentComboIndex(); + + emit instrumentUpdated(m_currentRealItem); } //! Updates instrument selector for new instruments and their names. diff --git a/GUI/View/Import/RealDataPropertiesWidget.h b/GUI/View/Import/RealDataPropertiesWidget.h index 8b27ee82ef8..93bf77d9c40 100644 --- a/GUI/View/Import/RealDataPropertiesWidget.h +++ b/GUI/View/Import/RealDataPropertiesWidget.h @@ -35,6 +35,9 @@ public: //! Set current RealDataItem to display in instrument selector. void setRealItem(RealDataItem* realItem); +signals: + void instrumentUpdated(RealDataItem* realItem); + private: //! Processes user interaction with instrument selector combo. If there is realDataItem, //! it will be linked with selected instrument. diff --git a/GUI/View/Import/RealDataSelectorWidget.cpp b/GUI/View/Import/RealDataSelectorWidget.cpp index 8da87546fed..2e9d36f7cad 100644 --- a/GUI/View/Import/RealDataSelectorWidget.cpp +++ b/GUI/View/Import/RealDataSelectorWidget.cpp @@ -103,6 +103,9 @@ RealDataSelectorWidget::RealDataSelectorWidget(QWidget* parent, ProjectDocument* setLayout(mainLayout); + connect(m_propertiesWidget, &RealDataPropertiesWidget::instrumentUpdated, this, + &RealDataSelectorWidget::selectionChanged); + connect(m_itemTree, &QTreeView::customContextMenuRequested, this, &RealDataSelectorWidget::onContextMenuRequest); -- GitLab From eead760262c709e250285f6c81e7af418e09c96b Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Fri, 22 Jul 2022 12:38:09 +0200 Subject: [PATCH 24/32] MaskGraphicsScene: back to onSceneSelectionChanged() --- GUI/View/Mask/MaskGraphicsScene.cpp | 38 ++++++++++++----------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/GUI/View/Mask/MaskGraphicsScene.cpp b/GUI/View/Mask/MaskGraphicsScene.cpp index 043397c7ff7..cbdc58c3348 100644 --- a/GUI/View/Mask/MaskGraphicsScene.cpp +++ b/GUI/View/Mask/MaskGraphicsScene.cpp @@ -237,28 +237,22 @@ void MaskGraphicsScene::onSessionSelectionChanged(const QItemSelection&, const Q void MaskGraphicsScene::onSceneSelectionChanged() { - // TODO : https://jugit.fz-juelich.de/mlz/bornagain/-/issues/319 - // - // With this code we get crash on program close if: - // create or select mask -> calculate job with masked data -> save -> close program - // I don't understand the meaning of this function, but without it everything looks working - -// if (m_block_selection) -// return; - -// m_block_selection = true; - -// m_selectionModel->clearSelection(); - -// for (QGraphicsItem* graphicsItem : selectedItems()) { -// if (auto* view = dynamic_cast<IShape2DView*>(graphicsItem)) { -// QModelIndex itemIndex = m_maskModel->indexOfItem(view->parameterizedItem()); -// ASSERT(itemIndex.isValid()); -// if (!m_selectionModel->isSelected(itemIndex)) -// m_selectionModel->select(itemIndex, QItemSelectionModel::Select); -// } -// } -// m_block_selection = false; + if (m_block_selection) + return; + + m_block_selection = true; + + m_selectionModel->clearSelection(); + + for (QGraphicsItem* graphicsItem : selectedItems()) { + if (auto* view = dynamic_cast<IShape2DView*>(graphicsItem)) { + QModelIndex itemIndex = m_maskModel->indexOfItem(view->parameterizedItem()); + ASSERT(itemIndex.isValid()); + if (!m_selectionModel->isSelected(itemIndex)) + m_selectionModel->select(itemIndex, QItemSelectionModel::Select); + } + } + m_block_selection = false; } void MaskGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent* event) -- GitLab From d07420130647e6d616c2e460e5a1a674e38b4245 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Fri, 29 Jul 2022 15:00:15 +0200 Subject: [PATCH 25/32] DataPropertyWidget: rm using std::function --- GUI/View/PlotUtil/DataPropertyWidget.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/GUI/View/PlotUtil/DataPropertyWidget.h b/GUI/View/PlotUtil/DataPropertyWidget.h index 6816fb2542b..bebffa3176f 100644 --- a/GUI/View/PlotUtil/DataPropertyWidget.h +++ b/GUI/View/PlotUtil/DataPropertyWidget.h @@ -19,8 +19,6 @@ class QFormLayout; -using std::function; - //! Base class for IntensityDataPropertyWidget and SpecularDataPropertyWidget. class DataPropertyWidget : public DataAccessWidget { @@ -36,7 +34,7 @@ protected: virtual void createPanelElements() = 0; QFormLayout* m_mainLayout; - QList<function<void()>> m_updaters; + QList<std::function<void()>> m_updaters; }; #endif // BORNAGAIN_GUI_VIEW_PLOTUTIL_DATAPROPERTYWIDGET_H -- GitLab From ac0f1e9df895d1d8a74f1f9da2f73b7e03fe1aa8 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Fri, 29 Jul 2022 15:05:21 +0200 Subject: [PATCH 26/32] MaskEditorPropertyPanel: rm using std::function --- GUI/View/Mask/MaskEditorPropertyPanel.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/GUI/View/Mask/MaskEditorPropertyPanel.h b/GUI/View/Mask/MaskEditorPropertyPanel.h index 531008bd597..08cbcd34e58 100644 --- a/GUI/View/Mask/MaskEditorPropertyPanel.h +++ b/GUI/View/Mask/MaskEditorPropertyPanel.h @@ -20,8 +20,6 @@ #include <QModelIndex> #include <functional> -using std::function; - class QListView; class SessionModel; class QItemSelection; -- GitLab From c37a3e65070084d468a5455dfd6f04c924717af4 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Fri, 29 Jul 2022 15:07:58 +0200 Subject: [PATCH 27/32] MinimizerSettingsWidget: rm using std::function --- GUI/View/Fit/MinimizerSettingsWidget.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/GUI/View/Fit/MinimizerSettingsWidget.h b/GUI/View/Fit/MinimizerSettingsWidget.h index 3dd9252c9fa..b1ff0ede2e3 100644 --- a/GUI/View/Fit/MinimizerSettingsWidget.h +++ b/GUI/View/Fit/MinimizerSettingsWidget.h @@ -26,8 +26,6 @@ class DoubleDescriptor; class UIntDescriptor; class QFormLayout; -using std::function; - //! The MinimizerSettingsWidget contains editor for all minimizer settings and related fit //! options. Part of FitSuiteWidget. @@ -51,7 +49,7 @@ private: MinimizerContainerItem* m_currentItem; QFormLayout* m_mainLayout; QFormLayout* m_minimizerLayout; - QList<function<void()>> m_updaters; + QList<std::function<void()>> m_updaters; }; #endif // BORNAGAIN_GUI_VIEW_FIT_MINIMIZERSETTINGSWIDGET_H -- GitLab From 1747afd25284b6ef30fd60de79703c72a50c6835 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Fri, 29 Jul 2022 15:16:27 +0200 Subject: [PATCH 28/32] SelectionDescriptor & WidgetUtils: rm using std::function --- GUI/Model/Descriptor/SelectionDescriptor.h | 8 ++--- GUI/View/Tool/WidgetUtils.cpp | 22 +++++++------- GUI/View/Tool/WidgetUtils.h | 34 +++++++++++----------- 3 files changed, 31 insertions(+), 33 deletions(-) diff --git a/GUI/Model/Descriptor/SelectionDescriptor.h b/GUI/Model/Descriptor/SelectionDescriptor.h index 2bde2404d67..1cd99633fd2 100644 --- a/GUI/Model/Descriptor/SelectionDescriptor.h +++ b/GUI/Model/Descriptor/SelectionDescriptor.h @@ -21,8 +21,6 @@ #include <QStringList> #include <functional> -using std::function; - //! Abstract base class for SelectionDescriptor to ease referencing. class AbstractSelectionDescriptor { public: @@ -108,9 +106,9 @@ public: QString label; //!< A label text (short, no trailing colon) QString tooltip; //!< Tooltip text QStringList options; //!< List of options, usually presented as combo entries - function<void(int)> currentIndexSetter; //!< Function to set currently selected option - function<int()> currentIndexGetter; //!< Function to get currently selected option - function<T()> currentItem; //!< Function to get currently selected item + std::function<void(int)> currentIndexSetter; //!< Function to set currently selected option + std::function<int()> currentIndexGetter; //!< Function to get currently selected option + std::function<T()> currentItem; //!< Function to get currently selected item }; #endif // BORNAGAIN_GUI_MODEL_DESCRIPTOR_SELECTIONDESCRIPTOR_H diff --git a/GUI/View/Tool/WidgetUtils.cpp b/GUI/View/Tool/WidgetUtils.cpp index bd436883672..87081b2c1c0 100644 --- a/GUI/View/Tool/WidgetUtils.cpp +++ b/GUI/View/Tool/WidgetUtils.cpp @@ -57,7 +57,7 @@ SafeSpinBox* GUI::Util::createSpinBox(const UIntDescriptor& d, } SafeSpinBox* GUI::Util::createSpinBoxScroll(const UIntDescriptor& d, - QList<function<void()>>* updaters, + QList<std::function<void()>>* updaters, std::function<void(uint)> slot) { return GUI::Util::createSpinBox(d, updaters, slot, true); @@ -119,9 +119,9 @@ ScientificSpinBox* GUI::Util::createScientificSpinBox(QFormLayout* parentLayout, } QCheckBox* GUI::Util::createCheckBox(const QString& title, - function<bool()> getter, - function<void(bool)> setter, - QList<function<void()>>* updaters) + std::function<bool()> getter, + std::function<void(bool)> setter, + QList<std::function<void()>>* updaters) { QCheckBox* checkBox = new QCheckBox(title); checkBox->setChecked(getter()); @@ -137,9 +137,9 @@ QCheckBox* GUI::Util::createCheckBox(const QString& title, return checkBox; } -QLineEdit* GUI::Util::createTextEdit(function<QString()> getter, - function<void(QString)> setter, - QList<function<void()>>* updaters) +QLineEdit* GUI::Util::createTextEdit(std::function<QString()> getter, + std::function<void(QString)> setter, + QList<std::function<void()>>* updaters) { QLineEdit* edit = new QLineEdit; edit->setText(getter()); @@ -156,8 +156,8 @@ QLineEdit* GUI::Util::createTextEdit(function<QString()> getter, } DoubleSpinBox* GUI::Util::createDoubleSpinbox(DoubleDescriptor d, - QList<function<void()>>* updaters, - function<void(double)> slot, + QList<std::function<void()>>* updaters, + std::function<void(double)> slot, bool easyScrollable) { DoubleSpinBox* spinBox = new DoubleSpinBox(d, easyScrollable); @@ -177,8 +177,8 @@ DoubleSpinBox* GUI::Util::createDoubleSpinbox(DoubleDescriptor d, } DoubleSpinBox* GUI::Util::createDoubleSpinboxScroll(DoubleDescriptor d, - QList<function<void()>>* updaters, - function<void(double)> slot) + QList<std::function<void()>>* updaters, + std::function<void(double)> slot) { return GUI::Util::createDoubleSpinbox(d, updaters, slot, true); } diff --git a/GUI/View/Tool/WidgetUtils.h b/GUI/View/Tool/WidgetUtils.h index 226d25aadcf..6391e61317d 100644 --- a/GUI/View/Tool/WidgetUtils.h +++ b/GUI/View/Tool/WidgetUtils.h @@ -47,8 +47,8 @@ namespace GUI::Util { //! template <typename T> QComboBox* createComboBox(SelectionDescriptor<T> d, - function<void(int)> slot = nullptr, - QList<function<void()>>* updaters = nullptr, + std::function<void(int)> slot = nullptr, + QList<std::function<void()>>* updaters = nullptr, bool isScrollable = false) { QComboBox* combo = new QComboBox; @@ -78,8 +78,8 @@ QComboBox* createComboBox(SelectionDescriptor<T> d, //! Scrollable and updatable version template <typename T> QComboBox* createComboBoxUpdScroll(SelectionDescriptor<T> d, - QList<function<void()>>* updaters = nullptr, - function<void(int)> slot = nullptr) + QList<std::function<void()>>* updaters = nullptr, + std::function<void(int)> slot = nullptr) { return GUI::Util::createComboBox(d, slot, updaters, true); } @@ -87,7 +87,7 @@ QComboBox* createComboBoxUpdScroll(SelectionDescriptor<T> d, //! Scrollable, but non-updatable version template <typename T> QComboBox* createComboBoxScroll(SelectionDescriptor<T> d, - function<void(int)> slot = nullptr) + std::function<void(int)> slot = nullptr) { return GUI::Util::createComboBox(d, slot, nullptr, true); } @@ -103,13 +103,13 @@ QComboBox* createComboBoxScroll(SelectionDescriptor<T> d, //! will *not* be notified to the descriptor. The additional (and optional) slot can be used to be //! notified about a value change. SafeSpinBox* createSpinBox(const UIntDescriptor& d, - QList<function<void()>>* updaters = nullptr, + QList<std::function<void()>>* updaters = nullptr, std::function<void(uint)> slot = nullptr, bool easyScrollable = false); //! Creates a scrollable spinbox SafeSpinBox* createSpinBoxScroll(const UIntDescriptor& d, - QList<function<void()>>* updaters = nullptr, + QList<std::function<void()>>* updaters = nullptr, std::function<void(uint)> slot = nullptr); //! Create a label and a spin box with the information found in a UIntDescriptor and place them in a @@ -162,25 +162,25 @@ QString labelWithUnit(const DoubleDescriptor& d); //! Creates an updatable checkbox QCheckBox* createCheckBox(const QString& title, - function<bool()> getter, - function<void(bool)> setter, - QList<function<void()>>* updaters); + std::function<bool()> getter, + std::function<void(bool)> setter, + QList<std::function<void()>>* updaters); //! Creates an updatable lineedit -QLineEdit* createTextEdit(function<QString()> getter, - function<void(QString)> setter, - QList<function<void()>>* updaters); +QLineEdit* createTextEdit(std::function<QString()> getter, + std::function<void(QString)> setter, + QList<std::function<void()>>* updaters); //! Creates an updatable doublespinBox DoubleSpinBox* createDoubleSpinbox(DoubleDescriptor d, - QList<function<void ()>>* updaters = nullptr, - function<void(double)> slot = nullptr, + QList<std::function<void ()>>* updaters = nullptr, + std::function<void(double)> slot = nullptr, bool easyScrollable = false); //! Creates a scrollable updatable doublespinBox DoubleSpinBox* createDoubleSpinboxScroll(DoubleDescriptor d, - QList<function<void()>>* updaters = nullptr, - function<void(double)> slot = nullptr); + QList<std::function<void()>>* updaters = nullptr, + std::function<void(double)> slot = nullptr); } // namespace GUI::Util -- GitLab From f0303f57815f539b4d88933fed112a69303dce37 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Fri, 29 Jul 2022 15:21:53 +0200 Subject: [PATCH 29/32] UIntDescriptor: mv using std::function to cpp --- GUI/Model/Descriptor/UIntDescriptor.cpp | 5 ++++- GUI/Model/Descriptor/UIntDescriptor.h | 26 +++++++++++-------------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/GUI/Model/Descriptor/UIntDescriptor.cpp b/GUI/Model/Descriptor/UIntDescriptor.cpp index 739a2fc306d..688c083afd7 100644 --- a/GUI/Model/Descriptor/UIntDescriptor.cpp +++ b/GUI/Model/Descriptor/UIntDescriptor.cpp @@ -17,6 +17,9 @@ #include "GUI/Model/BaseItem/SessionItem.h" #include <utility> +using std::function; +using std::variant; + UIntDescriptor::UIntDescriptor(const QString& label, SessionItem* item, const variant<QString, Unit>& unit) : UIntDescriptor( @@ -25,7 +28,7 @@ UIntDescriptor::UIntDescriptor(const QString& label, SessionItem* item, { } -UIntDescriptor::UIntDescriptor(SessionItem* item, const variant<QString, Unit>& unit) +UIntDescriptor::UIntDescriptor(SessionItem* item, const variant<QString, Unit> &unit) : UIntDescriptor(item->displayName(), item, unit) { } diff --git a/GUI/Model/Descriptor/UIntDescriptor.h b/GUI/Model/Descriptor/UIntDescriptor.h index f5521bbb001..91480877693 100644 --- a/GUI/Model/Descriptor/UIntDescriptor.h +++ b/GUI/Model/Descriptor/UIntDescriptor.h @@ -23,10 +23,6 @@ class SessionItem; -using std::function; -using std::variant; - - //! Describes properties of a uint value which are necessary to allow GUI representation, editing //! the value, undo/redo, unit conversion. //! @@ -39,25 +35,25 @@ public: //! Operates on a session item. The settings (like limits) are taken from the session //! item. //! Only for easier migration. Should be removed after SessionItem refactoring. - UIntDescriptor(SessionItem* item, const variant<QString, Unit>& unit); + UIntDescriptor(SessionItem* item, const std::variant<QString, Unit>& unit); //! Operates on a session item. The settings (like limits) are taken from the session //! item. //! Only for easier migration. Should be removed after SessionItem refactoring. - UIntDescriptor(const QString& label, SessionItem* item, const variant<QString, Unit>& unit); + UIntDescriptor(const QString& label, SessionItem* item, const std::variant<QString, Unit>& unit); - UIntDescriptor(const QString& label, const uint* var, const variant<QString, Unit>& unit); + UIntDescriptor(const QString& label, const uint* var, const std::variant<QString, Unit>& unit); private: //! Operates on any kind of storage (e.g. session items), by using setter/getter methods UIntDescriptor(QString label, QString tooltip, const RealLimits& limits, - function<void(uint)> setter, function<uint()> getter, - const variant<QString, Unit>& unit); + std::function<void(uint)> setter, std::function<uint()> getter, + const std::variant<QString, Unit>& unit); //! Operates on any kind of storage (e.g. session items), by using setter/getter methods //! limits is set to nonnegative - UIntDescriptor(const QString& label, const QString& tooltip, function<void(uint)> setter, - function<uint()> getter, const variant<QString, Unit>& unit); + UIntDescriptor(const QString& label, const QString& tooltip, std::function<void(uint)> setter, + std::function<uint()> getter, const std::variant<QString, Unit>& unit); public: //! Return the current value of the handled parameter. @@ -66,10 +62,10 @@ public: QString label; //!< A label text (short, no trailing colon) QString tooltip; //!< Tooltip text RealLimits limits; //!< Limits of the value. - function<void(uint)> set = nullptr; //!< function to set the value - function<uint()> get = nullptr; //!< function to get the current value - variant<QString, Unit> unit = Unit::unitless; //!< Unit of the value (internal unit only!) - function<QString()> path = nullptr; //!< Path describing this value. Used e.g. for undo/redo + std::function<void(uint)> set = nullptr; //!< function to set the value + std::function<uint()> get = nullptr; //!< function to get the current value + std::variant<QString, Unit> unit = Unit::unitless; //!< Unit of the value (internal unit only!) + std::function<QString()> path = nullptr; //!< Path describing this value. Used e.g. for undo/redo }; #endif // BORNAGAIN_GUI_MODEL_DESCRIPTOR_UINTDESCRIPTOR_H -- GitLab From 76cf388202bc37121543051b2c6f5aad6ecc9b90 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Fri, 29 Jul 2022 15:29:48 +0200 Subject: [PATCH 30/32] UIntProperty: mv using std::variant to cpp --- GUI/Model/Descriptor/UIntProperty.cpp | 2 ++ GUI/Model/Descriptor/UIntProperty.h | 10 ++-------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/GUI/Model/Descriptor/UIntProperty.cpp b/GUI/Model/Descriptor/UIntProperty.cpp index 4a64ce1b69d..c4a851a5f04 100644 --- a/GUI/Model/Descriptor/UIntProperty.cpp +++ b/GUI/Model/Descriptor/UIntProperty.cpp @@ -17,6 +17,8 @@ #include "GUI/Support/XML/UtilXML.h" #include <QUuid> +using std::variant; + void UIntProperty::init(const QString& label, const QString& tooltip, uint value, const variant<QString, Unit>& unit, const QString& persistentTag) { diff --git a/GUI/Model/Descriptor/UIntProperty.h b/GUI/Model/Descriptor/UIntProperty.h index a6bce7d06bf..924c4329556 100644 --- a/GUI/Model/Descriptor/UIntProperty.h +++ b/GUI/Model/Descriptor/UIntProperty.h @@ -17,17 +17,11 @@ #include "Fit/Param/RealLimits.h" #include "GUI/Model/Descriptor/UIntDescriptor.h" -#include "GUI/Support/Type/Unit.h" -#include <QString> -#include <functional> #include <variant> class Streamer; class SessionItem; -using std::function; -using std::variant; - //! Class for representing a uint value, its attributes and its accessors. //! //! For a complete description please refer to the documentation of DoubleProperty. Everything said @@ -39,9 +33,9 @@ using std::variant; class UIntProperty { public: void init(const QString& label, const QString& tooltip, uint value, - const variant<QString, Unit>& unit, const QString& persistentTag); + const std::variant<QString, Unit>& unit, const QString& persistentTag); void init(const QString& label, const QString& tooltip, uint value, - const variant<QString, Unit>& unit, const RealLimits& limits, + const std::variant<QString, Unit>& unit, const RealLimits& limits, const QString& persistentTag); UIntDescriptor descriptor() const { return m_descriptor; } -- GitLab From 59167c0dd27c822a22b72487ae35e3d7fdf302c1 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Fri, 29 Jul 2022 15:40:31 +0200 Subject: [PATCH 31/32] Descriptors & Properties: mv using std::variant & std::function to cpp --- GUI/Model/Descriptor/AxisProperty.cpp | 2 ++ GUI/Model/Descriptor/AxisProperty.h | 6 ++-- GUI/Model/Descriptor/DistributionItems.cpp | 2 ++ GUI/Model/Descriptor/DistributionItems.h | 16 ++++----- GUI/Model/Descriptor/DoubleDescriptor.cpp | 3 ++ GUI/Model/Descriptor/DoubleDescriptor.h | 29 ++++++++-------- GUI/Model/Descriptor/DoubleProperty.cpp | 2 ++ GUI/Model/Descriptor/DoubleProperty.h | 6 ++-- GUI/Model/Descriptor/VectorDescriptor.h | 8 ++--- GUI/Model/Descriptor/VectorProperty.cpp | 2 ++ GUI/Model/Descriptor/VectorProperty.h | 2 +- GUI/Model/Model/ParameterTreeUtils.cpp | 2 ++ GUI/View/Mask/MaskEditorPropertyPanel.cpp | 2 ++ GUI/View/Mask/MaskEditorPropertyPanel.h | 4 +-- GUI/View/SampleDesigner/FormLayouter.cpp | 2 ++ GUI/View/SampleDesigner/FormLayouter.h | 4 +-- GUI/View/SampleDesigner/LayerEditorUtils.cpp | 2 ++ GUI/View/SampleDesigner/LayerEditorUtils.h | 4 +-- .../SampleDesigner/SelectionContainerForm.h | 2 +- GUI/View/Tool/WidgetUtils.cpp | 33 ++++++++++--------- 20 files changed, 76 insertions(+), 57 deletions(-) diff --git a/GUI/Model/Descriptor/AxisProperty.cpp b/GUI/Model/Descriptor/AxisProperty.cpp index b98052fae88..78e8aa34195 100644 --- a/GUI/Model/Descriptor/AxisProperty.cpp +++ b/GUI/Model/Descriptor/AxisProperty.cpp @@ -16,6 +16,8 @@ #include "Base/Util/Assert.h" #include "GUI/Support/XML/Serialize.h" +using std::variant; + void AxisProperty::initNbins(const QString& label, const QString& tooltip, uint n, const variant<QString, Unit>& unit) { diff --git a/GUI/Model/Descriptor/AxisProperty.h b/GUI/Model/Descriptor/AxisProperty.h index 26dc4131d62..d69bc2b21b0 100644 --- a/GUI/Model/Descriptor/AxisProperty.h +++ b/GUI/Model/Descriptor/AxisProperty.h @@ -42,13 +42,13 @@ public: DOUBLE_PROPERTY(max, Max); void initNbins(const QString& label, const QString& tooltip, uint n = 100, - const variant<QString, Unit>& unit = "nbins"); + const std::variant<QString, Unit>& unit = "nbins"); void initMin(const QString& label, const QString& tooltip, double value, - const variant<QString, Unit>& unit, + const std::variant<QString, Unit>& unit, const RealLimits& limits = RealLimits::nonnegative(), uint decimals = 3); void initMax(const QString& label, const QString& tooltip, double value, - const variant<QString, Unit>& unit, + const std::variant<QString, Unit>& unit, const RealLimits& limits = RealLimits::nonnegative(), uint decimals = 3); void serialize(Streamer& s); diff --git a/GUI/Model/Descriptor/DistributionItems.cpp b/GUI/Model/Descriptor/DistributionItems.cpp index ac63d8104ee..2d016b02e14 100644 --- a/GUI/Model/Descriptor/DistributionItems.cpp +++ b/GUI/Model/Descriptor/DistributionItems.cpp @@ -20,6 +20,8 @@ #include "Param/Distrib/RangedDistributions.h" #include <cmath> +using std::variant; + DistributionItem::DistributionItem() { m_numberOfSamples.init("Number of samples", "", 5, "", RealLimits::lowerLimited(1.0), diff --git a/GUI/Model/Descriptor/DistributionItems.h b/GUI/Model/Descriptor/DistributionItems.h index b4399da1ee7..2c6c98d52ae 100644 --- a/GUI/Model/Descriptor/DistributionItems.h +++ b/GUI/Model/Descriptor/DistributionItems.h @@ -43,7 +43,7 @@ public: RealLimits limits() const; //! Set the unit of the distributed value - virtual void setUnit(const variant<QString, Unit>& unit) = 0; + virtual void setUnit(const std::variant<QString, Unit>& unit) = 0; UINT_PROPERTY(numberOfSamples, NumberOfSamples); DOUBLE_PROPERTY(sigmaFactor, SigmaFactor); @@ -70,7 +70,7 @@ private: class SymmetricResolutionItem : public DistributionItem { public: SymmetricResolutionItem(double mean, int decimals = 3, const QString& meanLabel = "Mean"); - void setUnit(const variant<QString, Unit>& unit) override; + void setUnit(const std::variant<QString, Unit>& unit) override; void setLimits(const RealLimits& limits) override; DOUBLE_PROPERTY(mean, Mean); @@ -96,7 +96,7 @@ class DistributionGateItem : public DistributionItem { public: DistributionGateItem(); - void setUnit(const variant<QString, Unit>& unit) override; + void setUnit(const std::variant<QString, Unit>& unit) override; std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override; void initDistribution(double value) override; @@ -111,7 +111,7 @@ public: class DistributionLorentzItem : public SymmetricResolutionItem { public: DistributionLorentzItem(); - void setUnit(const variant<QString, Unit>& unit) override; + void setUnit(const std::variant<QString, Unit>& unit) override; std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override; std::unique_ptr<IRangedDistribution> createIRangedDistribution(double scale) const override; @@ -127,7 +127,7 @@ public: class DistributionGaussianItem : public SymmetricResolutionItem { public: DistributionGaussianItem(); - void setUnit(const variant<QString, Unit>& unit) override; + void setUnit(const std::variant<QString, Unit>& unit) override; std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override; std::unique_ptr<IRangedDistribution> createIRangedDistribution(double scale) const override; @@ -143,7 +143,7 @@ public: class DistributionLogNormalItem : public DistributionItem { public: DistributionLogNormalItem(); - void setUnit(const variant<QString, Unit>& unit) override; + void setUnit(const std::variant<QString, Unit>& unit) override; std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override; void initDistribution(double value) override; @@ -157,7 +157,7 @@ public: class DistributionCosineItem : public SymmetricResolutionItem { public: DistributionCosineItem(); - void setUnit(const variant<QString, Unit>& unit) override; + void setUnit(const std::variant<QString, Unit>& unit) override; std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override; std::unique_ptr<IRangedDistribution> createIRangedDistribution(double scale) const override; @@ -172,7 +172,7 @@ public: class DistributionTrapezoidItem : public DistributionItem { public: DistributionTrapezoidItem(); - void setUnit(const variant<QString, Unit>& unit) override; + void setUnit(const std::variant<QString, Unit>& unit) override; std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override; void initDistribution(double value) override; diff --git a/GUI/Model/Descriptor/DoubleDescriptor.cpp b/GUI/Model/Descriptor/DoubleDescriptor.cpp index 7c519d261bc..0b46d6bbe08 100644 --- a/GUI/Model/Descriptor/DoubleDescriptor.cpp +++ b/GUI/Model/Descriptor/DoubleDescriptor.cpp @@ -18,6 +18,9 @@ #include "GUI/Util/Path.h" #include <utility> +using std::function; +using std::variant; + DoubleDescriptor::DoubleDescriptor(QString label_, QString tooltip_, int decimals_, const RealLimits& limits_, function<void(double)> setter, function<double()> getter, const variant<QString, Unit>& unit_) diff --git a/GUI/Model/Descriptor/DoubleDescriptor.h b/GUI/Model/Descriptor/DoubleDescriptor.h index b7740b15ce4..4199999f5d2 100644 --- a/GUI/Model/Descriptor/DoubleDescriptor.h +++ b/GUI/Model/Descriptor/DoubleDescriptor.h @@ -24,9 +24,6 @@ class SessionItem; -using std::function; -using std::variant; - //! Describes properties of a double value which are necessary to allow GUI representation, editing //! the value, undo/redo, unit conversion. //! @@ -51,35 +48,35 @@ private: // private as long as path initialization is not included in params (to // SessionItem migration) //! Operates on a double value (e.g a member variable). DoubleDescriptor(const QString& label, const QString& tooltip, int decimals, - const RealLimits& limits, double* var, const variant<QString, Unit>& unit); + const RealLimits& limits, double* var, const std::variant<QString, Unit>& unit); //! Operates on a double value (e.g a member variable). //! Decimals is set to 3, limits is set to nonnegative DoubleDescriptor(const QString& label, const QString& tooltip, double* var, - const variant<QString, Unit>& unit); + const std::variant<QString, Unit>& unit); public: //! Operates on any kind of storage (e.g. session items), by using setter/getter methods //! decimals is set to 3, limits is set to nonnegative - DoubleDescriptor(const QString& label, const QString& tooltip, function<void(double)> setter, - function<double()> getter, const variant<QString, Unit>& unit); + DoubleDescriptor(const QString& label, const QString& tooltip, std::function<void(double)> setter, + std::function<double()> getter, const std::variant<QString, Unit>& unit); //! Operates on any kind of storage (e.g. session items), by using setter/getter methods DoubleDescriptor(QString label, QString tooltip, int decimals, const RealLimits& limits, - function<void(double)> setter, function<double()> getter, - const variant<QString, Unit>& unit); + std::function<void(double)> setter, std::function<double()> getter, + const std::variant<QString, Unit>& unit); - DoubleDescriptor(const QString& label, const double* var, const variant<QString, Unit>& unit); + DoubleDescriptor(const QString& label, const double* var, const std::variant<QString, Unit>& unit); //! Operates on a session item. The settings (like decimals, limits) are taken from the session //! item. //! Only for easier migration. Should be removed after SessionItem refactoring. - DoubleDescriptor(const QString& label, SessionItem* item, const variant<QString, Unit>& unit); + DoubleDescriptor(const QString& label, SessionItem* item, const std::variant<QString, Unit>& unit); //! Operates on a session item. The settings (like decimals, limits) are taken from the session //! item. //! Only for easier migration. Should be removed after SessionItem refactoring. - DoubleDescriptor(SessionItem* item, const variant<QString, Unit>& unit); + DoubleDescriptor(SessionItem* item, const std::variant<QString, Unit>& unit); DoubleDescriptor() = default; @@ -93,10 +90,10 @@ public: QString tooltip; //!< Tooltip text int decimals = 0; //!< numbers of decimals to be shown in an edit control RealLimits limits; //!< Limits of the value. - function<void(double)> set = nullptr; //!< function to set the value - function<double()> get = nullptr; //!< function to get the current value - variant<QString, Unit> unit = Unit::unitless; //!< Unit of the value (internal unit only!) - function<QString()> path = nullptr; //!< Path describing this value. Used e.g. for undo/redo + std::function<void(double)> set = nullptr; //!< function to set the value + std::function<double()> get = nullptr; //!< function to get the current value + std::variant<QString, Unit> unit = Unit::unitless; //!< Unit of the value (internal unit only!) + std::function<QString()> path = nullptr; //!< Path describing this value. Used e.g. for undo/redo }; using DoubleDescriptors = QList<DoubleDescriptor>; diff --git a/GUI/Model/Descriptor/DoubleProperty.cpp b/GUI/Model/Descriptor/DoubleProperty.cpp index 928b7083f68..d137b24d858 100644 --- a/GUI/Model/Descriptor/DoubleProperty.cpp +++ b/GUI/Model/Descriptor/DoubleProperty.cpp @@ -17,6 +17,8 @@ #include "GUI/Support/XML/UtilXML.h" #include <QUuid> +using std::variant; + void DoubleProperty::init(const QString& label, const QString& tooltip, double value, const variant<QString, Unit>& unit, const QString& persistentTag) { diff --git a/GUI/Model/Descriptor/DoubleProperty.h b/GUI/Model/Descriptor/DoubleProperty.h index 4f4dce1330d..3581fd838c6 100644 --- a/GUI/Model/Descriptor/DoubleProperty.h +++ b/GUI/Model/Descriptor/DoubleProperty.h @@ -44,9 +44,9 @@ class Streamer; class DoubleProperty { public: void init(const QString& label, const QString& tooltip, double value, - const variant<QString, Unit>& unit, const QString& persistentTag); + const std::variant<QString, Unit>& unit, const QString& persistentTag); void init(const QString& label, const QString& tooltip, double value, - const variant<QString, Unit>& unit, int decimals, const RealLimits& limits, + const std::variant<QString, Unit>& unit, int decimals, const RealLimits& limits, const QString& persistentTag); //! Return a descriptor (information provider) for this double property. @@ -83,7 +83,7 @@ public: void setTooltip(const QString& tooltip); //! Set the unit - void setUnit(const variant<QString, Unit>& unit); + void setUnit(const std::variant<QString, Unit>& unit); //! Set the limits void setLimits(const RealLimits& limits); diff --git a/GUI/Model/Descriptor/VectorDescriptor.h b/GUI/Model/Descriptor/VectorDescriptor.h index 884fb506b62..f2a2930577f 100644 --- a/GUI/Model/Descriptor/VectorDescriptor.h +++ b/GUI/Model/Descriptor/VectorDescriptor.h @@ -33,7 +33,7 @@ public: VectorDescriptor() = default; VectorDescriptor(const QString& label, const QString& tooltip, double* xVar, double* yVar, - double* zVar, const variant<QString, Unit>& unit) + double* zVar, const std::variant<QString, Unit>& unit) : label(label) , tooltip(tooltip) , x("X", xVar, unit) @@ -52,7 +52,7 @@ public: } VectorDescriptor(const QString& label, const QString& tooltip, - const variant<QString, Unit>& unit) + const std::variant<QString, Unit>& unit) : label(label) , tooltip(tooltip) { @@ -74,7 +74,7 @@ public: } void init(const QString& _label, const QString& _tooltip, const R3* vec, - const variant<QString, Unit>& _unit) + const std::variant<QString, Unit>& _unit) { label = _label; tooltip = _tooltip; @@ -110,7 +110,7 @@ public: DoubleDescriptor x; DoubleDescriptor y; DoubleDescriptor z; - function<QString()> uid; //!< unique id describing this value. Used e.g. for undo/redo + std::function<QString()> uid; //!< unique id describing this value. Used e.g. for undo/redo }; #endif // BORNAGAIN_GUI_MODEL_DESCRIPTOR_VECTORDESCRIPTOR_H diff --git a/GUI/Model/Descriptor/VectorProperty.cpp b/GUI/Model/Descriptor/VectorProperty.cpp index 58f16b960e4..7aa4aaf0e3d 100644 --- a/GUI/Model/Descriptor/VectorProperty.cpp +++ b/GUI/Model/Descriptor/VectorProperty.cpp @@ -17,6 +17,8 @@ #include "GUI/Support/XML/UtilXML.h" #include <QUuid> +using std::variant; + void VectorProperty::init(const QString& label, const QString& tooltip, const variant<QString, Unit>& unit, const QString& persistentTag) { diff --git a/GUI/Model/Descriptor/VectorProperty.h b/GUI/Model/Descriptor/VectorProperty.h index 3f4c660374e..120ff6747d4 100644 --- a/GUI/Model/Descriptor/VectorProperty.h +++ b/GUI/Model/Descriptor/VectorProperty.h @@ -32,7 +32,7 @@ class Streamer; //! class VectorProperty { public: - void init(const QString& label, const QString& tooltip, const variant<QString, Unit>& unit, + void init(const QString& label, const QString& tooltip, const std::variant<QString, Unit>& unit, const QString& persistentTag); VectorDescriptor descriptor() const { return m_descriptor; } diff --git a/GUI/Model/Model/ParameterTreeUtils.cpp b/GUI/Model/Model/ParameterTreeUtils.cpp index da6a72c72c8..29a5849a203 100644 --- a/GUI/Model/Model/ParameterTreeUtils.cpp +++ b/GUI/Model/Model/ParameterTreeUtils.cpp @@ -40,6 +40,8 @@ #include "GUI/Model/Sample/ParticleItem.h" #include "GUI/Model/Sample/ParticleLayoutItem.h" +using std::variant; + namespace { QString labelWithUnit(const QString& label, variant<QString, Unit> unit) diff --git a/GUI/View/Mask/MaskEditorPropertyPanel.cpp b/GUI/View/Mask/MaskEditorPropertyPanel.cpp index 2ebc14f93b3..a4a1112c77e 100644 --- a/GUI/View/Mask/MaskEditorPropertyPanel.cpp +++ b/GUI/View/Mask/MaskEditorPropertyPanel.cpp @@ -27,6 +27,8 @@ #include <QLineEdit> #include <QListView> +using std::function; + MaskEditorPropertyPanel::MaskEditorPropertyPanel(QWidget* parent) : DataAccessWidget(parent) , m_listView(new QListView) diff --git a/GUI/View/Mask/MaskEditorPropertyPanel.h b/GUI/View/Mask/MaskEditorPropertyPanel.h index 08cbcd34e58..d88c977bc83 100644 --- a/GUI/View/Mask/MaskEditorPropertyPanel.h +++ b/GUI/View/Mask/MaskEditorPropertyPanel.h @@ -64,8 +64,8 @@ private: void addMaskSpinBox(DoubleDescriptor d); //! Add a checkbox to edit a mask's boolean value - void addMaskCheckBox(const QString& title, function<bool()> getter, - function<void(bool)> setter); + void addMaskCheckBox(const QString& title, std::function<bool()> getter, + std::function<void(bool)> setter); //! Return the mask item for the given index. nullptr if index invalid or not pointing to a mask //! item. diff --git a/GUI/View/SampleDesigner/FormLayouter.cpp b/GUI/View/SampleDesigner/FormLayouter.cpp index 32875725a36..67ef7bd10d2 100644 --- a/GUI/View/SampleDesigner/FormLayouter.cpp +++ b/GUI/View/SampleDesigner/FormLayouter.cpp @@ -25,6 +25,8 @@ #include <QLabel> #include <QPushButton> +using std::function; + namespace { QWidget* createSpinBox(QWidget* parentWidget, const UIntDescriptor& d, SampleEditorController* ec) diff --git a/GUI/View/SampleDesigner/FormLayouter.h b/GUI/View/SampleDesigner/FormLayouter.h index 4061b9c2192..e603ce7447b 100644 --- a/GUI/View/SampleDesigner/FormLayouter.h +++ b/GUI/View/SampleDesigner/FormLayouter.h @@ -103,7 +103,7 @@ public: //! Same as above, but the called slot in case of a value change has to be overhanded. //! Use this only if the standard (calling SampleEditorController::setDouble()) is not //! sufficient. - int addValue(const DoubleDescriptor& d, function<void(double)> onValueChange); + int addValue(const DoubleDescriptor& d, std::function<void(double)> onValueChange); //! Adds a row with a bold printed label and a QSpinBox. //! @@ -120,7 +120,7 @@ public: //! Inserts a row with a bold printed label and a DoubleSpinBox. //! //! Same functionality as addValue(), please read there. - void insertValue(int row, const DoubleDescriptor& d, function<void(double)> onValueChange); + void insertValue(int row, const DoubleDescriptor& d, std::function<void(double)> onValueChange); //! Adds a row with a bold printed label and a set of DoubleDescriptors. //! diff --git a/GUI/View/SampleDesigner/LayerEditorUtils.cpp b/GUI/View/SampleDesigner/LayerEditorUtils.cpp index 4bacabe3aee..4eea3d89d99 100644 --- a/GUI/View/SampleDesigner/LayerEditorUtils.cpp +++ b/GUI/View/SampleDesigner/LayerEditorUtils.cpp @@ -32,6 +32,8 @@ #include <QMenu> #include <QPushButton> +using std::function; + namespace { void updateLabelUnit(QLabel* label, const QString& unit) diff --git a/GUI/View/SampleDesigner/LayerEditorUtils.h b/GUI/View/SampleDesigner/LayerEditorUtils.h index 5e7f21225fd..8e00e1276bc 100644 --- a/GUI/View/SampleDesigner/LayerEditorUtils.h +++ b/GUI/View/SampleDesigner/LayerEditorUtils.h @@ -53,7 +53,7 @@ void addMultiPropertyToGrid(QGridLayout* m_gridLayout, int firstCol, //! Create DoubleSpinBoxes for the DoubeDescriptors and connect them to the given setNewValue() void addMultiPropertyToGrid(QGridLayout* m_gridLayout, int firstCol, const DoubleDescriptors& valueDescriptors, - function<void(double, DoubleDescriptor)> setNewValue, bool vertically, + std::function<void(double, DoubleDescriptor)> setNewValue, bool vertically, bool addSpacer); void addMultiPropertyToGrid(QGridLayout* m_gridLayout, int firstCol, @@ -67,7 +67,7 @@ void addVectorToGrid(QGridLayout* m_gridLayout, int firstCol, const VectorDescri //! Create DoubleSpinBoxes for the DoubeDescriptors and connect them to the given setNewValue() void addVectorToGrid(QGridLayout* m_gridLayout, int firstCol, const VectorDescriptor& v, - function<void(double, DoubleDescriptor)> setNewValue, bool vertically, + std::function<void(double, DoubleDescriptor)> setNewValue, bool vertically, bool addSpacer); diff --git a/GUI/View/SampleDesigner/SelectionContainerForm.h b/GUI/View/SampleDesigner/SelectionContainerForm.h index 37159d92230..482c36dd271 100644 --- a/GUI/View/SampleDesigner/SelectionContainerForm.h +++ b/GUI/View/SampleDesigner/SelectionContainerForm.h @@ -121,7 +121,7 @@ public: } private: - function<DoubleDescriptors()> currentValues = nullptr; + std::function<DoubleDescriptors()> currentValues = nullptr; }; #endif // BORNAGAIN_GUI_VIEW_SAMPLEDESIGNER_SELECTIONCONTAINERFORM_H diff --git a/GUI/View/Tool/WidgetUtils.cpp b/GUI/View/Tool/WidgetUtils.cpp index 87081b2c1c0..6f4533b9594 100644 --- a/GUI/View/Tool/WidgetUtils.cpp +++ b/GUI/View/Tool/WidgetUtils.cpp @@ -24,9 +24,12 @@ #include <QLineEdit> #include <QSpinBox> +using std::function; +using std::variant; + SafeSpinBox* GUI::Util::createSpinBox(const UIntDescriptor& d, QList<function<void()>>* updaters, - std::function<void(uint)> slot, + function<void(uint)> slot, bool easyScrollable) { auto* spinBox = new SafeSpinBox(easyScrollable); @@ -57,8 +60,8 @@ SafeSpinBox* GUI::Util::createSpinBox(const UIntDescriptor& d, } SafeSpinBox* GUI::Util::createSpinBoxScroll(const UIntDescriptor& d, - QList<std::function<void()>>* updaters, - std::function<void(uint)> slot) + QList<function<void()>>* updaters, + function<void(uint)> slot) { return GUI::Util::createSpinBox(d, updaters, slot, true); } @@ -73,7 +76,7 @@ SafeSpinBox* GUI::Util::createSpinBoxRow(QFormLayout* parentLayout, DoubleSpinBox* GUI::Util::createDoubleSpinBoxRow(QFormLayout* parentLayout, const DoubleDescriptor& d, - std::function<void(double)> slot) + function<void(double)> slot) { auto* sb = new DoubleSpinBox(d); parentLayout->addRow(labelWithUnit(d.label, d.unit) + ":", sb); @@ -102,7 +105,7 @@ QString GUI::Util::labelWithUnit(const DoubleDescriptor& d) ScientificSpinBox* GUI::Util::createScientificSpinBox(QFormLayout* parentLayout, const DoubleDescriptor& d, - std::function<void(double)> slot) + function<void(double)> slot) { auto* spinBox = new ScientificSpinBox(parentLayout->parentWidget()); spinBox->setFocusPolicy(Qt::StrongFocus); @@ -119,9 +122,9 @@ ScientificSpinBox* GUI::Util::createScientificSpinBox(QFormLayout* parentLayout, } QCheckBox* GUI::Util::createCheckBox(const QString& title, - std::function<bool()> getter, - std::function<void(bool)> setter, - QList<std::function<void()>>* updaters) + function<bool()> getter, + function<void(bool)> setter, + QList<function<void()>>* updaters) { QCheckBox* checkBox = new QCheckBox(title); checkBox->setChecked(getter()); @@ -137,9 +140,9 @@ QCheckBox* GUI::Util::createCheckBox(const QString& title, return checkBox; } -QLineEdit* GUI::Util::createTextEdit(std::function<QString()> getter, - std::function<void(QString)> setter, - QList<std::function<void()>>* updaters) +QLineEdit* GUI::Util::createTextEdit(function<QString()> getter, + function<void(QString)> setter, + QList<function<void()>>* updaters) { QLineEdit* edit = new QLineEdit; edit->setText(getter()); @@ -156,8 +159,8 @@ QLineEdit* GUI::Util::createTextEdit(std::function<QString()> getter, } DoubleSpinBox* GUI::Util::createDoubleSpinbox(DoubleDescriptor d, - QList<std::function<void()>>* updaters, - std::function<void(double)> slot, + QList<function<void()>>* updaters, + function<void(double)> slot, bool easyScrollable) { DoubleSpinBox* spinBox = new DoubleSpinBox(d, easyScrollable); @@ -177,8 +180,8 @@ DoubleSpinBox* GUI::Util::createDoubleSpinbox(DoubleDescriptor d, } DoubleSpinBox* GUI::Util::createDoubleSpinboxScroll(DoubleDescriptor d, - QList<std::function<void()>>* updaters, - std::function<void(double)> slot) + QList<function<void()>>* updaters, + function<void(double)> slot) { return GUI::Util::createDoubleSpinbox(d, updaters, slot, true); } -- GitLab From 89991b8cd48089ca7e4c6b29f7d4723a690a06c8 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Fri, 29 Jul 2022 16:03:27 +0200 Subject: [PATCH 32/32] clang-format --- GUI/Model/Descriptor/AxisProperty.h | 5 +++- GUI/Model/Descriptor/DoubleDescriptor.h | 29 +++++++++++++--------- GUI/Model/Descriptor/DoubleProperty.h | 10 ++++++-- GUI/Model/Descriptor/SelectionDescriptor.h | 6 ++--- GUI/Model/Descriptor/UIntDescriptor.cpp | 2 +- GUI/Model/Descriptor/UIntDescriptor.h | 12 +++++---- GUI/Model/Descriptor/UIntProperty.h | 20 ++++++++++++--- GUI/Model/Descriptor/VectorProperty.h | 10 ++++++-- GUI/View/SampleDesigner/LayerEditorUtils.h | 4 +-- 9 files changed, 66 insertions(+), 32 deletions(-) diff --git a/GUI/Model/Descriptor/AxisProperty.h b/GUI/Model/Descriptor/AxisProperty.h index d69bc2b21b0..6ace7b48b1f 100644 --- a/GUI/Model/Descriptor/AxisProperty.h +++ b/GUI/Model/Descriptor/AxisProperty.h @@ -65,6 +65,9 @@ protected: AxisProperty m_##nameLower; \ \ public: \ - AxisProperty& nameLower() const { return *const_cast<AxisProperty*>(&m_##nameLower); } + AxisProperty& nameLower() const \ + { \ + return *const_cast<AxisProperty*>(&m_##nameLower); \ + } #endif // BORNAGAIN_GUI_MODEL_DESCRIPTOR_AXISPROPERTY_H diff --git a/GUI/Model/Descriptor/DoubleDescriptor.h b/GUI/Model/Descriptor/DoubleDescriptor.h index 4199999f5d2..b4a544596fa 100644 --- a/GUI/Model/Descriptor/DoubleDescriptor.h +++ b/GUI/Model/Descriptor/DoubleDescriptor.h @@ -48,7 +48,8 @@ private: // private as long as path initialization is not included in params (to // SessionItem migration) //! Operates on a double value (e.g a member variable). DoubleDescriptor(const QString& label, const QString& tooltip, int decimals, - const RealLimits& limits, double* var, const std::variant<QString, Unit>& unit); + const RealLimits& limits, double* var, + const std::variant<QString, Unit>& unit); //! Operates on a double value (e.g a member variable). //! Decimals is set to 3, limits is set to nonnegative @@ -58,20 +59,23 @@ private: // private as long as path initialization is not included in params (to public: //! Operates on any kind of storage (e.g. session items), by using setter/getter methods //! decimals is set to 3, limits is set to nonnegative - DoubleDescriptor(const QString& label, const QString& tooltip, std::function<void(double)> setter, - std::function<double()> getter, const std::variant<QString, Unit>& unit); + DoubleDescriptor(const QString& label, const QString& tooltip, + std::function<void(double)> setter, std::function<double()> getter, + const std::variant<QString, Unit>& unit); //! Operates on any kind of storage (e.g. session items), by using setter/getter methods DoubleDescriptor(QString label, QString tooltip, int decimals, const RealLimits& limits, std::function<void(double)> setter, std::function<double()> getter, const std::variant<QString, Unit>& unit); - DoubleDescriptor(const QString& label, const double* var, const std::variant<QString, Unit>& unit); + DoubleDescriptor(const QString& label, const double* var, + const std::variant<QString, Unit>& unit); //! Operates on a session item. The settings (like decimals, limits) are taken from the session //! item. //! Only for easier migration. Should be removed after SessionItem refactoring. - DoubleDescriptor(const QString& label, SessionItem* item, const std::variant<QString, Unit>& unit); + DoubleDescriptor(const QString& label, SessionItem* item, + const std::variant<QString, Unit>& unit); //! Operates on a session item. The settings (like decimals, limits) are taken from the session //! item. @@ -86,14 +90,15 @@ public: //! Return the current value of the handled parameter. operator double() const; - QString label; //!< A label text (short, no trailing colon) - QString tooltip; //!< Tooltip text - int decimals = 0; //!< numbers of decimals to be shown in an edit control - RealLimits limits; //!< Limits of the value. - std::function<void(double)> set = nullptr; //!< function to set the value - std::function<double()> get = nullptr; //!< function to get the current value + QString label; //!< A label text (short, no trailing colon) + QString tooltip; //!< Tooltip text + int decimals = 0; //!< numbers of decimals to be shown in an edit control + RealLimits limits; //!< Limits of the value. + std::function<void(double)> set = nullptr; //!< function to set the value + std::function<double()> get = nullptr; //!< function to get the current value std::variant<QString, Unit> unit = Unit::unitless; //!< Unit of the value (internal unit only!) - std::function<QString()> path = nullptr; //!< Path describing this value. Used e.g. for undo/redo + std::function<QString()> path = + nullptr; //!< Path describing this value. Used e.g. for undo/redo }; using DoubleDescriptors = QList<DoubleDescriptor>; diff --git a/GUI/Model/Descriptor/DoubleProperty.h b/GUI/Model/Descriptor/DoubleProperty.h index 3581fd838c6..472a98ddc2f 100644 --- a/GUI/Model/Descriptor/DoubleProperty.h +++ b/GUI/Model/Descriptor/DoubleProperty.h @@ -109,8 +109,14 @@ protected: DoubleProperty m_##nameLower; \ \ public: \ - DoubleDescriptor nameLower() const { return m_##nameLower; } \ - void set##nameUpper(double v) { m_##nameLower.set(v); } + DoubleDescriptor nameLower() const \ + { \ + return m_##nameLower; \ + } \ + void set##nameUpper(double v) \ + { \ + m_##nameLower.set(v); \ + } #endif // BORNAGAIN_GUI_MODEL_DESCRIPTOR_DOUBLEPROPERTY_H diff --git a/GUI/Model/Descriptor/SelectionDescriptor.h b/GUI/Model/Descriptor/SelectionDescriptor.h index 1cd99633fd2..a89a9abd222 100644 --- a/GUI/Model/Descriptor/SelectionDescriptor.h +++ b/GUI/Model/Descriptor/SelectionDescriptor.h @@ -103,9 +103,9 @@ public: int currentIndex() const override { return currentIndexGetter(); } - QString label; //!< A label text (short, no trailing colon) - QString tooltip; //!< Tooltip text - QStringList options; //!< List of options, usually presented as combo entries + QString label; //!< A label text (short, no trailing colon) + QString tooltip; //!< Tooltip text + QStringList options; //!< List of options, usually presented as combo entries std::function<void(int)> currentIndexSetter; //!< Function to set currently selected option std::function<int()> currentIndexGetter; //!< Function to get currently selected option std::function<T()> currentItem; //!< Function to get currently selected item diff --git a/GUI/Model/Descriptor/UIntDescriptor.cpp b/GUI/Model/Descriptor/UIntDescriptor.cpp index 688c083afd7..8e402d1dbe9 100644 --- a/GUI/Model/Descriptor/UIntDescriptor.cpp +++ b/GUI/Model/Descriptor/UIntDescriptor.cpp @@ -28,7 +28,7 @@ UIntDescriptor::UIntDescriptor(const QString& label, SessionItem* item, { } -UIntDescriptor::UIntDescriptor(SessionItem* item, const variant<QString, Unit> &unit) +UIntDescriptor::UIntDescriptor(SessionItem* item, const variant<QString, Unit>& unit) : UIntDescriptor(item->displayName(), item, unit) { } diff --git a/GUI/Model/Descriptor/UIntDescriptor.h b/GUI/Model/Descriptor/UIntDescriptor.h index 91480877693..19c0d3e2a55 100644 --- a/GUI/Model/Descriptor/UIntDescriptor.h +++ b/GUI/Model/Descriptor/UIntDescriptor.h @@ -40,7 +40,8 @@ public: //! Operates on a session item. The settings (like limits) are taken from the session //! item. //! Only for easier migration. Should be removed after SessionItem refactoring. - UIntDescriptor(const QString& label, SessionItem* item, const std::variant<QString, Unit>& unit); + UIntDescriptor(const QString& label, SessionItem* item, + const std::variant<QString, Unit>& unit); UIntDescriptor(const QString& label, const uint* var, const std::variant<QString, Unit>& unit); @@ -59,13 +60,14 @@ public: //! Return the current value of the handled parameter. operator uint() const; - QString label; //!< A label text (short, no trailing colon) - QString tooltip; //!< Tooltip text - RealLimits limits; //!< Limits of the value. + QString label; //!< A label text (short, no trailing colon) + QString tooltip; //!< Tooltip text + RealLimits limits; //!< Limits of the value. std::function<void(uint)> set = nullptr; //!< function to set the value std::function<uint()> get = nullptr; //!< function to get the current value std::variant<QString, Unit> unit = Unit::unitless; //!< Unit of the value (internal unit only!) - std::function<QString()> path = nullptr; //!< Path describing this value. Used e.g. for undo/redo + std::function<QString()> path = + nullptr; //!< Path describing this value. Used e.g. for undo/redo }; #endif // BORNAGAIN_GUI_MODEL_DESCRIPTOR_UINTDESCRIPTOR_H diff --git a/GUI/Model/Descriptor/UIntProperty.h b/GUI/Model/Descriptor/UIntProperty.h index 924c4329556..81487b605c4 100644 --- a/GUI/Model/Descriptor/UIntProperty.h +++ b/GUI/Model/Descriptor/UIntProperty.h @@ -66,10 +66,22 @@ private: UIntProperty m_##nameLower; \ \ public: \ - UIntDescriptor nameLower() const { return m_##nameLower; } \ - void set##nameUpper(int v) { m_##nameLower.set(v); } \ - void set##nameUpper(uint v) { m_##nameLower.set(v); } \ - void set##nameUpper(size_t v) { m_##nameLower.set((int)v); } + UIntDescriptor nameLower() const \ + { \ + return m_##nameLower; \ + } \ + void set##nameUpper(int v) \ + { \ + m_##nameLower.set(v); \ + } \ + void set##nameUpper(uint v) \ + { \ + m_##nameLower.set(v); \ + } \ + void set##nameUpper(size_t v) \ + { \ + m_##nameLower.set((int)v); \ + } #endif // BORNAGAIN_GUI_MODEL_DESCRIPTOR_UINTPROPERTY_H diff --git a/GUI/Model/Descriptor/VectorProperty.h b/GUI/Model/Descriptor/VectorProperty.h index 120ff6747d4..4670f2ce2fc 100644 --- a/GUI/Model/Descriptor/VectorProperty.h +++ b/GUI/Model/Descriptor/VectorProperty.h @@ -65,8 +65,14 @@ protected: VectorProperty m_##nameLower; \ \ public: \ - VectorDescriptor nameLower() const { return m_##nameLower; } \ - void set##nameUpper(const R3& v) { m_##nameLower.set(v); } + VectorDescriptor nameLower() const \ + { \ + return m_##nameLower; \ + } \ + void set##nameUpper(const R3& v) \ + { \ + m_##nameLower.set(v); \ + } ; diff --git a/GUI/View/SampleDesigner/LayerEditorUtils.h b/GUI/View/SampleDesigner/LayerEditorUtils.h index 8e00e1276bc..18c04e26892 100644 --- a/GUI/View/SampleDesigner/LayerEditorUtils.h +++ b/GUI/View/SampleDesigner/LayerEditorUtils.h @@ -53,8 +53,8 @@ void addMultiPropertyToGrid(QGridLayout* m_gridLayout, int firstCol, //! Create DoubleSpinBoxes for the DoubeDescriptors and connect them to the given setNewValue() void addMultiPropertyToGrid(QGridLayout* m_gridLayout, int firstCol, const DoubleDescriptors& valueDescriptors, - std::function<void(double, DoubleDescriptor)> setNewValue, bool vertically, - bool addSpacer); + std::function<void(double, DoubleDescriptor)> setNewValue, + bool vertically, bool addSpacer); void addMultiPropertyToGrid(QGridLayout* m_gridLayout, int firstCol, const DoubleDescriptors& valueDescriptors, SampleEditorController* ec, -- GitLab