diff --git a/GUI/coregui/Views/InfoWidgets/DistributionEditor.cpp b/GUI/coregui/Views/InfoWidgets/DistributionEditor.cpp index b1ba821069d2791e3694f1c208c3b31b3857bed7..98c9a6ba68c1a20d31c35765cedc71fd71815748 100644 --- a/GUI/coregui/Views/InfoWidgets/DistributionEditor.cpp +++ b/GUI/coregui/Views/InfoWidgets/DistributionEditor.cpp @@ -57,35 +57,37 @@ DistributionEditor::DistributionEditor(QWidget *parent) setLayout(mainLayout); } -DistributionEditor::~DistributionEditor() {} +DistributionEditor::~DistributionEditor() +{ + if(m_item) m_item->mapper()->unsubscribe(this); +} void DistributionEditor::setItem(SessionItem *item) { m_propertyEditor->clearEditor(); m_propertyEditor->addPropertyItems(item); - if (m_item == item) - return; - - m_item = dynamic_cast<GroupItem *>(item); - - if (!m_item) + if (m_item == item) { return; - m_mapper.reset(new ModelMapper); + } else { + if(m_item) + m_item->mapper()->unsubscribe(this); - m_mapper->setItem(m_item); - m_mapper->setOnPropertyChange( - [this](const QString &name) - { - onPropertyChanged(name); - }); + m_item = dynamic_cast<GroupItem *>(item); + if(!m_item) return; - DistributionItem *distrItem = dynamic_cast<DistributionItem *>( - m_item->getCurrentItem()); + m_item->mapper()->setOnPropertyChange( + [this](const QString &name) + { + onPropertyChanged(name); + }, this); - Q_ASSERT(distrItem); - m_plotwidget->setItem(distrItem); + DistributionItem *distrItem = dynamic_cast<DistributionItem *>( + m_item->getCurrentItem()); + Q_ASSERT(distrItem); + m_plotwidget->setItem(distrItem); + } } void DistributionEditor::onPropertyChanged(const QString &property_name) diff --git a/GUI/coregui/Views/InfoWidgets/DistributionEditor.h b/GUI/coregui/Views/InfoWidgets/DistributionEditor.h index 606a52187b121fe2f1e3a8334935753d516b8ef2..9fd419948d353597efeb8ec27cae99469203c270 100644 --- a/GUI/coregui/Views/InfoWidgets/DistributionEditor.h +++ b/GUI/coregui/Views/InfoWidgets/DistributionEditor.h @@ -25,7 +25,6 @@ class QGroupBox; class DistributionWidget; class GroupItem; class ComponentBoxEditor; -class ModelMapper; //! The DistributionEditor class, being a child of DistributionDialog, contains a widget //! to show Distribution1D and awesome property editor to change distribution parameters @@ -49,7 +48,6 @@ private: DistributionWidget *m_plotwidget; QString m_nameOfEditor; QGroupBox *m_box; - std::unique_ptr<ModelMapper> m_mapper; }; #endif diff --git a/GUI/coregui/Views/InfoWidgets/DistributionWidget.cpp b/GUI/coregui/Views/InfoWidgets/DistributionWidget.cpp index 2191afb983f657f6e579925342aad635451265a9..18348ed0c6f1bb185c481f8f6212dd407dc49b9a 100644 --- a/GUI/coregui/Views/InfoWidgets/DistributionWidget.cpp +++ b/GUI/coregui/Views/InfoWidgets/DistributionWidget.cpp @@ -69,26 +69,51 @@ DistributionWidget::DistributionWidget(QWidget *parent) void DistributionWidget::setItem(DistributionItem *item) { - if (m_item == item) + if (m_item == item) { return; - if (m_item) { - disconnect(); + } else { + if (m_item) { + disconnect(); + m_item->mapper()->unsubscribe(this); + } + + m_item = item; + if (!m_item) return; + + plotItem(); + + m_item->mapper()->setOnPropertyChange( + [this](QString) + { + plotItem(); + }, this); + } - m_item = item; - if (!m_item) - return; - plotItem(); - m_mapper.reset(new ModelMapper); - m_mapper->setItem(item); - m_mapper->setOnPropertyChange( - [this](QString) - { - plotItem(); - }); +// if (m_item == item) +// return; +// if (m_item) { + +// disconnect(); +// } +// m_item = item; + +// if (!m_item) +// return; + +// plotItem(); + +// m_mapper.reset(new ModelMapper); +// m_mapper->setItem(item); +// m_mapper->setOnPropertyChange( +// [this](QString) +// { +// plotItem(); +// }); + } void DistributionWidget::plotItem() diff --git a/GUI/coregui/Views/InfoWidgets/DistributionWidget.h b/GUI/coregui/Views/InfoWidgets/DistributionWidget.h index 8b028014fce5d763a41f7aced3ea7c029e910df8..b80c405381a12a1c9595b26cd0995fd608170a0b 100644 --- a/GUI/coregui/Views/InfoWidgets/DistributionWidget.h +++ b/GUI/coregui/Views/InfoWidgets/DistributionWidget.h @@ -29,7 +29,6 @@ class QCustomPlot; class DistributionItem; class QCPRange; class QAction; -class ModelMapper; //! The DistributionWidget class plots 1d functions corresponding to domain's Distribution1D class DistributionWidget : public QWidget @@ -64,7 +63,6 @@ private: QCPRange *m_xRange; QCPRange *m_yRange; WarningSignWidget *m_warningSign; - std::unique_ptr<ModelMapper> m_mapper; }; #endif diff --git a/GUI/coregui/Views/InstrumentWidgets/DetectorEditorWidget.cpp b/GUI/coregui/Views/InstrumentWidgets/DetectorEditorWidget.cpp index ee21111da9d24e61728414f555dff4c6b00d25ff..0c78091d2b370be110f595fa06a3d3ff4303d1d5 100644 --- a/GUI/coregui/Views/InstrumentWidgets/DetectorEditorWidget.cpp +++ b/GUI/coregui/Views/InstrumentWidgets/DetectorEditorWidget.cpp @@ -58,23 +58,46 @@ DetectorEditorWidget::~DetectorEditorWidget() void DetectorEditorWidget::setDetectorItem(DetectorItem *detectorItem) { - qDebug() << "DetectorEditorWidget::setDetectorItem() -> XXX"; + if(m_detectorItem == detectorItem) { + return; - m_detectorItem = detectorItem; - if(!m_detectorItem) return; + } else { + if(m_detectorItem) + m_detectorItem->mapper()->unsubscribe(this); + + m_detectorItem = detectorItem; + if(!m_detectorItem) return; + + m_detectorItem->mapper()->setOnPropertyChange( + [this](const QString &name) + { + onPropertyChanged(name); + }, this); + + m_detectorTypeEditor->clearEditor(); + m_detectorTypeEditor->addItem(m_detectorItem->getItem(DetectorItem::P_DETECTOR)); + + init_SubDetector_Widget(); + } + + + +// qDebug() << "DetectorEditorWidget::setDetectorItem() -> XXX"; +// m_detectorItem = detectorItem; +// if(!m_detectorItem) return; - m_mapper.reset(new ModelMapper); - m_mapper->setItem(m_detectorItem); - m_mapper->setOnPropertyChange( - [this](const QString &name) - { - onPropertyChanged(name); - }); +// m_mapper.reset(new ModelMapper); +// m_mapper->setItem(m_detectorItem); +// m_mapper->setOnPropertyChange( +// [this](const QString &name) +// { +// onPropertyChanged(name); +// }); - m_detectorTypeEditor->clearEditor(); - m_detectorTypeEditor->addItem(m_detectorItem->getItem(DetectorItem::P_DETECTOR)); +// m_detectorTypeEditor->clearEditor(); +// m_detectorTypeEditor->addItem(m_detectorItem->getItem(DetectorItem::P_DETECTOR)); - init_SubDetector_Widget(); +// init_SubDetector_Widget(); } void DetectorEditorWidget::onPropertyChanged(const QString &propertyName) diff --git a/GUI/coregui/Views/InstrumentWidgets/DetectorEditorWidget.h b/GUI/coregui/Views/InstrumentWidgets/DetectorEditorWidget.h index 573188478217c3c6fb6e94db2f8d8f0e0713ad88..411f8b19ef23177e299fd6331ebafff10da174cb 100644 --- a/GUI/coregui/Views/InstrumentWidgets/DetectorEditorWidget.h +++ b/GUI/coregui/Views/InstrumentWidgets/DetectorEditorWidget.h @@ -27,7 +27,6 @@ class ComponentBoxEditor; class QGridLayout; class SphericalDetectorWidget; class ColumnResizer; -class ModelMapper; class BA_CORE_API_ DetectorEditorWidget : public QWidget { @@ -54,7 +53,6 @@ private: GroupInfoBox *m_groupBox; DetectorItem *m_detectorItem; QWidget *m_subDetectorWidget; - std::unique_ptr<ModelMapper> m_mapper; }; #endif diff --git a/GUI/coregui/Views/InstrumentWidgets/RectangularDetectorWidget.cpp b/GUI/coregui/Views/InstrumentWidgets/RectangularDetectorWidget.cpp index 41ffc5a885978b769ac33b9ad7a931b1363b9a25..2586d477264b5d7f07afdf0b3ecc3ca9f5225649 100644 --- a/GUI/coregui/Views/InstrumentWidgets/RectangularDetectorWidget.cpp +++ b/GUI/coregui/Views/InstrumentWidgets/RectangularDetectorWidget.cpp @@ -60,18 +60,39 @@ RectangularDetectorWidget::~RectangularDetectorWidget() void RectangularDetectorWidget::setDetectorItem(RectangularDetectorItem *detectorItem) { - m_detectorItem = detectorItem; - if(!m_detectorItem) return; - - m_mapper.reset(new ModelMapper); - m_mapper->setItem(m_detectorItem); - m_mapper->setOnPropertyChange( - [this](const QString &name) - { - onPropertyChanged(name); - }); - - init_editors(); + if(m_detectorItem == detectorItem) { + return; + + } else { + if(m_detectorItem) + m_detectorItem->mapper()->unsubscribe(this); + + m_detectorItem = detectorItem; + if(!m_detectorItem) return; + + m_detectorItem->mapper()->setOnPropertyChange( + [this](const QString &name) + { + onPropertyChanged(name); + }, this); + + init_editors(); + } + + + +// m_detectorItem = detectorItem; +// if(!m_detectorItem) return; + +// m_mapper.reset(new ModelMapper); +// m_mapper->setItem(m_detectorItem); +// m_mapper->setOnPropertyChange( +// [this](const QString &name) +// { +// onPropertyChanged(name); +// }); + +// init_editors(); } void RectangularDetectorWidget::onPropertyChanged(const QString &propertyName) diff --git a/GUI/coregui/Views/InstrumentWidgets/RectangularDetectorWidget.h b/GUI/coregui/Views/InstrumentWidgets/RectangularDetectorWidget.h index 63eadb3b49993b20ca5c37204e54e19422bfcdd7..603bd27e5890bf42295aff9622714b2cf78c8ea9 100644 --- a/GUI/coregui/Views/InstrumentWidgets/RectangularDetectorWidget.h +++ b/GUI/coregui/Views/InstrumentWidgets/RectangularDetectorWidget.h @@ -28,7 +28,6 @@ class AwesomePropertyEditor; class ComponentBoxEditor; class QGridLayout; class ColumnResizer; -class ModelMapper; class BA_CORE_API_ RectangularDetectorWidget : public QWidget { @@ -63,7 +62,6 @@ private: QGridLayout *m_gridLayout; RectangularDetectorItem *m_detectorItem; - std::unique_ptr<ModelMapper> m_mapper; }; #endif diff --git a/GUI/coregui/Views/IntensityDataWidgets/ColorMapPlot.cpp b/GUI/coregui/Views/IntensityDataWidgets/ColorMapPlot.cpp index d35ee15fe0b9780cfb8b1f5dcfac73f205f5b419..2dad456db999c402e3cb790967d70bc60dc1d6e4 100644 --- a/GUI/coregui/Views/IntensityDataWidgets/ColorMapPlot.cpp +++ b/GUI/coregui/Views/IntensityDataWidgets/ColorMapPlot.cpp @@ -46,41 +46,59 @@ ColorMapPlot::~ColorMapPlot() //! initializes everything with new IntensityDataItem or plot it, if it was already the case void ColorMapPlot::setItem(IntensityDataItem *item) { - if (item && (m_item == item)) { - // qDebug() << "ColorMapPlot::setItem(NIntensityDataItem *item) item==m_item"; - plotItem(m_item); + if(item == m_item) { + if(m_item) + plotItem(m_item); return; + + } else { + if(m_item) + m_item->mapper()->unsubscribe(this); + + m_item = item; + if(!m_item) return; + + plotItem(m_item); + + m_item->mapper()->setOnPropertyChange( + [this](const QString &name) + { + onPropertyChanged(name); + onIntensityModified(); + }, this); + m_item->mapper()->setOnChildPropertyChange( + [this](SessionItem* item, const QString name) + { + onSubItemPropertyChanged(item->itemName(), name); + }, this); + } -// if (m_item) { -// disconnect(m_item, SIGNAL(intensityModified()), this, -// SLOT(onIntensityModified())); -// } - m_item = item; +// m_item = item; - if (!m_item) - return; +// if (!m_item) +// return; - plotItem(m_item); +// plotItem(m_item); + +//// connect(m_item, SIGNAL(intensityModified()), this, +//// SLOT(onIntensityModified())); +// m_mapper.reset(new ModelMapper); -// connect(m_item, SIGNAL(intensityModified()), this, -// SLOT(onIntensityModified())); - m_mapper.reset(new ModelMapper); - - m_mapper->setItem(item); - m_mapper->setOnPropertyChange( - [this](const QString &name) - { - onPropertyChanged(name); - onIntensityModified(); - }); - m_mapper->setOnChildPropertyChange( - [this](SessionItem* item, const QString name) - { -// if (item->parent() && item->parent()->modelType() == Constants::GroupItemType) - onSubItemPropertyChanged(item->itemName(), name); - }); +// m_mapper->setItem(item); +// m_mapper->setOnPropertyChange( +// [this](const QString &name) +// { +// onPropertyChanged(name); +// onIntensityModified(); +// }); +// m_mapper->setOnChildPropertyChange( +// [this](SessionItem* item, const QString name) +// { +//// if (item->parent() && item->parent()->modelType() == Constants::GroupItemType) +// onSubItemPropertyChanged(item->itemName(), name); +// }); } //! returns string containing bin content information diff --git a/GUI/coregui/Views/IntensityDataWidgets/ColorMapPlot.h b/GUI/coregui/Views/IntensityDataWidgets/ColorMapPlot.h index 7b4bef0c50b7b0e9c63e7e018ecf60415eacaa14..bfcf7d04f1bbb3db84cc15ddf5bb2d4334c39e80 100644 --- a/GUI/coregui/Views/IntensityDataWidgets/ColorMapPlot.h +++ b/GUI/coregui/Views/IntensityDataWidgets/ColorMapPlot.h @@ -28,7 +28,6 @@ class IntensityDataItem; class QCustomPlot; class QCPColorMap; class QCPColorScale; -class ModelMapper; //! 2D color map widget for IntensityData class BA_CORE_API_ ColorMapPlot : public QWidget @@ -119,7 +118,6 @@ private: QMap<QString, QCPColorGradient > m_gradient_map; bool m_block_update; PositionData m_posData; - std::unique_ptr<ModelMapper> m_mapper; }; diff --git a/GUI/coregui/Views/IntensityDataWidgets/HorizontalSlicePlot.cpp b/GUI/coregui/Views/IntensityDataWidgets/HorizontalSlicePlot.cpp index 4b0ff0fe25bf0ccd8b6d7d212aaa38a908be0905..08293e717487d2da99959263a07b95a3daa9236a 100644 --- a/GUI/coregui/Views/IntensityDataWidgets/HorizontalSlicePlot.cpp +++ b/GUI/coregui/Views/IntensityDataWidgets/HorizontalSlicePlot.cpp @@ -42,40 +42,64 @@ HorizontalSlicePlot::HorizontalSlicePlot(QWidget *parent) void HorizontalSlicePlot::setItem(IntensityDataItem *item) { - if (m_item == item) return; + if(m_item == item) { + return; - if (m_item) { -// disconnect(m_item, SIGNAL(propertyChanged(QString)), -// this, SLOT(onPropertyChanged(QString))); -// disconnect(m_item, SIGNAL(subItemPropertyChanged(QString,QString)), -// this, SLOT(onSubItemPropertyChanged(QString,QString))); + } else { + if(m_item) + m_item->mapper()->unsubscribe(this); + + m_item = item; + if (!m_item) return; + + plotItem(m_item); + + m_item->mapper()->setOnChildPropertyChange( + [this](SessionItem* item, const QString name) + { + if (item->parent() && item->parent()->modelType() == Constants::GroupItemType) + onSubItemPropertyChanged(item->itemName(), name); + }, this); } - m_item = item; - if (!m_item) return; - plotItem(m_item); -// connect(m_item, SIGNAL(propertyChanged(QString)), -// this, SLOT(onPropertyChanged(QString))); -// if (m_mapper) -// m_mapper->deleteLater(); -// m_mapper = new ModelMapper(this); +// if (m_item == item) return; + +// if (m_item) { +//// disconnect(m_item, SIGNAL(propertyChanged(QString)), +//// this, SLOT(onPropertyChanged(QString))); +//// disconnect(m_item, SIGNAL(subItemPropertyChanged(QString,QString)), +//// this, SLOT(onSubItemPropertyChanged(QString,QString))); +// } + +// m_item = item; + +// if (!m_item) return; + +// plotItem(m_item); + +//// connect(m_item, SIGNAL(propertyChanged(QString)), +//// this, SLOT(onPropertyChanged(QString))); + +//// if (m_mapper) +//// m_mapper->deleteLater(); +//// m_mapper = new ModelMapper(this); - m_mapper.reset(new ModelMapper); - m_mapper->setItem(item); - m_mapper->setOnChildPropertyChange( - [this](SessionItem* item, const QString name) - { - if (item->parent() && item->parent()->modelType() == Constants::GroupItemType) - onSubItemPropertyChanged(item->itemName(), name); - }); +// m_mapper.reset(new ModelMapper); +// m_mapper->setItem(item); +// m_mapper->setOnChildPropertyChange( +// [this](SessionItem* item, const QString name) +// { +// if (item->parent() && item->parent()->modelType() == Constants::GroupItemType) +// onSubItemPropertyChanged(item->itemName(), name); +// }); -// connect(m_item, SIGNAL(subItemPropertyChanged(QString,QString)), -// this, SLOT(onSubItemPropertyChanged(QString,QString))); +//// connect(m_item, SIGNAL(subItemPropertyChanged(QString,QString)), +//// this, SLOT(onSubItemPropertyChanged(QString,QString))); } diff --git a/GUI/coregui/Views/IntensityDataWidgets/HorizontalSlicePlot.h b/GUI/coregui/Views/IntensityDataWidgets/HorizontalSlicePlot.h index 4457388be376293feeb98dc0ad5ecb0919e4e4ec..0cbe2693e3017d2437710cf2dae890ba4ffd1d84 100644 --- a/GUI/coregui/Views/IntensityDataWidgets/HorizontalSlicePlot.h +++ b/GUI/coregui/Views/IntensityDataWidgets/HorizontalSlicePlot.h @@ -24,7 +24,6 @@ class IntensityDataItem; class QCustomPlot; class QCPBars; -class ModelMapper; //! Slice of 2D IntensityData along x-axis //! FIXME functionality has to be merged with VerticalSlicePlot (code duplication) @@ -59,7 +58,6 @@ private: QCustomPlot *m_customPlot; QCPBars *m_bars; IntensityDataItem *m_item; - std::unique_ptr<ModelMapper> m_mapper; }; #endif diff --git a/GUI/coregui/Views/IntensityDataWidgets/IntensityDataPlotWidget.cpp b/GUI/coregui/Views/IntensityDataWidgets/IntensityDataPlotWidget.cpp index 79f9539e29358986c8ad75f1989760efc2bd1c6f..2ad6de8689217e6be056400d1a4a5f495073945a 100644 --- a/GUI/coregui/Views/IntensityDataWidgets/IntensityDataPlotWidget.cpp +++ b/GUI/coregui/Views/IntensityDataWidgets/IntensityDataPlotWidget.cpp @@ -94,43 +94,75 @@ IntensityDataPlotWidget::~IntensityDataPlotWidget() //! initializes the class with NIntensityDataItem void IntensityDataPlotWidget::setItem(IntensityDataItem *item) { - //qDebug() << "IntensityDataPlotWidget::setItem(NIntensityDataItem *item)"; - m_centralPlot->setItem(item); m_horizontalPlot->setItem(item); m_verticalPlot->setItem(item); - if (m_item == item) return; + if (m_item == item) { + return; - if (m_item) { -// disconnect(m_item, SIGNAL(propertyChanged(QString)), -// this, SLOT(onPropertyChanged(QString))); -// disconnect(m_item, SIGNAL(intensityModified()), this, SLOT(onIntensityModified())); + } else { + if(m_item) + m_item->mapper()->unsubscribe(this); + + m_item = item; + if (!m_item) return; + + updateItem(m_item); + + m_item->mapper()->setOnPropertyChange( + [this](const QString &name) + { + if(name == IntensityDataItem::P_PROJECTIONS_FLAG) { + showProjections(m_item->getItemValue(IntensityDataItem::P_PROJECTIONS_FLAG).toBool()); + } + }, this); + m_item->mapper()->setOnValueChange([this](void){ + onIntensityModified(); + }, this); } - m_item = item; - if (!m_item) return; - updateItem(m_item); -// if (m_mapper) -// m_mapper->deleteLater(); -// m_mapper = new ModelMapper(this); +// //qDebug() << "IntensityDataPlotWidget::setItem(NIntensityDataItem *item)"; + +// m_centralPlot->setItem(item); +// m_horizontalPlot->setItem(item); +// m_verticalPlot->setItem(item); + +// if (m_item == item) return; + +// if (m_item) { +//// disconnect(m_item, SIGNAL(propertyChanged(QString)), +//// this, SLOT(onPropertyChanged(QString))); +//// disconnect(m_item, SIGNAL(intensityModified()), this, SLOT(onIntensityModified())); +// } + +// m_item = item; + +// if (!m_item) return; + +// updateItem(m_item); + +//// if (m_mapper) +//// m_mapper->deleteLater(); +//// m_mapper = new ModelMapper(this); + +// m_mapper.reset(new ModelMapper); +// m_mapper->setItem(item); +// m_mapper->setOnPropertyChange( +// [this](const QString &name) +// { +// if(name == IntensityDataItem::P_PROJECTIONS_FLAG) { +// showProjections(m_item->getItemValue(IntensityDataItem::P_PROJECTIONS_FLAG).toBool()); +// } +// }); +// m_mapper->setOnValueChange([this](void){ +// onIntensityModified(); +// }); - m_mapper.reset(new ModelMapper); - m_mapper->setItem(item); - m_mapper->setOnPropertyChange( - [this](const QString &name) - { - if(name == IntensityDataItem::P_PROJECTIONS_FLAG) { - showProjections(m_item->getItemValue(IntensityDataItem::P_PROJECTIONS_FLAG).toBool()); - } - }); - m_mapper->setOnValueChange([this](void){ - onIntensityModified(); - }); } //! provide syncronious move of top and bottom splitters diff --git a/GUI/coregui/Views/IntensityDataWidgets/IntensityDataPlotWidget.h b/GUI/coregui/Views/IntensityDataWidgets/IntensityDataPlotWidget.h index 7ee0f993bbf06489dc1659d8039e83320e61b7a3..6f5e0b54db81b533f1bc868116c2a8cc2f5d1e65 100644 --- a/GUI/coregui/Views/IntensityDataWidgets/IntensityDataPlotWidget.h +++ b/GUI/coregui/Views/IntensityDataWidgets/IntensityDataPlotWidget.h @@ -27,7 +27,6 @@ class VerticalSlicePlot; class ColorMapPlot; class QLabel; class IntensityDataItem; -class ModelMapper; //! The widget contains IntensityDataItem color map, two projections and all //! logic. Belongs to IntensityDataWidget. @@ -82,7 +81,6 @@ private: int m_leftHistogramArea; int m_bottomHistogramArea; IntensityDataItem *m_item; - std::unique_ptr<ModelMapper> m_mapper; }; #endif diff --git a/GUI/coregui/Views/IntensityDataWidgets/IntensityDataWidget.cpp b/GUI/coregui/Views/IntensityDataWidgets/IntensityDataWidget.cpp index 588db865406f3850b8a877e6a778df99c037f4ed..d454aa38dbca8d6998a939e32f7398a8392c140d 100644 --- a/GUI/coregui/Views/IntensityDataWidgets/IntensityDataWidget.cpp +++ b/GUI/coregui/Views/IntensityDataWidgets/IntensityDataWidget.cpp @@ -59,14 +59,40 @@ void IntensityDataWidget::setItem(IntensityDataItem *item) m_plotWidget->setItem(item); m_propertyWidget->setItem(item); - if (m_currentItem == item) return; + if (m_currentItem == item) { + return; + + } else { + if(m_currentItem) + m_currentItem->mapper()->unsubscribe(this); + + m_currentItem = item; + if (!m_currentItem) return; + + setPropertyPanelVisible(m_currentItem->getItemValue(IntensityDataItem::P_PROPERTY_PANEL_FLAG).toBool()); + + m_currentItem->mapper()->setOnPropertyChange( + [this](const QString &name) + { + if(name == IntensityDataItem::P_PROPERTY_PANEL_FLAG) { + setPropertyPanelVisible(m_currentItem->getItemValue(IntensityDataItem::P_PROPERTY_PANEL_FLAG).toBool()); + } + }, this); + } - m_currentItem = item; +// m_plotWidget->setItem(item); +// m_propertyWidget->setItem(item); - if (!m_currentItem) return; +// if (m_currentItem == item) return; + + +// m_currentItem = item; + +// if (!m_currentItem) return; + +// updateItem(m_currentItem); - updateItem(m_currentItem); } void IntensityDataWidget::togglePropertyPanel() @@ -88,20 +114,20 @@ void IntensityDataWidget::setPropertyPanelVisible(bool visible) m_propertyWidget->setVisible(visible); } -void IntensityDataWidget::updateItem(IntensityDataItem *item) -{ - setPropertyPanelVisible(item->getItemValue(IntensityDataItem::P_PROPERTY_PANEL_FLAG).toBool()); - - m_mapper.reset(new ModelMapper); - m_mapper->setItem(item); - m_mapper->setOnPropertyChange( - [this](const QString &name) - { - if(name == IntensityDataItem::P_PROPERTY_PANEL_FLAG) { - setPropertyPanelVisible(m_currentItem->getItemValue(IntensityDataItem::P_PROPERTY_PANEL_FLAG).toBool()); - } - }); -} +//void IntensityDataWidget::updateItem(IntensityDataItem *item) +//{ +// setPropertyPanelVisible(item->getItemValue(IntensityDataItem::P_PROPERTY_PANEL_FLAG).toBool()); + +// m_mapper.reset(new ModelMapper); +// m_mapper->setItem(item); +// m_mapper->setOnPropertyChange( +// [this](const QString &name) +// { +// if(name == IntensityDataItem::P_PROPERTY_PANEL_FLAG) { +// setPropertyPanelVisible(m_currentItem->getItemValue(IntensityDataItem::P_PROPERTY_PANEL_FLAG).toBool()); +// } +// }); +//} void IntensityDataWidget::toggleProjections() { diff --git a/GUI/coregui/Views/IntensityDataWidgets/IntensityDataWidget.h b/GUI/coregui/Views/IntensityDataWidgets/IntensityDataWidget.h index 054bbe684cb337e5ac0c11cff98da49ced5b1918..0a8ec8c974d54a0dea67a3351d285a24c9979275 100644 --- a/GUI/coregui/Views/IntensityDataWidgets/IntensityDataWidget.h +++ b/GUI/coregui/Views/IntensityDataWidgets/IntensityDataWidget.h @@ -24,7 +24,6 @@ class IntensityDataPropertyWidget; class IntensityDataItem; class IntensityDataPlotWidget; -class ModelMapper; //! The widget presents IntensityData color map and property editor. //! Belongs to the stack handled by JobOutputDataWidget @@ -50,12 +49,11 @@ public slots: void setPropertyPanelVisible(bool visible); private: - void updateItem(IntensityDataItem *item); +// void updateItem(IntensityDataItem *item); IntensityDataPlotWidget *m_plotWidget; IntensityDataPropertyWidget *m_propertyWidget; IntensityDataItem *m_currentItem; - std::unique_ptr<ModelMapper> m_mapper; }; diff --git a/GUI/coregui/Views/IntensityDataWidgets/VerticalSlicePlot.cpp b/GUI/coregui/Views/IntensityDataWidgets/VerticalSlicePlot.cpp index 9f408bdf53921c8e21e99234c2eaf71b068ceba0..1f28dc92b0b111486075439f30ba8a5da294dabd 100644 --- a/GUI/coregui/Views/IntensityDataWidgets/VerticalSlicePlot.cpp +++ b/GUI/coregui/Views/IntensityDataWidgets/VerticalSlicePlot.cpp @@ -42,38 +42,60 @@ VerticalSlicePlot::VerticalSlicePlot(QWidget *parent) void VerticalSlicePlot::setItem(IntensityDataItem *item) { - if (m_item == item) return; + if (m_item == item) { + return; - if (m_item) { -// disconnect(m_item, SIGNAL(propertyChanged(QString)), -// this, SLOT(onPropertyChanged(QString))); -// disconnect(m_item, SIGNAL(subItemPropertyChanged(QString,QString)), -// this, SLOT(onSubItemPropertyChanged(QString,QString))); + } else { + if(m_item) + m_item->mapper()->unsubscribe(this); + + m_item = item; + if (!m_item) return; + + plotItem(m_item); + + m_item->mapper()->setOnChildPropertyChange( + [this](SessionItem* item, const QString name) + { + if (item->parent() && item->parent()->modelType() == Constants::GroupItemType) + onSubItemPropertyChanged(item->itemName(), name); + }, this); } - m_item = item; - if (!m_item) return; - plotItem(m_item); -// if (m_mapper) -// m_mapper->deleteLater(); -// m_mapper = new ModelMapper(this); +// if (m_item == item) return; + +// if (m_item) { +//// disconnect(m_item, SIGNAL(propertyChanged(QString)), +//// this, SLOT(onPropertyChanged(QString))); +//// disconnect(m_item, SIGNAL(subItemPropertyChanged(QString,QString)), +//// this, SLOT(onSubItemPropertyChanged(QString,QString))); +// } + +// m_item = item; + +// if (!m_item) return; + +// plotItem(m_item); +//// if (m_mapper) +//// m_mapper->deleteLater(); +//// m_mapper = new ModelMapper(this); - m_mapper.reset(new ModelMapper); - m_mapper->setItem(item); - m_mapper->setOnChildPropertyChange( - [this](SessionItem* item, const QString name) - { - if (item->parent() && item->parent()->modelType() == Constants::GroupItemType) - onSubItemPropertyChanged(item->itemName(), name); - }); +// m_mapper.reset(new ModelMapper); +// m_mapper->setItem(item); +// m_mapper->setOnChildPropertyChange( +// [this](SessionItem* item, const QString name) +// { +// if (item->parent() && item->parent()->modelType() == Constants::GroupItemType) +// onSubItemPropertyChanged(item->itemName(), name); +// }); -// connect(m_item, SIGNAL(propertyChanged(QString)), -// this, SLOT(onPropertyChanged(QString))); +//// connect(m_item, SIGNAL(propertyChanged(QString)), +//// this, SLOT(onPropertyChanged(QString))); -// connect(m_item, SIGNAL(subItemPropertyChanged(QString,QString)), -// this, SLOT(onSubItemPropertyChanged(QString,QString))); +//// connect(m_item, SIGNAL(subItemPropertyChanged(QString,QString)), +//// this, SLOT(onSubItemPropertyChanged(QString,QString))); } diff --git a/GUI/coregui/Views/IntensityDataWidgets/VerticalSlicePlot.h b/GUI/coregui/Views/IntensityDataWidgets/VerticalSlicePlot.h index 5fd94ce644c007cecc57631b63d034a90e85c426..970cd27a221790f9ce15bee9a9fd19d893d8608e 100644 --- a/GUI/coregui/Views/IntensityDataWidgets/VerticalSlicePlot.h +++ b/GUI/coregui/Views/IntensityDataWidgets/VerticalSlicePlot.h @@ -24,7 +24,6 @@ class IntensityDataItem; class QCustomPlot; class QCPBars; -class ModelMapper; //! Slice of 2D IntensityData along x-axis class BA_CORE_API_ VerticalSlicePlot : public QWidget @@ -58,8 +57,6 @@ private: QCustomPlot *m_customPlot; QCPBars *m_bars; IntensityDataItem *m_item; -// ModelMapper *m_mapper; - std::unique_ptr<ModelMapper> m_mapper; }; diff --git a/GUI/coregui/Views/JobWidgets/JobPropertiesWidget.cpp b/GUI/coregui/Views/JobWidgets/JobPropertiesWidget.cpp index 8fa46dd4e760328a88e1a6004f92f1c6b42a8a6f..9b814bb6529d47c5272c59274730d20d20344615 100644 --- a/GUI/coregui/Views/JobWidgets/JobPropertiesWidget.cpp +++ b/GUI/coregui/Views/JobWidgets/JobPropertiesWidget.cpp @@ -85,26 +85,50 @@ void JobPropertiesWidget::setItem(JobItem *jobItem) { m_propertyEditor->setItem(jobItem); - if (m_currentItem == jobItem) return; + if (m_currentItem == jobItem) { + return; - m_currentItem = jobItem; + } else { + if(m_currentItem) + m_currentItem->mapper()->unsubscribe(this); - if (!m_currentItem) return; + m_currentItem = jobItem; + if (!m_currentItem) return; - updateItem(m_currentItem); -// if (m_mapper) -// m_mapper->deleteLater(); -// m_mapper = new ModelMapper(this); + updateItem(m_currentItem); - m_mapper.reset(new ModelMapper); - m_mapper->setItem(jobItem); - m_mapper->setOnPropertyChange( - [this](const QString &name) - { - if(name == JobItem::P_COMMENTS) { - updateItem(m_currentItem); - } - }); + m_currentItem->mapper()->setOnPropertyChange( + [this](const QString &name) + { + if(name == JobItem::P_COMMENTS) { + updateItem(m_currentItem); + } + }, this); + } + + +// m_propertyEditor->setItem(jobItem); + +// if (m_currentItem == jobItem) return; + +// m_currentItem = jobItem; + +// if (!m_currentItem) return; + +// updateItem(m_currentItem); +//// if (m_mapper) +//// m_mapper->deleteLater(); +//// m_mapper = new ModelMapper(this); + +// m_mapper.reset(new ModelMapper); +// m_mapper->setItem(jobItem); +// m_mapper->setOnPropertyChange( +// [this](const QString &name) +// { +// if(name == JobItem::P_COMMENTS) { +// updateItem(m_currentItem); +// } +// }); } diff --git a/GUI/coregui/Views/JobWidgets/JobPropertiesWidget.h b/GUI/coregui/Views/JobWidgets/JobPropertiesWidget.h index 753361e39fb0a4d387626d28f514a054fae944b8..b75fb0b3d310b512c7419a0e3e2430d709e546ec 100644 --- a/GUI/coregui/Views/JobWidgets/JobPropertiesWidget.h +++ b/GUI/coregui/Views/JobWidgets/JobPropertiesWidget.h @@ -27,7 +27,6 @@ class JobItem; class QTextEdit; class QTabWidget; class ComponentEditor; -class ModelMapper; //! Widget to show and change properties of currently selected JobItem //! Left buttom corner of JobView @@ -58,7 +57,6 @@ private: ComponentEditor *m_propertyEditor; QTextEdit *m_commentsEditor; bool m_block_update; - std::unique_ptr<ModelMapper> m_mapper; }; #endif diff --git a/GUI/coregui/Views/JobWidgets/ModelTuningDelegate.cpp b/GUI/coregui/Views/JobWidgets/ModelTuningDelegate.cpp index 57cf198b7176fd98e951855c8b62f9695217ea86..aa11bce1c4e0c8db355f3296d60ee2ce5be5c49c 100644 --- a/GUI/coregui/Views/JobWidgets/ModelTuningDelegate.cpp +++ b/GUI/coregui/Views/JobWidgets/ModelTuningDelegate.cpp @@ -183,7 +183,7 @@ QWidget *ModelTuningDelegate::createEditor(QWidget *parent, m_contentLayout->addWidget(m_valueBox); m_contentLayout->addWidget(m_slider); -// ModelMapper *mapper = new ModelMapper(m_contentWidget); +//// ModelMapper *mapper = new ModelMapper(m_contentWidget); m_mapper.reset(new ModelMapper); m_mapper->setItem(m_currentItem); @@ -192,6 +192,14 @@ QWidget *ModelTuningDelegate::createEditor(QWidget *parent, m_valueBox->setValue(m_currentItem->value().toDouble()); }); +// m_currentItem->mapper()->unsubscribe(this); +// m_currentItem->mapper()->setOnValueChange( +// [this](){ +// m_valueBox->setValue(m_currentItem->value().toDouble()); +// }, this); + + + m_contentWidget->setLayout(m_contentLayout); return m_contentWidget; diff --git a/GUI/coregui/Views/JobWidgets/ModelTuningWidget.cpp b/GUI/coregui/Views/JobWidgets/ModelTuningWidget.cpp index 28064f7caacdae759a845eff2336aee9500889eb..9da9cc621ea509f551a9836351015c6f36134311 100644 --- a/GUI/coregui/Views/JobWidgets/ModelTuningWidget.cpp +++ b/GUI/coregui/Views/JobWidgets/ModelTuningWidget.cpp @@ -95,29 +95,51 @@ ModelTuningWidget::~ModelTuningWidget() void ModelTuningWidget::setCurrentItem(JobItem *item) { - if (m_currentJobItem == item) return; + if (m_currentJobItem == item) { + return; + + } else { + if(m_currentJobItem) + m_currentJobItem->mapper()->unsubscribe(this); + + m_currentJobItem = item; + if (!m_currentJobItem) return; + updateParameterModel(); - m_currentJobItem = item; + m_currentJobItem->mapper()->setOnPropertyChange( + [this](const QString &name) + { + onPropertyChanged(name); + }, this); - if (!m_currentJobItem) return; + m_fitTools->setCurrentItem(m_currentJobItem, m_treeView->selectionModel()); + } - updateParameterModel(); +// if (m_currentJobItem == item) return; -// if (m_mapper) -// m_mapper->deleteLater(); -// m_mapper = new ModelMapper(this); - m_mapper.reset(new ModelMapper); - m_mapper->setItem(item); - m_mapper->setOnPropertyChange( - [this](const QString &name) - { - onPropertyChanged(name); - }); +// m_currentJobItem = item; + +// if (!m_currentJobItem) return; + +// updateParameterModel(); + +//// if (m_mapper) +//// m_mapper->deleteLater(); +//// m_mapper = new ModelMapper(this); + +// m_mapper.reset(new ModelMapper); +// m_mapper->setItem(item); +// m_mapper->setOnPropertyChange( +// [this](const QString &name) +// { +// onPropertyChanged(name); +// }); + +// m_fitTools->setCurrentItem(item, m_treeView->selectionModel()); - m_fitTools->setCurrentItem(item, m_treeView->selectionModel()); } void ModelTuningWidget::onCurrentLinkChanged(SessionItem *item) diff --git a/GUI/coregui/Views/JobWidgets/ModelTuningWidget.h b/GUI/coregui/Views/JobWidgets/ModelTuningWidget.h index 85b24754c94bfb8a51d6b65ac1764073a6f823e7..d3f82474e8b5b5aac5d55b021ee77c7e6851ae12 100644 --- a/GUI/coregui/Views/JobWidgets/ModelTuningWidget.h +++ b/GUI/coregui/Views/JobWidgets/ModelTuningWidget.h @@ -28,7 +28,6 @@ class QTreeView; class SampleModel; class InstrumentModel; class WarningSignWidget; -class ModelMapper; class SessionItem; class FitTools; @@ -65,7 +64,6 @@ private: ModelTuningDelegate *m_delegate; WarningSignWidget *m_warningSign; FitTools *m_fitTools; - std::unique_ptr<ModelMapper> m_mapper; }; #endif diff --git a/GUI/coregui/Views/MaskWidgets/IMaskView.cpp b/GUI/coregui/Views/MaskWidgets/IMaskView.cpp index 680b4d41c39de5e3010fafb65f79594c05332c67..4e2cd4626a319dbd1d9255d1b24b24aacc74723a 100644 --- a/GUI/coregui/Views/MaskWidgets/IMaskView.cpp +++ b/GUI/coregui/Views/MaskWidgets/IMaskView.cpp @@ -41,44 +41,64 @@ QRectF IMaskView::boundingRect() const void IMaskView::setParameterizedItem(SessionItem *item) { -// if(m_item != item) { -// if(m_item) { -// disconnect(m_item, SIGNAL(propertyChanged(const QString &)), this, -// SLOT(onPropertyChange(const QString &))); -// disconnect(m_item, SIGNAL(subItemChanged(const QString &)), this, -// SLOT(onPropertyChange(const QString &))); - -// } - -// m_item = item; + if(m_item == item) { + return; -// if(m_item) { -// connect(m_item, SIGNAL(propertyChanged(const QString &)), this, -// SLOT(onPropertyChange(const QString &))); -// connect(m_item, SIGNAL(subItemChanged(const QString &)), this, -// SLOT(onPropertyChange(const QString &))); -// } -// } + } else { + if(m_item) + m_item->mapper()->unsubscribe(this); - if(m_item != item) { m_item = item; + if(!m_item) return; -// if (m_mapper) -// m_mapper->deleteLater(); -// m_mapper = new ModelMapper(this); - - m_mapper.reset(new ModelMapper); - m_mapper->setItem(item); - m_mapper->setOnPropertyChange( + m_item->mapper()->setOnPropertyChange( [this](const QString &name) { onPropertyChange(name); - }); - + }, this); } + +//// if(m_item != item) { +//// if(m_item) { +//// disconnect(m_item, SIGNAL(propertyChanged(const QString &)), this, +//// SLOT(onPropertyChange(const QString &))); +//// disconnect(m_item, SIGNAL(subItemChanged(const QString &)), this, +//// SLOT(onPropertyChange(const QString &))); + +//// } + +//// m_item = item; + +//// if(m_item) { +//// connect(m_item, SIGNAL(propertyChanged(const QString &)), this, +//// SLOT(onPropertyChange(const QString &))); +//// connect(m_item, SIGNAL(subItemChanged(const QString &)), this, +//// SLOT(onPropertyChange(const QString &))); +//// } +//// } + +// if(m_item != item) { +// m_item = item; + +//// if (m_mapper) +//// m_mapper->deleteLater(); +//// m_mapper = new ModelMapper(this); + +// m_mapper.reset(new ModelMapper); +// m_mapper->setItem(item); +// m_mapper->setOnPropertyChange( +// [this](const QString &name) +// { +// onPropertyChange(name); +// }); + +// } + + + } SessionItem *IMaskView::getParameterizedItem() diff --git a/GUI/coregui/Views/MaskWidgets/IMaskView.h b/GUI/coregui/Views/MaskWidgets/IMaskView.h index 3c89bbeb805dfa517eb38d1a339d8b8315b9a7b9..e98286eb6727d16bb92f8c469ec1a7799430212a 100644 --- a/GUI/coregui/Views/MaskWidgets/IMaskView.h +++ b/GUI/coregui/Views/MaskWidgets/IMaskView.h @@ -25,7 +25,6 @@ class SessionItem; class ISceneAdaptor; class QPainter; -class ModelMapper; //! Main interface class for views representing MaskItems on graphics scene @@ -73,8 +72,6 @@ protected: SessionItem *m_item; const ISceneAdaptor *m_adaptor; QRectF m_bounding_rect; -// ModelMapper *m_mapper; - std::unique_ptr<ModelMapper> m_mapper; }; diff --git a/GUI/coregui/Views/SampleDesigner/DesignerScene.cpp b/GUI/coregui/Views/SampleDesigner/DesignerScene.cpp index 4d3a162d79f6157676226d257616d4107a222b4f..114fa5b1b8535aa95c7af84983572f09f84e977b 100644 --- a/GUI/coregui/Views/SampleDesigner/DesignerScene.cpp +++ b/GUI/coregui/Views/SampleDesigner/DesignerScene.cpp @@ -204,7 +204,7 @@ void DesignerScene::onSceneSelectionChanged() for (int i = 0; i < selected.size(); ++i) { IView *view = dynamic_cast<IView *>(selected[i]); if (view) { - SessionItem *sampleItem = view->getParameterizedItem(); + SessionItem *sampleItem = view->getItem(); QModelIndex itemIndex = m_sampleModel->indexOfItem(sampleItem); Q_ASSERT(itemIndex.isValid()); if (!m_selectionModel->isSelected(m_proxy->mapFromSource(itemIndex))) @@ -241,7 +241,7 @@ void DesignerScene::updateViews(const QModelIndex &parentIndex, IView *parentVie if (parentView) { qDebug() << " DesignerScene::updateViews() -> adding child " << item->modelType() << " to parent" - << parentView->getParameterizedItem()->modelType(); + << parentView->getItem()->modelType(); parentView->addView(childView, childCount++); } } @@ -380,11 +380,11 @@ void DesignerScene::onEstablishedConnection(NodeEditorConnection *connection) // childView->getParameterizedItem()->setPort(input_port_index); qDebug() << parentView->getInputPortIndex(connection->getInputPort()); QString tag; - if (connection->getParentView()->getParameterizedItem()->modelType() == Constants::ParticleLayoutType) { + if (connection->getParentView()->getItem()->modelType() == Constants::ParticleLayoutType) { if (connection->getInputPort()->getPortType() == NodeEditorPort::INTERFERENCE) tag = ParticleLayoutItem::T_INTERFERENCE; } - else if (connection->getParentView()->getParameterizedItem()->modelType() == Constants::ParticleCoreShellType) { + else if (connection->getParentView()->getItem()->modelType() == Constants::ParticleCoreShellType) { if (parentView->getInputPortIndex(connection->getInputPort()) == 0) tag = ParticleCoreShellItem::T_CORE; else if (parentView->getInputPortIndex(connection->getInputPort()) == 1) @@ -392,14 +392,14 @@ void DesignerScene::onEstablishedConnection(NodeEditorConnection *connection) else if (connection->getInputPort()->getPortType() == NodeEditorPort::TRANSFORMATION) tag = ParticleItem::T_TRANSFORMATION; - } else if (connection->getParentView()->getParameterizedItem()->modelType() == Constants::ParticleCompositionType) { + } else if (connection->getParentView()->getItem()->modelType() == Constants::ParticleCompositionType) { if (connection->getInputPort()->getPortType() == NodeEditorPort::TRANSFORMATION) tag = ParticleItem::T_TRANSFORMATION; } delete connection; // deleting just created connection because it will be recreated from the // model - m_sampleModel->moveParameterizedItem(childView->getParameterizedItem(), - parentView->getParameterizedItem(), -1, tag); + m_sampleModel->moveParameterizedItem(childView->getItem(), + parentView->getItem(), -1, tag); } //! propagates break of connection between views on scene to the model @@ -407,7 +407,7 @@ void DesignerScene::removeConnection(NodeEditorConnection *connection) { qDebug() << "DesignerScene::removeConnection()"; IView *childView = dynamic_cast<IView *>(connection->getOutputPort()->parentItem()); - m_sampleModel->moveParameterizedItem(childView->getParameterizedItem(), 0); + m_sampleModel->moveParameterizedItem(childView->getItem(), 0); } //! handles drag event diff --git a/GUI/coregui/Views/SampleDesigner/ILayerView.cpp b/GUI/coregui/Views/SampleDesigner/ILayerView.cpp index 690e11eebd0e13294b222ccd5c21956cf5fc8d50..40474d2878413b01fbd8345c1326299827d91951 100644 --- a/GUI/coregui/Views/SampleDesigner/ILayerView.cpp +++ b/GUI/coregui/Views/SampleDesigner/ILayerView.cpp @@ -107,7 +107,7 @@ void ILayerView::mousePressEvent(QGraphicsSceneMouseEvent *event) void ILayerView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { qDebug() << "ILayerView::mouseReleaseEvent() this:" << this - << getParameterizedItem()->itemName() << " parentItem: " << parentItem(); + << getItem()->itemName() << " parentItem: " << parentItem(); DesignerScene *designerScene = dynamic_cast<DesignerScene *>(scene()); Q_ASSERT(designerScene); @@ -145,7 +145,7 @@ void ILayerView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) // Layer was moved only slightly, to the same row of his own MultiLayer: returning back. if (requested_parent == parentItem() - && requested_row == getParameterizedItem()->parent()->getItems().indexOf(getParameterizedItem())) { + && requested_row == getItem()->parent()->getItems().indexOf(getItem())) { qDebug() << "1.2 Layer->MultiLayer (same), same drop area"; setPos(m_drag_start_position); QGraphicsItem::mouseReleaseEvent(event); @@ -157,7 +157,7 @@ void ILayerView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) if (parentItem() && !requested_parent) { qDebug() << "1.3 Layer->Scene"; setPos(mapToScene(event->pos()) - event->pos()); - model->moveParameterizedItem(this->getParameterizedItem(), 0); + model->moveParameterizedItem(this->getItem(), 0); QGraphicsItem::mouseReleaseEvent(event); return; } @@ -166,8 +166,8 @@ void ILayerView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) // one multilayer: changing ownership or row within same ownership. if (requested_parent) { qDebug() << "1.4 ILayerView->MultiLayer"; - model->moveParameterizedItem(this->getParameterizedItem(), - requested_parent->getParameterizedItem(), requested_row); + model->moveParameterizedItem(this->getItem(), + requested_parent->getItem(), requested_row); QGraphicsItem::mouseReleaseEvent(event); return; } diff --git a/GUI/coregui/Views/SampleDesigner/IView.cpp b/GUI/coregui/Views/SampleDesigner/IView.cpp index e18b5a5741a04f94ab64c5d401dc422f77fbb74c..ae8a4f3ac514789026dda64e5154d01b4cd910af 100644 --- a/GUI/coregui/Views/SampleDesigner/IView.cpp +++ b/GUI/coregui/Views/SampleDesigner/IView.cpp @@ -36,34 +36,30 @@ void IView::setParameterizedItem(SessionItem *item) Q_ASSERT(item); Q_ASSERT(m_item == nullptr); - if (item) { - m_item = item; - setX(m_item->getItemValue(SessionGraphicsItem::P_XPOS).toReal()); - setY(m_item->getItemValue(SessionGraphicsItem::P_YPOS).toReal()); + m_item = item; + setX(m_item->getItemValue(SessionGraphicsItem::P_XPOS).toReal()); + setY(m_item->getItemValue(SessionGraphicsItem::P_YPOS).toReal()); - m_mapper.reset(new ModelMapper); - m_mapper->setItem(item); - m_mapper->setOnPropertyChange( - [this] (const QString &name) - { - onPropertyChange(name); - }); + m_item->mapper()->setOnPropertyChange( + [this] (const QString &name) + { + onPropertyChange(name); + }, this); - m_mapper->setOnSiblingsChange( - [this]() - { - onSiblingsChange(); - }); + m_item->mapper()->setOnSiblingsChange( + [this]() + { + onSiblingsChange(); + }, this); - update_appearance(); - } + update_appearance(); } void IView::addView(IView *childView, int row) { qDebug() << "IView::addView() " << m_item->itemName() - << childView->getParameterizedItem()->itemName() << " row:" << row; + << childView->getItem()->itemName() << " row:" << row; } void IView::onChangedX() diff --git a/GUI/coregui/Views/SampleDesigner/IView.h b/GUI/coregui/Views/SampleDesigner/IView.h index 9f56ecdc61e356af22a0901dd0fbf3012d1a286a..0889d6d076554bf65659176f439b040df688af0d 100644 --- a/GUI/coregui/Views/SampleDesigner/IView.h +++ b/GUI/coregui/Views/SampleDesigner/IView.h @@ -22,7 +22,6 @@ #include <memory> class SessionItem; -class ModelMapper; //! parent class for graphic representation of all ISample's class BA_CORE_API_ IView : public QGraphicsObject @@ -38,7 +37,7 @@ public: virtual void setParameterizedItem(SessionItem *item); - virtual SessionItem *getParameterizedItem(); + virtual SessionItem *getItem(); virtual void addView(IView *childView, int row = 0); @@ -55,7 +54,6 @@ protected: virtual void onSiblingsChange(); SessionItem *m_item; - std::unique_ptr<ModelMapper> m_mapper; }; inline int IView::type() const @@ -63,7 +61,7 @@ inline int IView::type() const return TYPE; } -inline SessionItem *IView::getParameterizedItem() +inline SessionItem *IView::getItem() { return m_item; } diff --git a/GUI/coregui/Views/SampleDesigner/LayerView.cpp b/GUI/coregui/Views/SampleDesigner/LayerView.cpp index b24beeebe91bce880084f97c9d778f8c42b1c887..35b336a2a7012e93fc2b49f7ed2f3a1a7e06c6cd 100644 --- a/GUI/coregui/Views/SampleDesigner/LayerView.cpp +++ b/GUI/coregui/Views/SampleDesigner/LayerView.cpp @@ -54,7 +54,7 @@ void LayerView::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, void LayerView::addView(IView *childView, int /* row */) { - qDebug() << "LayerView::addView() " << m_item->itemName() << childView->getParameterizedItem()->itemName(); + qDebug() << "LayerView::addView() " << m_item->itemName() << childView->getItem()->itemName(); ParticleLayoutView *layout = dynamic_cast<ParticleLayoutView *>(childView); Q_ASSERT(layout); connectInputPort(layout, 0); diff --git a/GUI/coregui/Views/SampleDesigner/MultiLayerView.cpp b/GUI/coregui/Views/SampleDesigner/MultiLayerView.cpp index bf881f5d623876d3e94b440670333c3c7db5d19b..474eb4317184a44825dd11ff4f102dc410689dd6 100644 --- a/GUI/coregui/Views/SampleDesigner/MultiLayerView.cpp +++ b/GUI/coregui/Views/SampleDesigner/MultiLayerView.cpp @@ -57,7 +57,7 @@ void MultiLayerView::paint(QPainter *painter, const QStyleOptionGraphicsItem *op void MultiLayerView::addView(IView *childView, int row) { - qDebug() << "MultiLayerView::addView() " << m_item->itemName() << childView->getParameterizedItem()->itemName() << "row" << row; + qDebug() << "MultiLayerView::addView() " << m_item->itemName() << childView->getItem()->itemName() << "row" << row; ILayerView *layer = dynamic_cast<ILayerView *>(childView); Q_ASSERT(layer); @@ -254,7 +254,7 @@ void MultiLayerView::dropEvent(QGraphicsSceneDragDropEvent *event) qDebug() << "\n XXX" << getDropArea(event->scenePos()) << event->scenePos(); sampleModel->insertNewItem( mimeData->getClassName(), - sampleModel->indexOfItem(this->getParameterizedItem()), + sampleModel->indexOfItem(this->getItem()), getDropArea(event->pos()) ); } @@ -272,7 +272,7 @@ const DesignerMimeData *MultiLayerView::checkDragEvent(QGraphicsSceneDragDropEve int row = getDropArea(event->pos()); if(mimeData->hasFormat("bornagain/widget") - && getParameterizedItem()->acceptsAsDefaultItem(mimeData->getClassName()) + && getItem()->acceptsAsDefaultItem(mimeData->getClassName()) && row!=-1 ) { qDebug() << "MultiLayerView::checkDragEvent -> yes" << row << getDropAreaRectangle(row); diff --git a/GUI/coregui/Views/SampleDesigner/ParticleCompositionView.cpp b/GUI/coregui/Views/SampleDesigner/ParticleCompositionView.cpp index 1a43e63cb594f40eb3c11a415d0305a3a76542a8..bfce10b47e3af6cecabff43655e29e72daeaa7e2 100644 --- a/GUI/coregui/Views/SampleDesigner/ParticleCompositionView.cpp +++ b/GUI/coregui/Views/SampleDesigner/ParticleCompositionView.cpp @@ -38,7 +38,7 @@ void ParticleCompositionView::addView(IView *childView, int /* row */) int index = 0;//int(childView->getParameterizedItem()->port()); // ->getRegisteredProperty(ParameterizedItem::OBSOLETE_P_PORT) // .toInt(); - if (this->getParameterizedItem()->tagFromItem(childView->getParameterizedItem()) == ParticleItem::T_TRANSFORMATION) + if (this->getItem()->tagFromItem(childView->getItem()) == ParticleItem::T_TRANSFORMATION) index = 1; qDebug() << "ParticleCompositionView::addView()" << index; connectInputPort(dynamic_cast<ConnectableView *>(childView), index); diff --git a/GUI/coregui/Views/SampleDesigner/ParticleCoreShellView.cpp b/GUI/coregui/Views/SampleDesigner/ParticleCoreShellView.cpp index 7cf675063e1e4d36d8ee4b159d6eae8974912ef8..eea4e9e1ed0e2d563c97ea0b0b596c86f904991f 100644 --- a/GUI/coregui/Views/SampleDesigner/ParticleCoreShellView.cpp +++ b/GUI/coregui/Views/SampleDesigner/ParticleCoreShellView.cpp @@ -42,9 +42,9 @@ void ParticleCoreShellView::addView(IView *childView, int /* row */) // ->getRegisteredProperty(ParameterizedItem::OBSOLETE_P_PORT) // .toInt(); int index = 0; - if (this->getParameterizedItem()->tagFromItem(childView->getParameterizedItem()) == ParticleCoreShellItem::T_CORE) { + if (this->getItem()->tagFromItem(childView->getItem()) == ParticleCoreShellItem::T_CORE) { index = 0; - } else if (this->getParameterizedItem()->tagFromItem(childView->getParameterizedItem()) == ParticleCoreShellItem::T_SHELL) { + } else if (this->getItem()->tagFromItem(childView->getItem()) == ParticleCoreShellItem::T_SHELL) { index = 1; } else { index = 2; diff --git a/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.cpp b/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.cpp index bb11920aec4ccefc4e8918bb69a71fb1a897999d..ac0105fe54fedd248190f9d54d78cd30c81bd905 100644 --- a/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.cpp +++ b/GUI/coregui/Views/SampleDesigner/ParticleLayoutView.cpp @@ -37,7 +37,7 @@ ParticleLayoutView::ParticleLayoutView(QGraphicsItem *parent) void ParticleLayoutView::addView(IView *childView, int /* row */) { qDebug() << "ParticleLayoutView::addView() xxx " << m_item->itemName() - << childView->getParameterizedItem()->itemName() << childView->type() + << childView->getItem()->itemName() << childView->type() << DesignerHelper::PARTICLE; if(childView->type() == DesignerHelper::PARTICLE) { connectInputPort(dynamic_cast<ConnectableView *>(childView), 0); diff --git a/GUI/coregui/Views/SampleDesigner/ParticleView.cpp b/GUI/coregui/Views/SampleDesigner/ParticleView.cpp index 09a065cc2706363d08c4d8859b28ffeb7daded93..08109d4a6c985309a7d915bb8a8835683c97add7 100644 --- a/GUI/coregui/Views/SampleDesigner/ParticleView.cpp +++ b/GUI/coregui/Views/SampleDesigner/ParticleView.cpp @@ -100,7 +100,7 @@ void ParticleView::updatePixmap() { GroupProperty_t group_property = dynamic_cast<GroupItem *>( - getParameterizedItem()->getItem(ParticleItem::P_FORM_FACTOR)) + getItem()->getItem(ParticleItem::P_FORM_FACTOR)) ->group(); QString current_ff_type = group_property->getCurrentType(); QString filename diff --git a/GUI/coregui/Views/SampleDesigner/SampleViewAligner.cpp b/GUI/coregui/Views/SampleDesigner/SampleViewAligner.cpp index 4bc107554afd9a41203fdf74f41eb908a0202d76..4b7d7b8128a9157e8333a50b8551beb558a940e6 100644 --- a/GUI/coregui/Views/SampleDesigner/SampleViewAligner.cpp +++ b/GUI/coregui/Views/SampleDesigner/SampleViewAligner.cpp @@ -118,7 +118,7 @@ QList<IView *> SampleViewAligner::getConnectedViews(IView *view) { QList<IView *> result; - SessionItem *itemOfView = view->getParameterizedItem(); + SessionItem *itemOfView = view->getItem(); QList<SessionItem *> connected_items; diff --git a/Tests/UnitTests/TestGUI/TestMapperForItem.h b/Tests/UnitTests/TestGUI/TestMapperForItem.h index 1a5ae46a3c5ca37b8f8cac86544c9c4d05d583d9..e52bad899772cb3cf9b3414871c853b4fbfaa980 100644 --- a/Tests/UnitTests/TestGUI/TestMapperForItem.h +++ b/Tests/UnitTests/TestGUI/TestMapperForItem.h @@ -124,12 +124,12 @@ public: , m_mapped_item(0) { } - void setItem(SessionItem *item, Widget *widget, bool with_subscription = false) + void setItem(SessionItem *item, Widget *widget = 0, bool with_subscription = false) { m_mapped_item = item; m_mapper.reset(new ModelMapper); m_mapper->setItem(item); - widget->subscribe(m_mapper.get(), with_subscription); + if(widget) widget->subscribe(m_mapper.get(), with_subscription); } private: @@ -143,6 +143,7 @@ private slots: void test_onChildrenChange(); void test_onSiblingsChange(); void test_Subscription(); + void test_TwoWidgetsSubscription(); }; inline void TestMapperForItem::test_initialCondition() @@ -310,11 +311,37 @@ inline void TestMapperForItem::test_Subscription() layer->setItemValue(LayerItem::P_THICKNESS, 2.0); QCOMPARE(w.m_onPropertyChangeCount, 2); + // unsubscribe widget and check that it doesn't react on item value change w.unsubscribe(m_mapper.get()); layer->setItemValue(LayerItem::P_THICKNESS, 3.0); QCOMPARE(w.m_onPropertyChangeCount, 2); } +inline void TestMapperForItem::test_TwoWidgetsSubscription() +{ + Widget w1, w2; + SampleModel model; + SessionItem *multilayer = model.insertNewItem(Constants::MultiLayerType); + SessionItem *layer = model.insertNewItem(Constants::LayerType, model.indexOfItem(multilayer)); + + // Mapper is looking on child; set property of child + setItem(layer); + w1.subscribe(m_mapper.get(), true); + w2.subscribe(m_mapper.get(), true); + QCOMPARE(w1.m_onPropertyChangeCount, 0); + QCOMPARE(w2.m_onPropertyChangeCount, 0); + + layer->setItemValue(LayerItem::P_THICKNESS, 1.0); + QCOMPARE(w1.m_onPropertyChangeCount, 1); + QCOMPARE(w2.m_onPropertyChangeCount, 1); + + w1.unsubscribe(m_mapper.get()); + layer->setItemValue(LayerItem::P_THICKNESS, 2.0); + QCOMPARE(w1.m_onPropertyChangeCount, 1); + QCOMPARE(w2.m_onPropertyChangeCount, 2); + +} + #endif