Skip to content
Snippets Groups Projects
Commit 1e79ad1b authored by Mikhail Svechnikov's avatar Mikhail Svechnikov
Browse files

move out mapper from JobItem

parent 629e7387
No related branches found
No related tags found
1 merge request!909GUI refactoring: remove mappers from JobItem
......@@ -105,6 +105,14 @@ bool DataItem::isAxesUnitsPropertyName(const QString& name)
return name == P_AXES_UNITS;
}
void DataItem::updateAxesUnits(SessionItem* item, const QString& name, InstrumentItem* instrumentItem)
{
DataItem* dataItem = dynamic_cast<DataItem*>(item);
if (dataItem && isAxesUnitsPropertyName(name)) {
dataItem->updateCoords(instrumentItem);
}
}
DataItem::DataItem(const QString& modelType)
: SessionItem(modelType)
{
......
......@@ -63,6 +63,7 @@ public:
SessionItem* getAxesUnitsItem() const;
SelectionDescriptor<QString> axesUnits() const;
static bool isAxesUnitsPropertyName(const QString& name);
static void updateAxesUnits(SessionItem* item, const QString& name, InstrumentItem* instrumentItem);
virtual void setXaxisTitle(const QString& title) = 0;
virtual void setYaxisTitle(const QString& title) = 0;
......
......@@ -63,12 +63,6 @@ JobItem::JobItem()
registerTag(T_DATAVIEW, 1, 1, {Data1DViewItem::M_TYPE});
registerTag(T_FIT_SUITE, 1, 1, {FitSuiteItem::M_TYPE});
// mapper()->setOnChildPropertyChange([this](SessionItem* item, const QString& name) {
// if (item->parent() == this && dynamic_cast<DataItem*>(item)
// && DataItem::isAxesUnitsPropertyName(name))
// dynamic_cast<DataItem*>(item)->updateCoords(instrumentItem());
// });
}
QString JobItem::getIdentifier() const
......
......@@ -14,6 +14,8 @@
#include "GUI/View/Plot2D/IntensityDataWidget.h"
#include "GUI/Model/Data/IntensityDataItem.h"
#include "GUI/Model/Job/JobItem.h"
#include "GUI/Model/Data/RealDataItem.h"
#include "GUI/Util/ActionFactory.h"
#include "GUI/View/Plot2D/IntensityDataCanvas.h"
#include "GUI/View/Plot2D/IntensityDataFFTPresenter.h"
......
......@@ -107,7 +107,7 @@ void FitComparisonWidget::subscribeToItem()
m_statusLabel->addPlot(m_simulatedDataPlot->colorMap());
m_statusLabel->addPlot(m_relativeDiffPlot->colorMap());
m_propertyWidget->setItem(simulatedDataItem());
m_propertyWidget->setItem(simulatedDataItem(), realDataItem());
}
void FitComparisonWidget::unsubscribeFromItem()
......
......@@ -34,7 +34,7 @@ FitComparisonWidget1D::FitComparisonWidget1D(QWidget* parent)
, m_diff_plot(new Plot1DCanvas)
, m_fitFlowWidget(new FitFlowWidget)
, m_statusLabel(new PlotStatusLabel(nullptr, this))
, m_propertyWidget(new SpecularDataPropertyWidget)
, m_propertyWidget(new SpecularDataPropertyWidget(this))
, m_resetViewAction(new QAction(this))
, m_comparisonController(new FitComparison1DViewController(this))
{
......
......@@ -24,7 +24,7 @@
SpecularDataWidget::SpecularDataWidget(QWidget* parent)
: SessionItemWidget(parent)
, m_intensity_canvas(new SpecularDataCanvas)
, m_propertyWidget(new SpecularDataPropertyWidget)
, m_propertyWidget(new SpecularDataPropertyWidget(this))
{
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
m_propertyWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::MinimumExpanding);
......
......@@ -47,36 +47,24 @@ IntensityDataPropertyWidget::~IntensityDataPropertyWidget()
m_item->mapper()->unsubscribe(this);
}
#include <QDebug>
void IntensityDataPropertyWidget::setItem(IntensityDataItem* item)
void IntensityDataPropertyWidget::setItem(IntensityDataItem* mainItem, IntensityDataItem* realItem)
{
if (m_item)
m_item->mapper()->unsubscribe(this);
GUI::Util::Layout::clearLayout(m_mainLayout);
m_updaters.clear();
m_item = item;
m_item = mainItem;
if (!item)
if (!m_item)
return;
QComboBox* axesUnitsCombo = createComboBox(item->axesUnits());
// Connection instead of using sessionItem mapper
connect(axesUnitsCombo, &QComboBox::currentTextChanged, this, [=](QString currentText) {
Q_UNUSED(currentText)
// It doesn't work for real data map and diff data map
// Also need to connect other intensity data items
if(jobItem())
item->updateCoords(jobItem()->instrumentItem());
});
qInfo() << "IntensityDataPropertyWidget : jobItem is" << jobItem() << endl;
m_mainLayout->addRow("Axes units:", axesUnitsCombo);
m_mainLayout->addRow("Color scheme:", createComboBox(item->gradient()));
m_mainLayout->addRow("Axes units:", createComboBox(m_item->axesUnits()));
m_mainLayout->addRow("Color scheme:", createComboBox(m_item->gradient()));
m_mainLayout->addRow(createCheckBox(
"Interpolate", [=]() { return item->isInterpolated(); },
[=](bool b) { item->setInterpolated(b); }));
"Interpolate", [=]() { return m_item->isInterpolated(); },
[=](bool b) { m_item->setInterpolated(b); }));
// -- x-axis
auto* xGroup = new QGroupBox("X axis", this);
......@@ -84,9 +72,9 @@ void IntensityDataPropertyWidget::setItem(IntensityDataItem* item)
xFormLayout->setContentsMargins(0, 0, 0, 0);
xFormLayout->setSpacing(5);
xFormLayout->addRow("Min:", createDoubleSpinbox(item->xAxisItem()->min()));
xFormLayout->addRow("Max:", createDoubleSpinbox(item->xAxisItem()->max()));
xFormLayout->addRow("Title:", createTextEdit(item->xAxisItem()->titleItem()));
xFormLayout->addRow("Min:", createDoubleSpinbox(m_item->xAxisItem()->min()));
xFormLayout->addRow("Max:", createDoubleSpinbox(m_item->xAxisItem()->max()));
xFormLayout->addRow("Title:", createTextEdit(m_item->xAxisItem()->titleItem()));
m_mainLayout->addRow(xGroup);
......@@ -96,9 +84,9 @@ void IntensityDataPropertyWidget::setItem(IntensityDataItem* item)
yFormLayout->setContentsMargins(0, 0, 0, 0);
yFormLayout->setSpacing(5);
yFormLayout->addRow("Min:", createDoubleSpinbox(item->yAxisItem()->min()));
yFormLayout->addRow("Max:", createDoubleSpinbox(item->yAxisItem()->max()));
yFormLayout->addRow("Title:", createTextEdit(item->yAxisItem()->titleItem()));
yFormLayout->addRow("Min:", createDoubleSpinbox(m_item->yAxisItem()->min()));
yFormLayout->addRow("Max:", createDoubleSpinbox(m_item->yAxisItem()->max()));
yFormLayout->addRow("Title:", createTextEdit(m_item->yAxisItem()->titleItem()));
m_mainLayout->addRow(yGroup);
......@@ -108,20 +96,27 @@ void IntensityDataPropertyWidget::setItem(IntensityDataItem* item)
zFormLayout->setContentsMargins(0, 0, 0, 0);
zFormLayout->setSpacing(5);
zFormLayout->addRow("Min:", createDoubleSpinbox(item->zAxisItem()->min()));
zFormLayout->addRow("Max:", createDoubleSpinbox(item->zAxisItem()->max()));
zFormLayout->addRow(createCheckBox("log10", item->zAxisItem()->logScaleItem()));
zFormLayout->addRow(createCheckBox("Visible", item->zAxisItem()->visibilityItem()));
zFormLayout->addRow("Min:", createDoubleSpinbox(m_item->zAxisItem()->min()));
zFormLayout->addRow("Max:", createDoubleSpinbox(m_item->zAxisItem()->max()));
zFormLayout->addRow(createCheckBox("log10", m_item->zAxisItem()->logScaleItem()));
zFormLayout->addRow(createCheckBox("Visible", m_item->zAxisItem()->visibilityItem()));
m_mainLayout->addRow(zGroup);
updateUIValues();
// react on external changes (e.g. zooming in customplot shall update the axis values)
item->mapper()->setOnChildPropertyChange(
[=](SessionItem*, const QString&) { updateUIValues(); }, this);
m_item->mapper()->setOnChildPropertyChange([=](SessionItem*, const QString&) {
updateUIValues(); }, this);
// update coordinates on axes units change
m_item->mapper()->setOnPropertyChange([this](SessionItem* item, const QString& name) {
DataItem::updateAxesUnits(item, name, jobItem()->instrumentItem()); }, this);
if(realItem)
realItem->mapper()->setOnPropertyChange([this](SessionItem* item, const QString& name) {
DataItem::updateAxesUnits(item, name, jobItem()->instrumentItem()); }, this);
item->mapper()->setOnItemDestroy([this](SessionItem*) { m_item = nullptr; }, this);
m_item->mapper()->setOnItemDestroy([this](SessionItem*) { m_item = nullptr; }, this);
}
const JobItem* IntensityDataPropertyWidget::jobItem() const
......@@ -130,7 +125,7 @@ const JobItem* IntensityDataPropertyWidget::jobItem() const
if(!sessionItemWidget)
return nullptr;
return dynamic_cast<JobItem*>(sessionItemWidget->currentItem());
return dynamic_cast<JobItem*>(sessionItemWidget->currentItem());
}
QWidget* IntensityDataPropertyWidget::createDoubleSpinbox(DoubleDescriptor d)
......@@ -175,7 +170,7 @@ QWidget* IntensityDataPropertyWidget::createCheckBox(const QString& title, funct
return checkBox;
}
QComboBox* IntensityDataPropertyWidget::createComboBox(SelectionDescriptor<QString> d)
QWidget* IntensityDataPropertyWidget::createComboBox(SelectionDescriptor<QString> d)
{
auto* combo = new QComboBox(this);
combo->addItems(d.options);
......
......@@ -36,7 +36,7 @@ public:
explicit IntensityDataPropertyWidget(QWidget* parent = nullptr);
~IntensityDataPropertyWidget();
void setItem(IntensityDataItem* item);
void setItem(IntensityDataItem* mainItem, IntensityDataItem* realItem = nullptr);
const JobItem* jobItem() const;
private:
......@@ -45,7 +45,7 @@ private:
QWidget* createCheckBox(const QString& title, SessionItem* item);
QWidget* createCheckBox(const QString& title, function<bool()> getter,
function<void(bool)> setter);
QComboBox* createComboBox(SelectionDescriptor<QString> d);
QWidget* createComboBox(SelectionDescriptor<QString> d);
void updateUIValues();
......
......@@ -13,6 +13,8 @@
// ************************************************************************************************
#include "GUI/View/PropertyEditor/SpecularDataPropertyWidget.h"
#include "GUI/View/Common/SessionItemWidget.h"
#include "GUI/Model/Job/JobItem.h"
#include "GUI/Model/Data/Data1DViewItem.h"
#include "GUI/Model/Data/SpecularDataItem.h"
#include "GUI/Model/Device/AxesItems.h"
......@@ -28,6 +30,7 @@
SpecularDataPropertyWidget::SpecularDataPropertyWidget(QWidget* parent)
: QWidget(parent)
, parent(parent)
, m_item(nullptr)
{
setWindowTitle("Properties");
......@@ -49,6 +52,15 @@ void SpecularDataPropertyWidget::setItem(Data1DViewItem* item)
setCurrentItem(item);
}
const JobItem* SpecularDataPropertyWidget::jobItem() const
{
SessionItemWidget* sessionItemWidget = dynamic_cast<SessionItemWidget*>(parent);
if(!sessionItemWidget)
return nullptr;
return dynamic_cast<JobItem*>(sessionItemWidget->currentItem());
}
void SpecularDataPropertyWidget::setCurrentItem(SessionItem* item)
{
if (m_item)
......@@ -105,8 +117,12 @@ void SpecularDataPropertyWidget::setCurrentItem(SessionItem* item)
updateUIValues();
// react on external changes (e.g. zooming in customplot shall update the axis values)
m_item->mapper()->setOnChildPropertyChange(
[=](SessionItem*, const QString&) { updateUIValues(); }, this);
m_item->mapper()->setOnChildPropertyChange([=](SessionItem*, const QString&) {
updateUIValues(); }, this);
// update coordinates on axes units change
m_item->mapper()->setOnPropertyChange([this](SessionItem* item, const QString& name) {
DataItem::updateAxesUnits(item, name, jobItem()->instrumentItem()); }, this);
}
QWidget* SpecularDataPropertyWidget::createDoubleSpinbox(DoubleDescriptor d)
......
......@@ -26,6 +26,7 @@ class SessionItem;
class QFormLayout;
class DoubleDescriptor;
class Data1DViewItem;
class JobItem;
using std::function;
......@@ -38,6 +39,7 @@ public:
void setItem(SpecularDataItem* item);
void setItem(Data1DViewItem* item);
const JobItem* jobItem() const;
private:
QWidget* createDoubleSpinbox(DoubleDescriptor d);
......@@ -51,6 +53,7 @@ private:
void setCurrentItem(SessionItem* item);
private:
QWidget* parent;
SessionItem* m_item;
QFormLayout* m_mainLayout;
QList<function<void()>> m_updaters;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment