diff --git a/GUI/coregui/Models/ItemFactory.cpp b/GUI/coregui/Models/ItemFactory.cpp new file mode 100644 index 0000000000000000000000000000000000000000..977c9b0fd7a8318142925f62fd97991742f3fd56 --- /dev/null +++ b/GUI/coregui/Models/ItemFactory.cpp @@ -0,0 +1,25 @@ +// ************************************************************************** // +// +// BornAgain: simulate and fit scattering at grazing incidence +// +//! @file Models/ItemFactory.cpp +//! @brief Implements class ItemFactory. +//! +//! @homepage http://apps.jcns.fz-juelich.de/BornAgain +//! @license GNU General Public License v3 or higher (see COPYING) +//! @copyright Forschungszentrum Jülich GmbH 2013 +//! @authors Scientific Computing Group at MLZ Garching +//! @authors C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke +// +// ************************************************************************** // + +#include "ItemFactory.h" +#include "MultiLayerItem.h" + + +ParameterizedItem *ItemFactory::createItem(const QString &model_name) +{ + if (model_name==QString("MultiLayer")) { + return new MultiLayerItem(); + } +} diff --git a/GUI/coregui/Models/ItemFactory.h b/GUI/coregui/Models/ItemFactory.h new file mode 100644 index 0000000000000000000000000000000000000000..1a7f8f50ed7c40184ce49e76f27a4030781cf8eb --- /dev/null +++ b/GUI/coregui/Models/ItemFactory.h @@ -0,0 +1,30 @@ +// ************************************************************************** // +// +// BornAgain: simulate and fit scattering at grazing incidence +// +//! @file Models/ItemFactory.h +//! @brief Defines class ItemFactory. +//! +//! @homepage http://apps.jcns.fz-juelich.de/BornAgain +//! @license GNU General Public License v3 or higher (see COPYING) +//! @copyright Forschungszentrum Jülich GmbH 2013 +//! @authors Scientific Computing Group at MLZ Garching +//! @authors C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke +// +// ************************************************************************** // + +#ifndef ITEMFACTORY_H +#define ITEMFACTORY_H + +#include "ParameterizedItem.h" + +class ItemFactory +{ +public: + static ParameterizedItem *createItem(const QString &model_name); +private: + ItemFactory() {} + ~ItemFactory() {} +}; + +#endif // ITEMFACTORY_H diff --git a/GUI/coregui/Models/MultiLayerItem.cpp b/GUI/coregui/Models/MultiLayerItem.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9ce4a44008ab2a48ba9da589d362ba7fee22b3ab --- /dev/null +++ b/GUI/coregui/Models/MultiLayerItem.cpp @@ -0,0 +1,27 @@ +// ************************************************************************** // +// +// BornAgain: simulate and fit scattering at grazing incidence +// +//! @file Models/MultiLayerItem.cpp +//! @brief Implements class MultiLayerItem. +//! +//! @homepage http://apps.jcns.fz-juelich.de/BornAgain +//! @license GNU General Public License v3 or higher (see COPYING) +//! @copyright Forschungszentrum Jülich GmbH 2013 +//! @authors Scientific Computing Group at MLZ Garching +//! @authors C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke +// +// ************************************************************************** // + +#include "MultiLayerItem.h" + + +MultiLayerItem::MultiLayerItem() + : ParameterizedItem(QString("MultiLayer")) +{ + m_parameters[QString("Cross Correlation Length")] = 0.0; +} + +MultiLayerItem::~MultiLayerItem() +{ +} diff --git a/GUI/coregui/Models/MultiLayerItem.h b/GUI/coregui/Models/MultiLayerItem.h new file mode 100644 index 0000000000000000000000000000000000000000..a13e8c137d0c07c1135efd384c1d2085575313c2 --- /dev/null +++ b/GUI/coregui/Models/MultiLayerItem.h @@ -0,0 +1,28 @@ +// ************************************************************************** // +// +// BornAgain: simulate and fit scattering at grazing incidence +// +//! @file Models/MultiLayerItem.h +//! @brief Defines class MultiLayerItem. +//! +//! @homepage http://apps.jcns.fz-juelich.de/BornAgain +//! @license GNU General Public License v3 or higher (see COPYING) +//! @copyright Forschungszentrum Jülich GmbH 2013 +//! @authors Scientific Computing Group at MLZ Garching +//! @authors C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke +// +// ************************************************************************** // + +#ifndef MULTILAYERITEM_H +#define MULTILAYERITEM_H + +#include "ParameterizedItem.h" + +class MultiLayerItem : public ParameterizedItem +{ +public: + explicit MultiLayerItem(); + ~MultiLayerItem(); +}; + +#endif // MULTILAYERITEM_H diff --git a/GUI/coregui/Models/ParameterizedItem.cpp b/GUI/coregui/Models/ParameterizedItem.cpp index 01b8be21b64b9b1080fd965ef08f20a7a52909ea..236da75bc7734b0016a807f50f26570316789ab7 100644 --- a/GUI/coregui/Models/ParameterizedItem.cpp +++ b/GUI/coregui/Models/ParameterizedItem.cpp @@ -14,32 +14,44 @@ // ************************************************************************** // #include "ParameterizedItem.h" +#include "Exceptions.h" -ParameterizedItem::ParameterizedItem(BA_MODEL_ID::Model_ID model_type, - const QString &name) +ParameterizedItem::ParameterizedItem(const QString &name) : QStandardItem(name) - , m_model_type(model_type) { - populateWithParameters(); } ParameterizedItem::~ParameterizedItem() { +} +double ParameterizedItem::getParameterValue(QString name) +{ + if (!m_parameters.contains(name)) { + throw Exceptions::RuntimeErrorException("ParameterizedItem::getParameterValue: " + "parameter does not exist"); + } + return m_parameters[name]; } void ParameterizedItem::setParameter(QString name, double value) { - if (m_parameters.contains(name)) { - m_parameters[name] = value; + if (!m_parameters.contains(name)) { + throw Exceptions::RuntimeErrorException("ParameterizedItem::getParameterValue: " + "parameter does not exist"); } + m_parameters[name] = value; } -void ParameterizedItem::populateWithParameters() +bool ParameterizedItem::acceptsAsChild(ParameterizedItem *child) { - m_parameters[QString("firstparam")] = 5.0; - m_parameters[QString("anotherparam")] = 6.0; - m_parameters[QString("lastparam")] = 7.0; + return child->isValidParent(this->text()); } + +bool ParameterizedItem::isValidParent(QString parentName) +{ + return m_valid_parents.contains(parentName); +} + diff --git a/GUI/coregui/Models/ParameterizedItem.h b/GUI/coregui/Models/ParameterizedItem.h index 18cd39e94d014a5d4423af5cb4c01c49e57117dd..89d39e159940408431014d78c632e67f1705a05f 100644 --- a/GUI/coregui/Models/ParameterizedItem.h +++ b/GUI/coregui/Models/ParameterizedItem.h @@ -17,29 +17,36 @@ #define PARAMETERIZEDITEM_H_ #include <QStandardItem> +#include <QList> #include <QMap> -namespace BA_MODEL_ID { -enum Model_ID { - MultiLayer, - Layer, -}; -} - class ParameterizedItem : public QStandardItem { public: - explicit ParameterizedItem(BA_MODEL_ID::Model_ID model_type, const QString &name); + explicit ParameterizedItem(const QString &name); ~ParameterizedItem(); + //! retrieves the parameter's value + double getParameterValue(QString name); + + //! sets the parameter's value, if it exists void setParameter(QString name, double value); + + //! retrieves the whole list of paramaters QMap<QString, double> &getParameters() { return m_parameters; } -private: - void populateWithParameters(); - BA_MODEL_ID::Model_ID m_model_type; + + //! indicates if the passed item can be set as + //! a child item + bool acceptsAsChild(ParameterizedItem *child); +protected: + QList<QString> m_valid_parents; QMap<QString, double> m_parameters; +private: + //! indicates if the item name, passed as argument + //! can be the current item's parent + bool isValidParent(QString parentName); }; diff --git a/GUI/coregui/Models/SessionModel.cpp b/GUI/coregui/Models/SessionModel.cpp index 2bf8945725edaea6a8a7cf769303cb22490e35b4..8487f6a7b46fd1cafdaaff17f08f08103e5c8004 100644 --- a/GUI/coregui/Models/SessionModel.cpp +++ b/GUI/coregui/Models/SessionModel.cpp @@ -14,6 +14,7 @@ // ************************************************************************** // #include "SessionModel.h" +#include "ItemFactory.h" SessionModel::SessionModel(QObject *parent) @@ -27,7 +28,7 @@ SessionModel::~SessionModel() } -QStandardItem *SessionModel::insertNewItem(BA_MODEL_ID::Model_ID model_type, const QModelIndex &index) +QStandardItem *SessionModel::insertNewItem(QString model_type, const QModelIndex &index) { QStandardItem *parent; if (index.isValid()) { @@ -44,14 +45,11 @@ QStandardItem *SessionModel::insertNewItem(BA_MODEL_ID::Model_ID model_type, con void SessionModel::initialize() { - m_default_names[BA_MODEL_ID::MultiLayer] = QString("MultiLayer"); - m_default_names[BA_MODEL_ID::Layer] = QString("Layer"); } -QStandardItem *SessionModel::createNewItem(QStandardItem *parent, BA_MODEL_ID::Model_ID model_type) +QStandardItem *SessionModel::createNewItem(QStandardItem *parent, QString model_type) { - QString name = m_default_names[model_type]; - ParameterizedItem *new_item = new ParameterizedItem(model_type, name); + ParameterizedItem *new_item = ItemFactory::createItem(model_type); parent->appendRow(new_item); return new_item; } diff --git a/GUI/coregui/Models/SessionModel.h b/GUI/coregui/Models/SessionModel.h index ed9e9ec7c008794221dec3b99a77868bd5119380..78d97fcabd466286a414dd9df3607842245ac62a 100644 --- a/GUI/coregui/Models/SessionModel.h +++ b/GUI/coregui/Models/SessionModel.h @@ -30,7 +30,7 @@ public: void setFilename(const QString &filename) { m_filename = filename; } - QStandardItem *insertNewItem(BA_MODEL_ID::Model_ID model_type, + QStandardItem *insertNewItem(QString model_type, const QModelIndex &index); // void load(const QString &filename=QString()); @@ -39,9 +39,8 @@ public: private: void initialize(); QStandardItem *createNewItem(QStandardItem *parent, - BA_MODEL_ID::Model_ID model_type); + QString model_type); QString m_filename; - QMap<BA_MODEL_ID::Model_ID, QString> m_default_names; }; #endif // SESSIONMODEL_H diff --git a/GUI/coregui/Views/SampleView.cpp b/GUI/coregui/Views/SampleView.cpp index 79ee5e11725d40a003c6997c6b7ddda6d47d47e9..cc2b849928d279cf5ae1735cfdf0d05193d7aee2 100644 --- a/GUI/coregui/Views/SampleView.cpp +++ b/GUI/coregui/Views/SampleView.cpp @@ -78,9 +78,9 @@ void SampleView::initSubWindows() SessionModel *session_model = new SessionModel(); // Temporary for testing - QStandardItem *multilayer = session_model->insertNewItem(BA_MODEL_ID::MultiLayer, QModelIndex()); - QStandardItem *layer = session_model->insertNewItem(BA_MODEL_ID::Layer, QModelIndex()); - session_model->insertNewItem(BA_MODEL_ID::Layer, multilayer->index()); + QStandardItem *multilayer = session_model->insertNewItem("MultiLayer", QModelIndex()); + QStandardItem *layer = session_model->insertNewItem("Layer", QModelIndex()); + session_model->insertNewItem("Layer", multilayer->index()); // END temporary m_subWindows[SampleTreeView] = SampleViewComponents::createTreeView(session_model, this); diff --git a/GUI/coregui/Views/SampleViewComponents.cpp b/GUI/coregui/Views/SampleViewComponents.cpp index 344ebefd333ed8d8e208dbd9ec71ce78a401825a..e7dcbf2fb16130fbfc9ae4754a26e764b7794a46 100644 --- a/GUI/coregui/Views/SampleViewComponents.cpp +++ b/GUI/coregui/Views/SampleViewComponents.cpp @@ -29,7 +29,6 @@ SampleWidgetBox *SampleViewComponents::createWidgetBox(SampleDesignerInterface * return new SampleWidgetBox(core, parent); } - //SamplePropertyEditorInterface *SampleViewComponents::createPropertyEditor(QWidget *parent) SamplePropertyEditor *SampleViewComponents::createPropertyEditor(SampleDesignerInterface *core, QWidget *parent) { @@ -39,11 +38,14 @@ SamplePropertyEditor *SampleViewComponents::createPropertyEditor(SampleDesignerI // result->setObjectName(QLatin1String("PropertyEditor")); return new SamplePropertyEditor(core, parent); } + QTreeView *SampleViewComponents::createTreeView(SessionModel *session_model, QWidget *parent) { QTreeView *tree_view = new QTreeView(parent); tree_view->setModel(session_model); tree_view->setAllColumnsShowFocus(true); + tree_view->setWindowTitle(QString("Object Tree View")); + tree_view->setObjectName(QString("ObjectTree")); return tree_view; }