diff --git a/GUI/coregui/Models/BeamItem.cpp b/GUI/coregui/Models/BeamItem.cpp index f703949e972e124d6bd511c362fa4c52d785c6f8..ab44487835321a58271c97d89e85c8686de748a7 100644 --- a/GUI/coregui/Models/BeamItem.cpp +++ b/GUI/coregui/Models/BeamItem.cpp @@ -17,6 +17,7 @@ #include "InterferenceFunctionItems.h" #include "ComboProperty.h" #include "AngleProperty.h" +#include "DistributionItem.h" #include "Units.h" #include <QDebug> @@ -53,7 +54,7 @@ void BeamItem::onPropertyChange(const QString &name) const QString BeamWavelengthItem::P_DISTRIBUTION = "Distribution"; -const QString BeamWavelengthItem::P_VALUE = "Value"; +const QString BeamWavelengthItem::P_CACHED_VALUE = "Value"; BeamWavelengthItem::BeamWavelengthItem(ParameterizedItem *parent) : ParameterizedItem(Constants::BeamWavelengthType, parent) @@ -61,28 +62,53 @@ BeamWavelengthItem::BeamWavelengthItem(ParameterizedItem *parent) setItemName(Constants::BeamWavelengthType); registerGroupProperty(P_DISTRIBUTION, Constants::DistributionExtendedGroup); setGroupProperty(P_DISTRIBUTION, Constants::DistributionGateType); - registerProperty(P_VALUE, 0.1, PropertyAttribute(AttLimits::lowerLimited(1e-4), 4)); + registerProperty(P_CACHED_VALUE, 0.1, PropertyAttribute(PropertyAttribute::HIDDEN, AttLimits::lowerLimited(1e-4), 4)); } void BeamWavelengthItem::onPropertyChange(const QString &name) { + qDebug() << " "; + qDebug() << " "; + qDebug() << " "; + qDebug() << " "; + qDebug() << "BeamWavelengthItem::onPropertyChange(const QString &name)" << name; + if(name == P_DISTRIBUTION) { ParameterizedItem *distribution = getSubItems()[P_DISTRIBUTION]; if(distribution) { if(distribution->modelType() == Constants::DistributionNoneType) { - setPropertyAppearance(P_VALUE, PropertyAttribute::VISIBLE); + setPropertyAppearance(P_CACHED_VALUE, PropertyAttribute::VISIBLE); qDebug() << "XXX setting to visible"; } else { - setPropertyAppearance(P_VALUE, PropertyAttribute::HIDDEN); + setPropertyAppearance(P_CACHED_VALUE, PropertyAttribute::HIDDEN); qDebug() << "XXX setting to hidden"; } - ParameterizedItem::onPropertyChange(P_VALUE); + ParameterizedItem::onPropertyChange(P_CACHED_VALUE); } } ParameterizedItem::onPropertyChange(name); } +void BeamWavelengthItem::onSubItemChanged(const QString &propertyName) +{ + qDebug() << " "; + qDebug() << " "; + qDebug() << " "; + qDebug() << " "; + qDebug() << "BeamWavelengthItem::onSubItemChanged(const QString &propertyName)" << propertyName; + if(propertyName == P_DISTRIBUTION) { + ParameterizedItem *distribution = getSubItems()[P_DISTRIBUTION]; + Q_ASSERT(distribution); + if(distribution->modelType() == Constants::DistributionNoneType) { + double cached_value = getRegisteredProperty(P_CACHED_VALUE).toDouble(); + distribution->setRegisteredProperty(DistributionNoneItem::P_VALUE, cached_value); + distribution->setPropertyAttribute(DistributionNoneItem::P_VALUE, PropertyAttribute(AttLimits::lowerLimited(1e-4), 4)); + } + } + ParameterizedItem::onSubItemChanged(propertyName); +} + const QString TestBeamItem::P_INTENSITY = "Intensity [1/s]"; const QString TestBeamItem::P_WAVELENGTH = "Wavelength"; diff --git a/GUI/coregui/Models/BeamItem.h b/GUI/coregui/Models/BeamItem.h index 4f2d15d8a418032d8b55926222e069a9c2daf420..bcdedbe25cdb104686102d3d7195814301270d16 100644 --- a/GUI/coregui/Models/BeamItem.h +++ b/GUI/coregui/Models/BeamItem.h @@ -40,10 +40,11 @@ class BA_CORE_API_ BeamWavelengthItem : public ParameterizedItem Q_OBJECT public: static const QString P_DISTRIBUTION; - static const QString P_VALUE; + static const QString P_CACHED_VALUE; explicit BeamWavelengthItem(ParameterizedItem *parent=0); ~BeamWavelengthItem(){} void onPropertyChange(const QString &name); + void onSubItemChanged(const QString &propertyName); }; diff --git a/GUI/coregui/Models/FancyGroupProperty.cpp b/GUI/coregui/Models/FancyGroupProperty.cpp index 907747af573077feb774b803cac099d5bb5e6c44..4ac972485a8af70619376740f02be546f9eda439 100644 --- a/GUI/coregui/Models/FancyGroupProperty.cpp +++ b/GUI/coregui/Models/FancyGroupProperty.cpp @@ -64,7 +64,7 @@ void FancyGroupProperty::setValue(const QString &value) if(m_parent) { m_parent->addPropertyItem(getGroupName(), createCorrespondingItem()); - emit m_parent->subItemChanged(getGroupName()); + //emit m_parent->subItemChanged(getGroupName()); } } diff --git a/GUI/coregui/Models/ParameterizedItem.cpp b/GUI/coregui/Models/ParameterizedItem.cpp index 3aae81f704b141484aa36636a4c5f1b2e08af8ef..b48c3a2840ce8b5c3125099f29de04fa03065441 100644 --- a/GUI/coregui/Models/ParameterizedItem.cpp +++ b/GUI/coregui/Models/ParameterizedItem.cpp @@ -143,28 +143,6 @@ void ParameterizedItem::setItemPort(ParameterizedItem::PortInfo::EPorts nport) setRegisteredProperty(P_PORT, nport); } - -//! this slot is called when SubItem change one of its properties -void ParameterizedItem::onSubItemPropertyChanged(const QString & propertyName) -{ - Q_UNUSED(propertyName); - ParameterizedItem *propertyItem = qobject_cast<ParameterizedItem *>(sender()); - for(QMap<QString, ParameterizedItem *>::iterator it=m_sub_items.begin(); - it!= m_sub_items.end(); ++it) { - if(it.value() == propertyItem) { - FancyGroupProperty_t group_property = - getRegisteredProperty(it.key()).value<FancyGroupProperty_t>(); - group_property->setValueLabel(propertyItem->getItemLabel()); - emit subItemPropertyChanged(it.key(), propertyName); - if (m_parent) m_parent->onChildPropertyChange(); - return; - } - } - throw GUIHelpers::Error("ParameterizedItem::onSubItemPropertyChanged() ->" - " Error. No such propertyItem found"); -} - - void ParameterizedItem::addToValidChildren(const QString &name, PortInfo::EPorts nport, int nmax_items) { m_valid_children.append(name); @@ -177,7 +155,6 @@ void ParameterizedItem::addToValidChildren(const QString &name, PortInfo::EPorts } } - void ParameterizedItem::addPropertyItem(QString name, ParameterizedItem *item) { //if (!item) return; @@ -191,12 +168,12 @@ void ParameterizedItem::addPropertyItem(QString name, ParameterizedItem *item) } m_sub_items[name] = item; item->m_parent = this; - connect(item, SIGNAL(propertyChanged(QString)), this, SLOT(onSubItemPropertyChanged(QString))); + //connect(item, SIGNAL(propertyChanged(QString)), this, SLOT(onSubItemPropertyChanged(QString)), Qt::UniqueConnection); + onSubItemChanged(name); onChildPropertyChange(); qDebug() << "ParameterizedItem::addPropertyItem() -> about to leave" << name; } - ParameterizedItem *ParameterizedItem::registerGroupProperty(const QString &group_name, const Constants::ModelType &group_model) { qDebug() << "ParameterizedItem::registerGroupProperty() ->" @@ -337,6 +314,39 @@ void ParameterizedItem::onChildPropertyChange() if (m_parent) m_parent->onChildPropertyChange(); } +//! called when new SubItem appeared +void ParameterizedItem::onSubItemChanged(const QString &propertyName) +{ + connect(m_sub_items[propertyName], SIGNAL(propertyChanged(QString)), this, SLOT(processSubItemPropertyChanged(QString)), Qt::UniqueConnection); + emit subItemChanged(propertyName); +} + +//! called when SubItem change one of its properties +void ParameterizedItem::processSubItemPropertyChanged(const QString & propertyName) +{ + Q_UNUSED(propertyName); + ParameterizedItem *propertyItem = qobject_cast<ParameterizedItem *>(sender()); + for(QMap<QString, ParameterizedItem *>::iterator it=m_sub_items.begin(); + it!= m_sub_items.end(); ++it) { + if(it.value() == propertyItem) { + FancyGroupProperty_t group_property = + getRegisteredProperty(it.key()).value<FancyGroupProperty_t>(); + group_property->setValueLabel(propertyItem->getItemLabel()); +// emit subItemPropertyChanged(it.key(), propertyName); +// if (m_parent) m_parent->onChildPropertyChange(); + onSubItemPropertyChanged(it.key(), propertyName); + return; + } + } + throw GUIHelpers::Error("ParameterizedItem::onSubItemPropertyChanged() ->" + " Error. No such propertyItem found"); +} + +void ParameterizedItem::onSubItemPropertyChanged(const QString &property_group, const QString &property_name) +{ + emit subItemPropertyChanged(property_group, property_name); + if (m_parent) m_parent->onChildPropertyChange(); +} PropertyAttribute ParameterizedItem::getPropertyAttribute(const QString &name) const { diff --git a/GUI/coregui/Models/ParameterizedItem.h b/GUI/coregui/Models/ParameterizedItem.h index 9819a03e30fef80a8f0b84a96edaa99cd0d3ba23..1ece46eb838fa37384dfb8a87e83c9c1bef25459 100644 --- a/GUI/coregui/Models/ParameterizedItem.h +++ b/GUI/coregui/Models/ParameterizedItem.h @@ -130,18 +130,22 @@ public: QStringList getParameterTreeList() const; virtual void onChildPropertyChange(); - -public slots: - virtual void onSubItemPropertyChanged(const QString &propertyName); + void setPropertyAttribute(const QString &name, const PropertyAttribute &attribute); signals: void propertyChanged(const QString &propertyName); void subItemChanged(const QString &propertyName); void subItemPropertyChanged(const QString &property_group, const QString &property_name); +protected slots: + virtual void onSubItemChanged(const QString &propertyName); + virtual void onSubItemPropertyChanged(const QString &property_group, const QString &property_name); + +private slots: + virtual void processSubItemPropertyChanged(const QString &propertyName); + protected: void addToValidChildren(const QString &name, PortInfo::EPorts nport = PortInfo::PORT_0, int nmax_children = 0); - void setPropertyAttribute(const QString &name, const PropertyAttribute &attribute); QStringList m_registered_properties; diff --git a/GUI/coregui/Views/PropertyEditor/AwesomePropertyEditor.cpp b/GUI/coregui/Views/PropertyEditor/AwesomePropertyEditor.cpp index 158fe1554b824606b787274b3e0e66fb1983c469..24ff22c06eda0d185eb023b2f875d3d3ef409cb0 100644 --- a/GUI/coregui/Views/PropertyEditor/AwesomePropertyEditor.cpp +++ b/GUI/coregui/Views/PropertyEditor/AwesomePropertyEditor.cpp @@ -402,7 +402,9 @@ void AwesomePropertyEditor::insertQtVariantProperty(QtVariantProperty *qtVariant } else { // our parent property is already at the top, so need to add into the browser QtBrowserItem *browserItem = m_d->m_browser->insertProperty(qtVariantItem, parent_qtproperty); - Q_ASSERT(browserItem); + if(!browserItem) { + throw GUIHelpers::Error("AwesomePropertyEditor::insertQtVariantProperty() -> Failed while inserting property"); + } } } else {