diff --git a/GUI/coregui/Models/BeamDistributionItem.cpp b/GUI/coregui/Models/BeamDistributionItem.cpp index 5d155bc4f0eff1ae3390fd0775821595d80135a0..44615c2678cf2850c7ae5e489547215e6570613e 100644 --- a/GUI/coregui/Models/BeamDistributionItem.cpp +++ b/GUI/coregui/Models/BeamDistributionItem.cpp @@ -19,8 +19,8 @@ #include "Distributions.h" #include "ParameterDistribution.h" #include "Units.h" +#include "GroupItem.h" #include "GUIHelpers.h" - #include <QDebug> const QString BeamDistributionItem::P_DISTRIBUTION = "Distribution"; @@ -30,6 +30,24 @@ BeamDistributionItem::BeamDistributionItem(const QString name) { addGroupProperty(P_DISTRIBUTION, Constants::DistributionExtendedGroup); setGroupProperty(P_DISTRIBUTION, Constants::DistributionNoneType); + + + mapper()->setOnChildPropertyChange( + [this](SessionItem* item, const QString &name) + { + qDebug() << "AAAAA" << item->modelType() << name; + if(item->modelType() == Constants::GroupItemType) { + initDistributionItem(); + } +// if (item->modelType() == Constants::IntensityDataType +// && name == IntensityDataItem::P_AXES_UNITS) { +// auto intensityItem = dynamic_cast<IntensityDataItem *>(item); +// JobItemHelper::updateDataAxes(intensityItem, getInstrumentItem()); +// qDebug() << "QQQQ" << item->modelType() << name; + +// } + }); + } //! returns parameter distribution to add into the Simulation @@ -68,6 +86,33 @@ BeamDistributionItem::getParameterDistributionForName(const std::string ¶met return P_par_distr; } +//! Propagates the value stored in DistributionNone type into currently activive distribution. + +void BeamDistributionItem::initDistributionItem() +{ + GroupItem *groupItem = dynamic_cast<GroupItem *>(getItem(P_DISTRIBUTION)); + Q_ASSERT(groupItem); + + SessionItem *distributionNone(0); + foreach(SessionItem *item, groupItem->getItems(GroupItem::T_ITEMS)) { + if(item->modelType() == Constants::DistributionNoneType) { + distributionNone = item; + break; + } + } + + if(!distributionNone) + return; + + if(distributionNone != groupItem->currentItem()) { + DistributionItem *distrItem = dynamic_cast<DistributionItem *>(groupItem->currentItem()); + Q_ASSERT(distrItem); + distrItem->init_parameters(distributionNone->getItemValue(DistributionNoneItem::P_VALUE).toDouble()); + } + + +} + std::unique_ptr<IDistribution1D> BeamDistributionItem::createDistribution1D() { std::unique_ptr<IDistribution1D> P_distribution {}; diff --git a/GUI/coregui/Models/BeamDistributionItem.h b/GUI/coregui/Models/BeamDistributionItem.h index 04b54eaeccb5bbe1f569b9d7f9737cccfdec7d83..bf90cb176a72178399c8eb9795cddda8c0a012c0 100644 --- a/GUI/coregui/Models/BeamDistributionItem.h +++ b/GUI/coregui/Models/BeamDistributionItem.h @@ -37,8 +37,9 @@ public: std::unique_ptr<ParameterDistribution> getParameterDistributionForName( const std::string ¶meter_name); - protected: + void initDistributionItem(); + virtual std::unique_ptr<IDistribution1D> createDistribution1D(); }; diff --git a/GUI/coregui/Models/DistributionItem.cpp b/GUI/coregui/Models/DistributionItem.cpp index 3fcde0023a72e24dcb903ee633c4e5e1fad21118..2d5dfbec66570bda032d8bc653420db28fcfa23c 100644 --- a/GUI/coregui/Models/DistributionItem.cpp +++ b/GUI/coregui/Models/DistributionItem.cpp @@ -23,10 +23,25 @@ const QString DistributionItem::P_NUMBER_OF_SAMPLES = "Number of samples"; const QString DistributionItem::P_SIGMA_FACTOR = "Sigma factor"; +const QString DistributionItem::P_IS_INITIALIZED = "is initialized"; DistributionItem::DistributionItem(const QString name) : SessionItem(name) { + addProperty(P_IS_INITIALIZED, false)->setVisible(false); +} + +//! Provides initialization of the distribution with some reasonable parameters around given value. +//! Used by beamDistributionItem to propagate value from DistributionNone to the distribution +//! currently selected by GroupItem. + +void DistributionItem::init_parameters(double value) +{ + if(getItemValue(P_IS_INITIALIZED).toBool()) + return; + + init_distribution(value); + setItemValue(P_IS_INITIALIZED, true); } void DistributionItem::register_number_of_samples() @@ -55,7 +70,7 @@ std::unique_ptr<IDistribution1D> DistributionNoneItem::createDistribution() cons return nullptr; } -void DistributionNoneItem::init_parameters(double value) +void DistributionNoneItem::init_distribution(double value) { setItemValue(DistributionNoneItem::P_VALUE, value); } @@ -81,7 +96,7 @@ std::unique_ptr<IDistribution1D> DistributionGateItem::createDistribution() cons return GUIHelpers::make_unique<DistributionGate>(min, max); } -void DistributionGateItem::init_parameters(double value) +void DistributionGateItem::init_distribution(double value) { double sigma(0.1*std::abs(value)); if(sigma == 0.0) sigma = 0.1; @@ -110,7 +125,7 @@ std::unique_ptr<IDistribution1D> DistributionLorentzItem::createDistribution() c return GUIHelpers::make_unique<DistributionLorentz>(mean, hwhm); } -void DistributionLorentzItem::init_parameters(double value) +void DistributionLorentzItem::init_distribution(double value) { double sigma(0.1*std::abs(value)); if(sigma == 0.0) sigma = 0.1; @@ -141,7 +156,7 @@ std::unique_ptr<IDistribution1D> DistributionGaussianItem::createDistribution() return GUIHelpers::make_unique<DistributionGaussian>(mean, std_dev); } -void DistributionGaussianItem::init_parameters(double value) +void DistributionGaussianItem::init_distribution(double value) { double sigma(0.1*std::abs(value)); if(sigma == 0.0) sigma = 0.1; @@ -172,7 +187,7 @@ std::unique_ptr<IDistribution1D> DistributionLogNormalItem::createDistribution() return GUIHelpers::make_unique<DistributionLogNormal>(median, scale_par); } -void DistributionLogNormalItem::init_parameters(double value) +void DistributionLogNormalItem::init_distribution(double value) { double sigma(0.1*std::abs(value)); if(sigma == 0.0) sigma = 0.1; @@ -203,7 +218,7 @@ std::unique_ptr<IDistribution1D> DistributionCosineItem::createDistribution() co return GUIHelpers::make_unique<DistributionCosine>(mean, sigma); } -void DistributionCosineItem::init_parameters(double value) +void DistributionCosineItem::init_distribution(double value) { double sigma(0.1*std::abs(value)); if(sigma == 0.0) sigma = 0.1; diff --git a/GUI/coregui/Models/DistributionItem.h b/GUI/coregui/Models/DistributionItem.h index 31cf0b6e421820c70b51c3c28c6962533422fc0d..dc35f3dd18c34eb292eeac5923a5b276c89f37e1 100644 --- a/GUI/coregui/Models/DistributionItem.h +++ b/GUI/coregui/Models/DistributionItem.h @@ -30,11 +30,13 @@ class BA_CORE_API_ DistributionItem : public SessionItem public: static const QString P_NUMBER_OF_SAMPLES; static const QString P_SIGMA_FACTOR; + static const QString P_IS_INITIALIZED; explicit DistributionItem(const QString name); virtual std::unique_ptr<IDistribution1D> createDistribution() const=0; - virtual void init_parameters(double){} + void init_parameters(double); protected: + virtual void init_distribution(double){} void register_number_of_samples(); void register_sigma_factor(); }; @@ -46,7 +48,7 @@ public: static const QString P_VALUE; explicit DistributionNoneItem(); virtual std::unique_ptr<IDistribution1D> createDistribution() const; - virtual void init_parameters(double value); + virtual void init_distribution(double value); }; @@ -59,7 +61,7 @@ public: explicit DistributionGateItem(); virtual std::unique_ptr<IDistribution1D> createDistribution() const; - virtual void init_parameters(double value); + virtual void init_distribution(double value); }; @@ -72,7 +74,7 @@ public: explicit DistributionLorentzItem(); virtual std::unique_ptr<IDistribution1D> createDistribution() const; - virtual void init_parameters(double value); + virtual void init_distribution(double value); }; @@ -85,7 +87,7 @@ public: explicit DistributionGaussianItem(); virtual std::unique_ptr<IDistribution1D> createDistribution() const; - virtual void init_parameters(double value); + virtual void init_distribution(double value); }; @@ -98,7 +100,7 @@ public: explicit DistributionLogNormalItem(); virtual std::unique_ptr<IDistribution1D> createDistribution() const; - virtual void init_parameters(double value); + virtual void init_distribution(double value); }; @@ -111,7 +113,7 @@ public: explicit DistributionCosineItem(); virtual std::unique_ptr<IDistribution1D> createDistribution() const; - virtual void init_parameters(double value); + virtual void init_distribution(double value); }; #endif // DISTRIBUTIONITEM_H diff --git a/GUI/coregui/Models/GroupItem.cpp b/GUI/coregui/Models/GroupItem.cpp index 32e6c986286596be9d8216ca7c0e0cb7a18e665b..dbbe23a613b6a4d385fa174997748987ea734bfe 100644 --- a/GUI/coregui/Models/GroupItem.cpp +++ b/GUI/coregui/Models/GroupItem.cpp @@ -48,7 +48,7 @@ GroupProperty_t GroupItem::group() const return value().value<GroupProperty_t>(); } -SessionItem *GroupItem::getCurrentItem() +SessionItem *GroupItem::currentItem() { return group()->getCurrentItem(); } diff --git a/GUI/coregui/Models/GroupItem.h b/GUI/coregui/Models/GroupItem.h index 78dab7746f603fb5bfc5807256c55baa50bceaef..ff9be7e97ab1487de333dc06dab0f7978ba7bcd2 100644 --- a/GUI/coregui/Models/GroupItem.h +++ b/GUI/coregui/Models/GroupItem.h @@ -28,7 +28,7 @@ public: GroupItem(); void setGroup(GroupProperty_t group); GroupProperty_t group() const; - SessionItem *getCurrentItem(); + SessionItem *currentItem(); }; #endif diff --git a/GUI/coregui/Views/FitWidgets/FitParameterWidget.cpp b/GUI/coregui/Views/FitWidgets/FitParameterWidget.cpp index cc512789fd7753524ee521df13c729f4f312c656..2e0e2fed7c614fd983416a4b6030c7a6c5671fee 100644 --- a/GUI/coregui/Views/FitWidgets/FitParameterWidget.cpp +++ b/GUI/coregui/Views/FitWidgets/FitParameterWidget.cpp @@ -63,6 +63,8 @@ FitParameterWidget::FitParameterWidget(QWidget *parent) m_treeView->setDragEnabled(true); m_treeView->setDragDropMode(QAbstractItemView::DragDrop); m_treeView->installEventFilter(m_keyboardFilter); + m_treeView->setAlternatingRowColors(true); + m_treeView->setStyleSheet("alternate-background-color: #EFF0F1;"); connect(m_treeView, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onFitParameterTreeContextMenu(const QPoint &))); diff --git a/GUI/coregui/Views/InfoWidgets/DistributionEditor.cpp b/GUI/coregui/Views/InfoWidgets/DistributionEditor.cpp index 21f106ce6f465802680d71ab19796bfebdefdbfb..37c257a0c9cfeea71ef278fe9428873788465a8a 100644 --- a/GUI/coregui/Views/InfoWidgets/DistributionEditor.cpp +++ b/GUI/coregui/Views/InfoWidgets/DistributionEditor.cpp @@ -84,7 +84,7 @@ void DistributionEditor::setItem(SessionItem *item) }, this); DistributionItem *distrItem = dynamic_cast<DistributionItem *>( - m_item->getCurrentItem()); + m_item->currentItem()); Q_ASSERT(distrItem); m_plotwidget->setItem(distrItem); } @@ -94,7 +94,7 @@ void DistributionEditor::onPropertyChanged(const QString &property_name) { if (property_name == GroupItem::T_ITEMS) { DistributionItem *distrItem = dynamic_cast<DistributionItem *>( - m_item->getCurrentItem()); + m_item->currentItem()); Q_ASSERT(distrItem); m_plotwidget->setItem(distrItem); } diff --git a/GUI/coregui/Views/PropertyEditor/ComponentBoxEditor.cpp b/GUI/coregui/Views/PropertyEditor/ComponentBoxEditor.cpp index 50aa0e6aa0ff718d0c46608551b3d26fe5e9b3c4..0d909be4f02d9eb5ed75ddd88df236d1db51f91e 100644 --- a/GUI/coregui/Views/PropertyEditor/ComponentBoxEditor.cpp +++ b/GUI/coregui/Views/PropertyEditor/ComponentBoxEditor.cpp @@ -18,8 +18,6 @@ #include "SessionModel.h" #include "CustomEventFilters.h" #include <QModelIndex> -#include <QDebug> - ComponentBoxEditor::ComponentBoxEditor(QWidget *parent) : ComponentEditor(ComponentEditorFlags::BROWSER_GROUPBOX, parent) @@ -39,7 +37,7 @@ void ComponentBoxEditor::updatePropertyItems(SessionItem *item, QtVariantPropert { if(item->modelType() == Constants::PropertyType || item->modelType() == Constants::GroupItemType) { - updateItem(item, parentProperty); + updateItem(item, parentProperty); } if(m_d->m_item_to_insert_mode.contains(item)) { @@ -78,9 +76,6 @@ void ComponentBoxEditor::onDataChanged(const QModelIndex &topLeft, const QModelI SessionItem *item = model->itemForIndex(topLeft); Q_ASSERT(item); - qDebug() << " ComponentEditor::onDataChanged" << m_d->m_presentationType - << roles << item->modelType() << item->displayName(); - if (QtVariantProperty *property = m_d->getPropertyForItem(item)) { // updating editor's property appearance (tooltips, limits) if (roles.contains(SessionModel::FlagRole)) { diff --git a/GUI/coregui/Views/PropertyEditor/ComponentEditor.cpp b/GUI/coregui/Views/PropertyEditor/ComponentEditor.cpp index b75bc95c228b1bcfb2ed9c2ab6fac3b578ab1925..fe83fc1f721ab8e4804557984c32cecf0de9793a 100644 --- a/GUI/coregui/Views/PropertyEditor/ComponentEditor.cpp +++ b/GUI/coregui/Views/PropertyEditor/ComponentEditor.cpp @@ -24,7 +24,6 @@ #include <QVBoxLayout> #include <QVariant> -#include <QDebug> ComponentEditor::ComponentEditor(ComponentEditorFlags::PresentationType flags, QWidget *parent) : QWidget(parent) @@ -107,13 +106,8 @@ void ComponentEditor::onDataChanged(const QModelIndex &topLeft, SessionItem *item = model->itemForIndex(topLeft); Q_ASSERT(item); - qDebug() << " ComponentEditor::onDataChanged" << m_d->m_presentationType - << roles << item->modelType() << item->displayName(); - if(m_d->m_changedItems.contains(item)) return; - qDebug() << " ComponentEditor::onDataChanged 1.2 processing"; - if (QtVariantProperty *property = m_d->getPropertyForItem(item)) { // updating editor's property appearance (tooltips, limits) if (roles.contains(SessionModel::FlagRole)) { @@ -138,10 +132,9 @@ void ComponentEditor::onDataChanged(const QModelIndex &topLeft, //! Updates the editor starting from given SessionItem's parent. //! Editor should know already about given item (i.e. corresponding //! QtVariantProperty should exist. -void ComponentEditor::onRowsInserted(const QModelIndex &parent, int first, - int last) +void ComponentEditor::onRowsInserted(const QModelIndex &parent, int, + int ) { - qDebug() << "ComponentEditor::onRowsInserted" << parent << first << last; SessionModel *model = qobject_cast<SessionModel *>(sender()); SessionItem *item = model->itemForIndex(parent); @@ -157,16 +150,13 @@ void ComponentEditor::onRowsInserted(const QModelIndex &parent, int first, void ComponentEditor::onQtPropertyChanged(QtProperty *property, const QVariant &value) { - qDebug() << "ComponentEditor::onQtPropertyChanged" << property << value; if (SessionItem *item = m_d->getItemForProperty(property)) { Q_ASSERT(item); - qDebug() << "Disconnecting"; // disconnectModel(item->model()); m_d->m_changedItems.append(item); item->setValue(value); // connectModel(item->model()); m_d->m_changedItems.removeAll(item); - qDebug() << "Connected"; } } @@ -202,7 +192,8 @@ ComponentEditor::componentItems(SessionItem *item) const if (item->modelType() == Constants::GroupItemType) { foreach (SessionItem *childOfChild, child->childItems()) { - result.append(childOfChild); + if (childOfChild->isVisible()) + result.append(childOfChild); } }