From 713f252a5457fbbac54ab7c5fc6346e9c8bdf0bc Mon Sep 17 00:00:00 2001 From: Walter Van Herck <w.van.herck@fz-juelich.de> Date: Fri, 14 Feb 2014 16:37:58 +0100 Subject: [PATCH] Added ParameterizedItem and SessionModel --- GUI/coregui/Models/ParameterizedItem.cpp | 45 +++++++++++++++++ GUI/coregui/Models/ParameterizedItem.h | 46 +++++++++++++++++ GUI/coregui/Models/SessionModel.cpp | 57 ++++++++++++++++++++++ GUI/coregui/Models/SessionModel.h | 47 ++++++++++++++++++ GUI/coregui/Views/SampleView.cpp | 11 ++++- GUI/coregui/Views/SampleView.h | 3 +- GUI/coregui/Views/SampleViewComponents.cpp | 8 +-- GUI/coregui/Views/SampleViewComponents.h | 4 +- 8 files changed, 214 insertions(+), 7 deletions(-) create mode 100644 GUI/coregui/Models/ParameterizedItem.cpp create mode 100644 GUI/coregui/Models/ParameterizedItem.h create mode 100644 GUI/coregui/Models/SessionModel.cpp create mode 100644 GUI/coregui/Models/SessionModel.h diff --git a/GUI/coregui/Models/ParameterizedItem.cpp b/GUI/coregui/Models/ParameterizedItem.cpp new file mode 100644 index 00000000000..01b8be21b64 --- /dev/null +++ b/GUI/coregui/Models/ParameterizedItem.cpp @@ -0,0 +1,45 @@ +// ************************************************************************** // +// +// BornAgain: simulate and fit scattering at grazing incidence +// +//! @file ParameterizedItem.h +//! @brief Defines class ParameterizedItem. +//! +//! @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 "ParameterizedItem.h" + + + +ParameterizedItem::ParameterizedItem(BA_MODEL_ID::Model_ID model_type, + const QString &name) + : QStandardItem(name) + , m_model_type(model_type) +{ + populateWithParameters(); +} + +ParameterizedItem::~ParameterizedItem() +{ + +} + +void ParameterizedItem::setParameter(QString name, double value) +{ + if (m_parameters.contains(name)) { + m_parameters[name] = value; + } +} + +void ParameterizedItem::populateWithParameters() +{ + m_parameters[QString("firstparam")] = 5.0; + m_parameters[QString("anotherparam")] = 6.0; + m_parameters[QString("lastparam")] = 7.0; +} diff --git a/GUI/coregui/Models/ParameterizedItem.h b/GUI/coregui/Models/ParameterizedItem.h new file mode 100644 index 00000000000..18cd39e94d0 --- /dev/null +++ b/GUI/coregui/Models/ParameterizedItem.h @@ -0,0 +1,46 @@ +// ************************************************************************** // +// +// BornAgain: simulate and fit scattering at grazing incidence +// +//! @file ParameterizedItem.h +//! @brief Defines class ParameterizedItem. +//! +//! @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 PARAMETERIZEDITEM_H_ +#define PARAMETERIZEDITEM_H_ + +#include <QStandardItem> +#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); + ~ParameterizedItem(); + + void setParameter(QString name, double value); + QMap<QString, double> &getParameters() { + return m_parameters; + } +private: + void populateWithParameters(); + BA_MODEL_ID::Model_ID m_model_type; + QMap<QString, double> m_parameters; +}; + + +#endif /* PARAMETERIZEDITEM_H_ */ diff --git a/GUI/coregui/Models/SessionModel.cpp b/GUI/coregui/Models/SessionModel.cpp new file mode 100644 index 00000000000..2bf8945725e --- /dev/null +++ b/GUI/coregui/Models/SessionModel.cpp @@ -0,0 +1,57 @@ +// ************************************************************************** // +// +// BornAgain: simulate and fit scattering at grazing incidence +// +//! @file Models/SessionModel.cpp +//! @brief Implements class SessionModel. +//! +//! @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 "SessionModel.h" + + +SessionModel::SessionModel(QObject *parent) + : QStandardItemModel(parent) +{ + initialize(); +} + +SessionModel::~SessionModel() +{ + +} + +QStandardItem *SessionModel::insertNewItem(BA_MODEL_ID::Model_ID model_type, const QModelIndex &index) +{ + QStandardItem *parent; + if (index.isValid()) { + parent = itemFromIndex(index); + if (!parent) { + return 0; + } + } + else { + parent = invisibleRootItem(); + } + return createNewItem(parent, model_type); +} + +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) +{ + QString name = m_default_names[model_type]; + ParameterizedItem *new_item = new ParameterizedItem(model_type, name); + parent->appendRow(new_item); + return new_item; +} diff --git a/GUI/coregui/Models/SessionModel.h b/GUI/coregui/Models/SessionModel.h new file mode 100644 index 00000000000..ed9e9ec7c00 --- /dev/null +++ b/GUI/coregui/Models/SessionModel.h @@ -0,0 +1,47 @@ +// ************************************************************************** // +// +// BornAgain: simulate and fit scattering at grazing incidence +// +//! @file Models/SessionModel.h +//! @brief Defines class SessionModel. +//! +//! @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 SESSIONMODEL_H +#define SESSIONMODEL_H + +#include <QStandardItemModel> +#include "ParameterizedItem.h" + +class SessionModel : public QStandardItemModel +{ + Q_OBJECT +public: + explicit SessionModel(QObject *parent=0); + ~SessionModel(); + + QString filename() const { return m_filename; } + void setFilename(const QString &filename) { + m_filename = filename; + } + QStandardItem *insertNewItem(BA_MODEL_ID::Model_ID model_type, + const QModelIndex &index); + +// void load(const QString &filename=QString()); +// void save(const QString &filename=QString()); + +private: + void initialize(); + QStandardItem *createNewItem(QStandardItem *parent, + BA_MODEL_ID::Model_ID 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 cbc6d29ba8d..79ee5e11725 100644 --- a/GUI/coregui/Views/SampleView.cpp +++ b/GUI/coregui/Views/SampleView.cpp @@ -3,6 +3,7 @@ #include "SampleDesigner.h" #include "SampleToolBar.h" #include "MaterialBrowser.h" +#include "SessionModel.h" #include <QDockWidget> @@ -75,7 +76,13 @@ void SampleView::initSubWindows() m_subWindows[WidgetBoxSubWindow] = SampleViewComponents::createWidgetBox(m_sampleDesigner, this); - m_subWindows[SampleInspectorSubWindow] = SampleViewComponents::createTreeInspector(this); + 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()); + // END temporary + m_subWindows[SampleTreeView] = SampleViewComponents::createTreeView(session_model, this); m_subWindows[PropertyEditorSubWindow] = SampleViewComponents::createPropertyEditor(m_sampleDesigner, this); @@ -110,7 +117,7 @@ void SampleView::resetToDefaultLayout() } addDockWidget(Qt::LeftDockWidgetArea, m_dockWidgets[WidgetBoxSubWindow]); - addDockWidget(Qt::RightDockWidgetArea, m_dockWidgets[SampleInspectorSubWindow]); + addDockWidget(Qt::RightDockWidgetArea, m_dockWidgets[SampleTreeView]); addDockWidget(Qt::RightDockWidgetArea, m_dockWidgets[PropertyEditorSubWindow]); addDockWidget(Qt::BottomDockWidgetArea, m_dockWidgets[InfoSubWindow]); diff --git a/GUI/coregui/Views/SampleView.h b/GUI/coregui/Views/SampleView.h index 3e815a71abf..20487d1caf7 100644 --- a/GUI/coregui/Views/SampleView.h +++ b/GUI/coregui/Views/SampleView.h @@ -5,6 +5,7 @@ #include <QWidget> #include <QMainWindow> #include <QDockWidget> +#include <QTreeView> class SampleDesignerInterface; @@ -22,7 +23,7 @@ public: enum SubWindows { WidgetBoxSubWindow, - SampleInspectorSubWindow, + SampleTreeView, PropertyEditorSubWindow, InfoSubWindow, NumberOfSubWindows diff --git a/GUI/coregui/Views/SampleViewComponents.cpp b/GUI/coregui/Views/SampleViewComponents.cpp index 8a4c9bfa3da..344ebefd333 100644 --- a/GUI/coregui/Views/SampleViewComponents.cpp +++ b/GUI/coregui/Views/SampleViewComponents.cpp @@ -39,10 +39,12 @@ SamplePropertyEditor *SampleViewComponents::createPropertyEditor(SampleDesignerI // result->setObjectName(QLatin1String("PropertyEditor")); return new SamplePropertyEditor(core, parent); } - -SampleTreeInspector *SampleViewComponents::createTreeInspector(QWidget *parent) +QTreeView *SampleViewComponents::createTreeView(SessionModel *session_model, QWidget *parent) { - return new SampleTreeInspector(parent); + QTreeView *tree_view = new QTreeView(parent); + tree_view->setModel(session_model); + tree_view->setAllColumnsShowFocus(true); + return tree_view; } SampleInfoStreamInterface *SampleViewComponents::createInfoStream(QWidget *parent) diff --git a/GUI/coregui/Views/SampleViewComponents.h b/GUI/coregui/Views/SampleViewComponents.h index e477202a3df..2616794b086 100644 --- a/GUI/coregui/Views/SampleViewComponents.h +++ b/GUI/coregui/Views/SampleViewComponents.h @@ -2,11 +2,13 @@ #define SAMPLEVIEWCOMPONENTS_H #include <QWidget> +#include <QTreeView> #include "widgetbox.h" #include "SamplePropertyEditor.h" #include "SampleTreeInspector.h" #include "SampleWidgetBox.h" +#include "SessionModel.h" //class SampleWidgetBoxInterface : public QWidget //{ @@ -41,7 +43,7 @@ class SampleViewComponents public: static SampleWidgetBox *createWidgetBox(SampleDesignerInterface *core, QWidget *parent); static SamplePropertyEditor *createPropertyEditor(SampleDesignerInterface *core,QWidget *parent); - static SampleTreeInspector *createTreeInspector(QWidget *parent); + static QTreeView *createTreeView(SessionModel *session_model, QWidget *parent); static SampleInfoStreamInterface *createInfoStream(QWidget *parent); }; -- GitLab