diff --git a/GUI/coregui/Models/ParameterizedItem.cpp b/GUI/coregui/Models/ParameterizedItem.cpp new file mode 100644 index 0000000000000000000000000000000000000000..01b8be21b64b9b1080fd965ef08f20a7a52909ea --- /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 0000000000000000000000000000000000000000..18cd39e94d014a5d4423af5cb4c01c49e57117dd --- /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 0000000000000000000000000000000000000000..2bf8945725edaea6a8a7cf769303cb22490e35b4 --- /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 0000000000000000000000000000000000000000..ed9e9ec7c008794221dec3b99a77868bd5119380 --- /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 cbc6d29ba8ded5c4d304c0e6454503df2ae21ce2..79ee5e11725d40a003c6997c6b7ddda6d47d47e9 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 3e815a71abf87d058eb238398032cae5c15c6f32..20487d1caf782acff6634acdaccb5b065a75781d 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 8a4c9bfa3da4172b4b8135783880ac193cbcbb56..344ebefd333ed8d8e208dbd9ec71ce78a401825a 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 e477202a3df4c062002b98e84c0f9672001b27d1..2616794b08650b78dad8e26a41763d931c6a1372 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); };