From 72e3d04b77acbbf771ef653ca8a49c26d416e9c1 Mon Sep 17 00:00:00 2001 From: David Li <dawei.li@gmx.net> Date: Thu, 18 Feb 2016 17:06:30 +0100 Subject: [PATCH] GUI is starting again --- GUI/coregui/Models/ParameterizedItem.cpp | 175 +++++++++++------------ GUI/coregui/Models/ParameterizedItem.h | 14 +- GUI/coregui/Models/SampleModel.cpp | 2 + 3 files changed, 96 insertions(+), 95 deletions(-) diff --git a/GUI/coregui/Models/ParameterizedItem.cpp b/GUI/coregui/Models/ParameterizedItem.cpp index 645c9168a00..322f8dcde6d 100644 --- a/GUI/coregui/Models/ParameterizedItem.cpp +++ b/GUI/coregui/Models/ParameterizedItem.cpp @@ -22,6 +22,7 @@ //#include "PropertyVariantManager.h" #include <sstream> +#include <QDebug> ParameterizedItem::ParameterizedItem(QString model_type) : m_model_type(QString()) @@ -224,7 +225,7 @@ void ParameterizedItem::insertChild(int row, ParameterizedItem *item) if (m_model) m_model->endInsertRows(); - // OBSOLETE watch for changes on the model + // OBSOLETE dont connect to items // notifySiblings(); // onChildPropertyChange(item); } @@ -236,7 +237,7 @@ ParameterizedItem *ParameterizedItem::takeChildItem(int row) item->setModel(nullptr); return item; - // OBSOLETE watch for changes on the model + // OBSOLETE dont connect to items // notifySiblings(); // onChildPropertyChange(item); } @@ -254,20 +255,24 @@ QList<QString> ParameterizedItem::acceptableChildItems() const ParameterizedItem *ParameterizedItem::registerProperty(const QString &name, const QVariant &variant, const PropertyAttribute &attribute) { - if (m_properties.contains(name)) + if (isRegisteredProperty(name)) throw GUIHelpers::Error( "ParameterizedItem::registerProperty() -> Error. Already existing property " + name); + // OBSOLETE here for compatibility reasons if (name == ParameterizedItem::OBSOLETE_P_PORT) { m_port = ParameterizedItem::PortInfo::EPorts(variant.toInt()); + m_properties[name] = nullptr; return nullptr; } else if (name == ParameterizedItem::OBSOLETE_P_NAME) { setName(variant.toString()); return nullptr; } + m_property_attribute[name] = attribute; // END of obsolete + ParameterizedItem *property = ItemFactory::createItem(Constants::PropertyType); property->setName(name); property->setValue(variant); @@ -278,6 +283,82 @@ ParameterizedItem *ParameterizedItem::registerProperty(const QString &name, cons return property; } +bool ParameterizedItem::isRegisteredProperty(const QString &name) const +{ + return m_properties.contains(name); +} + +QVariant ParameterizedItem::getRegisteredProperty(const QString &name) const +{ + if (!isRegisteredProperty(name)) + throw GUIHelpers::Error( + "ParameterizedItem::getRegisteredProperty() -> Error. Unknown property '" + name + + "', item '" + modelType() + "'"); + + // for debugging purpose +// PropertyAttribute attribute = getPropertyAttribute(name); +// if(attribute.getAppearance() == PropertyAttribute::DISABLED) { +// throw GUIHelpers::Error("ParameterizedItem::getRegisteredProperty() -> Logic Error? " +// "You are trying to get DISABLED property with name '" +name +"', model " + modelType()); +// } + + // OBSOLETE + if (name == ParameterizedItem::OBSOLETE_P_PORT) + return QVariant::fromValue(int(m_port)); + if (name == ParameterizedItem::OBSOLETE_P_NAME) + return this->name(); + // OBSOLETE + + return m_properties[name]->value(); +} + +void ParameterizedItem::setRegisteredProperty(const QString &name, const QVariant &variant) +{ + // check if variant of previous property coincides with new one + QVariant previous_variant = getRegisteredProperty(name); + if (GUIHelpers::getVariantType(previous_variant) != GUIHelpers::getVariantType(variant)) { + qDebug() << "ParameterizedItem::setRegisteredProperty() -> Error. Type of previous and new " + "variant does not coincide."; + qDebug() << "New variant" << variant << ", previous " << previous_variant; + throw GUIHelpers::Error("ParameterizedItem::setRegisteredProperty() -> Error. Type of " + "previous and new variant does not coincide."); + } + + // START OBSOLETE + if (name == ParameterizedItem::OBSOLETE_P_NAME) { + setName(name); + onPropertyChange(name); + return; + } + if (name == ParameterizedItem::OBSOLETE_P_PORT) { + m_port = ParameterizedItem::PortInfo::EPorts(variant.toInt()); + return; + } + // END OBSOLETE + + m_properties[name]->setValue(variant); +} + +void ParameterizedItem::removeRegisteredProperty(const QString &name) +{ + if(isRegisteredProperty(name)) { + qDebug() << "ParameterizedItem::removeRegisteredProperty()" << name; + m_property_attribute.remove(name); + if (ParameterizedItem *para = getParameterByName(name)) { + QModelIndex index = m_model->indexOfItem(para); + m_model->removeRows(index.row(), 1, index.parent()); + } + + // TODO get rid of subitems + if (m_sub_items.contains(name)) { + qDebug() + << " ParameterizedItem::removeRegisteredProperty() -> Removing property iteme"; + m_sub_items.remove(name); + } + // END TODO + } +} + const QString ParameterizedItem::OBSOLETE_P_NAME = "Name"; const QString ParameterizedItem::OBSOLETE_P_PORT = "Port"; @@ -337,11 +418,6 @@ void ParameterizedItem::addSubItem(QString name, ParameterizedItem *item) // qDebug() << "ParameterizedItem::addPropertyItem() -> about to leave" << name; } -bool ParameterizedItem::isRegisteredProperty(const QString &name) const -{ - return m_registered_properties.contains(name); -} - ParameterizedItem *ParameterizedItem::registerGroupProperty(const QString &group_name, const Constants::ModelType &group_model) { @@ -371,87 +447,6 @@ ParameterizedItem *ParameterizedItem::setGroupProperty(const QString &name, cons } - -void ParameterizedItem::setRegisteredProperty(const QString &name, const QVariant &variant) -{ -// // check if variant of previous property coincides with new one -// QVariant previous_variant = getRegisteredProperty(name); -// if (GUIHelpers::getVariantType(previous_variant) != GUIHelpers::getVariantType(variant)) { -// qDebug() << "ParameterizedItem::setRegisteredProperty() -> Error. Type of previous and new " -// "variant does not coincide."; -// qDebug() << "New variant" << variant << ", previous " << previous_variant; -// throw GUIHelpers::Error("ParameterizedItem::setRegisteredProperty() -> Error. Type of " -// "previous and new variant does not coincide."); -// } - -// setProperty(name.toUtf8().constData(), variant); - if (name == ParameterizedItem::OBSOLETE_P_NAME) { - if (m_model) { - m_model->setData(m_model->indexOfItem(this), variant, Qt::DisplayRole); - } else { - this->setData(0, variant); - } - onPropertyChange(name); - } - if (ParameterizedItem *para = getParameterByName(name)) { - if (0 && m_model) { - m_model->setData(m_model->indexOfItem(para), variant, Qt::UserRole); - } else { - para->setData(1, variant); - } - onPropertyChange(name); - } -} - -QVariant ParameterizedItem::getRegisteredProperty(const QString &name) const -{ - if (!m_registered_properties.contains(name)) -// throw GUIHelpers::Error( -// "ParameterizedItem::getRegisteredProperty() -> Error. Unknown property '" + name -// + "', item '" + modelType() + "'"); - throw -1; // NEW - - // for debugging purpose -// PropertyAttribute attribute = getPropertyAttribute(name); -// if(attribute.getAppearance() == PropertyAttribute::DISABLED) { -// throw GUIHelpers::Error("ParameterizedItem::getRegisteredProperty() -> Logic Error? " -// "You are trying to get DISABLED property with name '" +name +"', model " + modelType()); -// } - -// return property(name.toUtf8().constData()); - if (name == ParameterizedItem::OBSOLETE_P_PORT) // NEW - return m_port; // NEW - if (name == ParameterizedItem::OBSOLETE_P_NAME) // NEW - return data(0); - if (ParameterizedItem *parameter = getParameterByName(name)) { // NEW - QVariant data = parameter->data(1); // NEW - return data; - } - return QVariant(); // NEW -} - -void ParameterizedItem::removeRegisteredProperty(const QString &name) -{ - if(isRegisteredProperty(name)) { -// qDebug() << "ParameterizedItem::removeRegisteredProperty()" << name; - m_registered_properties.removeOne(name); - m_property_attribute.remove(name); - if (ParameterizedItem *para = getParameterByName(name)) { - QModelIndex index = m_model->indexOfItem(para); - m_model->removeRows(index.row(), 1, index.parent()); - } -// setProperty(name.toUtf8().constData(), QVariant()); - - if (m_sub_items.contains(name)) { -// qDebug() -// << " ParameterizedItem::removeRegisteredProperty() -> Removing property iteme"; -// delete m_sub_items[name]; - m_sub_items.remove(name); - } - } -} - - const PropertyAttribute &ParameterizedItem::getPropertyAttribute(const QString &name) const { QMap<QString, PropertyAttribute>::const_iterator it = m_property_attribute.find(name); @@ -478,7 +473,7 @@ PropertyAttribute &ParameterizedItem::getPropertyAttribute(const QString &name) void ParameterizedItem::setPropertyAttribute(const QString &name, const PropertyAttribute &attribute) { - if (!m_registered_properties.contains(name)) + if (!isRegisteredProperty(name)) // throw GUIHelpers::Error( // "ParameterizedItem::setPropertyAttribute() -> Error. Unknown property " + name); throw -1; // NEW diff --git a/GUI/coregui/Models/ParameterizedItem.h b/GUI/coregui/Models/ParameterizedItem.h index b42e9c5784e..84277c99178 100644 --- a/GUI/coregui/Models/ParameterizedItem.h +++ b/GUI/coregui/Models/ParameterizedItem.h @@ -165,8 +165,16 @@ public: ParameterizedItem *registerProperty(const QString &name, const QVariant &variant, const PropertyAttribute &attribute = PropertyAttribute()); - void setRegisteredProperty(const QString &name, const QVariant &variant); + //! self explaining + bool isRegisteredProperty(const QString &name) const; + + //! retrieve property QVariant getRegisteredProperty(const QString &name) const; + + //! update the property through the model + void setRegisteredProperty(const QString &name, const QVariant &variant); + + //! unset property from this item void removeRegisteredProperty(const QString &name); @@ -204,8 +212,6 @@ public: void addSubItem(QString name, ParameterizedItem *item); - bool isRegisteredProperty(const QString &name) const; - ParameterizedItem *registerGroupProperty(const QString &group_name, const Constants::ModelType &group_model); ParameterizedItem *setGroupProperty(const QString &name, const QString &value); @@ -276,8 +282,6 @@ protected: - QStringList m_registered_properties; - QMap<QString, PropertyAttribute> m_property_attribute; void notifySiblings(); diff --git a/GUI/coregui/Models/SampleModel.cpp b/GUI/coregui/Models/SampleModel.cpp index 89179602a24..39217615d31 100644 --- a/GUI/coregui/Models/SampleModel.cpp +++ b/GUI/coregui/Models/SampleModel.cpp @@ -50,6 +50,8 @@ void SampleModel::onMaterialModelChanged(const QModelIndex &first, const QModelI qDebug() << "SampleModel::onMaterialModelChanged()" << first; Q_ASSERT(materialModel); MaterialItem *material = dynamic_cast<MaterialItem *>(materialModel->itemForIndex(first)); + if (!material) + return; Q_ASSERT(material); m_material_identifier = material->getIdentifier(); -- GitLab