From 9c439bb9cf54c1833b62d1ff2e0bb6d3dd019e5f Mon Sep 17 00:00:00 2001
From: Gennady Pospelov <g.pospelov@fz-juelich.de>
Date: Fri, 25 Jul 2014 11:30:58 +0200
Subject: [PATCH] Initialization order changed in QuickSimulation widgets.

---
 .../QuickSimulationWidget.cpp                 |  18 +--
 .../SimulationWidgets/QuickSimulationWidget.h |  14 ++-
 ...wDelegate.cpp => SampleTuningDelegate.cpp} |  16 +--
 ...tViewDelegate.h => SampleTuningDelegate.h} |  10 +-
 .../SimulationWidgets/SampleTuningWidget.cpp  | 107 ++++++++++--------
 .../SimulationWidgets/SampleTuningWidget.h    |  26 ++---
 .../SimulationSetupWidget.cpp                 |  46 +++++---
 .../SimulationWidgets/SimulationSetupWidget.h |   5 +
 GUI/coregui/Views/SimulationView.cpp          |  18 ++-
 GUI/coregui/Views/SimulationView.h            |   5 +-
 GUI/coregui/mainwindow/mainwindow.cpp         |   8 +-
 11 files changed, 157 insertions(+), 116 deletions(-)
 rename GUI/coregui/Views/Components/SimulationWidgets/{TestViewDelegate.cpp => SampleTuningDelegate.cpp} (90%)
 rename GUI/coregui/Views/Components/SimulationWidgets/{TestViewDelegate.h => SampleTuningDelegate.h} (84%)

diff --git a/GUI/coregui/Views/Components/SimulationWidgets/QuickSimulationWidget.cpp b/GUI/coregui/Views/Components/SimulationWidgets/QuickSimulationWidget.cpp
index 18fd3b7eb65..3b3dafca378 100644
--- a/GUI/coregui/Views/Components/SimulationWidgets/QuickSimulationWidget.cpp
+++ b/GUI/coregui/Views/Components/SimulationWidgets/QuickSimulationWidget.cpp
@@ -1,10 +1,14 @@
 #include "QuickSimulationWidget.h"
 #include "qdebug.h"
 #include "QHBoxLayout"
+#include "SampleTuningWidget.h"
+#include "PlotWidget.h"
 
-QuickSimulationWidget::QuickSimulationWidget(SessionModel *sessionModel, QWidget *parent)
+
+QuickSimulationWidget::QuickSimulationWidget(SampleModel *sampleModel, InstrumentModel *instrumentModel, QWidget *parent)
     : QWidget(parent)
-    , m_sessionModel(sessionModel)
+    , m_sampleModel(sampleModel)
+    , m_instrumentModel(instrumentModel)
 {
 
     QColor bgColor(0,0,255,255);
@@ -19,15 +23,15 @@ QuickSimulationWidget::QuickSimulationWidget(SessionModel *sessionModel, QWidget
     m_plotWidget->setPropertyPanelVisible(false);
     //m_plotWidget->setFixedWidth(600);
 
-    m_testView = new SampleTuningWidget(m_sessionModel);
-    m_testView->setFixedWidth(380);
-    m_testView->setContentsMargins(0,0,0,0);
+    m_sampleTuningWidget = new SampleTuningWidget(m_sampleModel, m_instrumentModel);
+    m_sampleTuningWidget->setFixedWidth(380);
+    m_sampleTuningWidget->setContentsMargins(0,0,0,0);
 
     QHBoxLayout *mainLayout = new QHBoxLayout(this);
     mainLayout->addStretch();
     mainLayout->addWidget(m_plotWidget);
     mainLayout->addStretch();
-    mainLayout->addWidget(m_testView);
+    mainLayout->addWidget(m_sampleTuningWidget);
 
     mainLayout->setContentsMargins(0,0,0,0);
 
@@ -36,7 +40,7 @@ QuickSimulationWidget::QuickSimulationWidget(SessionModel *sessionModel, QWidget
 
 void QuickSimulationWidget::updateViews()
 {
-    m_testView->updateTreeView();
+    m_sampleTuningWidget->updateTreeView();
 }
 
 
diff --git a/GUI/coregui/Views/Components/SimulationWidgets/QuickSimulationWidget.h b/GUI/coregui/Views/Components/SimulationWidgets/QuickSimulationWidget.h
index b1a7da0183f..5366a8ad7b5 100644
--- a/GUI/coregui/Views/Components/SimulationWidgets/QuickSimulationWidget.h
+++ b/GUI/coregui/Views/Components/SimulationWidgets/QuickSimulationWidget.h
@@ -2,21 +2,23 @@
 #define QUICKSIMULATIONWIDGET_H
 
 #include <QWidget>
-#include "SessionModel.h"
-#include "SampleTuningWidget.h"
-#include "PlotWidget.h"
+class SampleModel;
+class InstrumentModel;
+class SampleTuningWidget;
+class PlotWidget;
 
 class QuickSimulationWidget : public QWidget
 {
     Q_OBJECT
 
 public:
-    QuickSimulationWidget(SessionModel *sessionModel, QWidget *parent = 0);
+    QuickSimulationWidget(SampleModel *sampleModel, InstrumentModel *instrumentModel, QWidget *parent = 0);
     void updateViews();
 
 private:
-    SessionModel *m_sessionModel;
-    SampleTuningWidget *m_testView;
+    SampleModel *m_sampleModel;
+    InstrumentModel *m_instrumentModel;
+    SampleTuningWidget *m_sampleTuningWidget;
     PlotWidget *m_plotWidget;
 
 };
diff --git a/GUI/coregui/Views/Components/SimulationWidgets/TestViewDelegate.cpp b/GUI/coregui/Views/Components/SimulationWidgets/SampleTuningDelegate.cpp
similarity index 90%
rename from GUI/coregui/Views/Components/SimulationWidgets/TestViewDelegate.cpp
rename to GUI/coregui/Views/Components/SimulationWidgets/SampleTuningDelegate.cpp
index e513cde80e3..3b668e8afe8 100644
--- a/GUI/coregui/Views/Components/SimulationWidgets/TestViewDelegate.cpp
+++ b/GUI/coregui/Views/Components/SimulationWidgets/SampleTuningDelegate.cpp
@@ -1,4 +1,4 @@
-#include "TestViewDelegate.h"
+#include "SampleTuningDelegate.h"
 #include <QDebug>
 #include <QPainter>
 #include <QPaintDevice>
@@ -12,14 +12,14 @@
 
 
 
-TestViewDelegate::TestViewDelegate(int valueColumn, QObject *parent)
+SampleTuningDelegate::SampleTuningDelegate(int valueColumn, QObject *parent)
     : QItemDelegate(parent)
 {
     this->m_valueColumn = valueColumn;
     this->m_multiplyFactor = 100;
 }
 
-void TestViewDelegate::paint(QPainter *painter,
+void SampleTuningDelegate::paint(QPainter *painter,
                           const QStyleOptionViewItem &option,
                           const QModelIndex &index) const
 {
@@ -62,7 +62,7 @@ void TestViewDelegate::paint(QPainter *painter,
 }
 
 
-QWidget *TestViewDelegate::createEditor(QWidget *parent,
+QWidget *SampleTuningDelegate::createEditor(QWidget *parent,
         const QStyleOptionViewItem &option,
         const QModelIndex &index) const
 {
@@ -126,18 +126,18 @@ QWidget *TestViewDelegate::createEditor(QWidget *parent,
 }
 
 
-void TestViewDelegate::sliderValueChanged(int position)
+void SampleTuningDelegate::sliderValueChanged(int position)
 {
     double value = (double)position/m_multiplyFactor;
     m_valueBox->setValue(value);
 }
 
-void TestViewDelegate::editorValueChanged(double value)
+void SampleTuningDelegate::editorValueChanged(double value)
 {
     qDebug() << "XXXX: new value: " << value;
 }
 
-void TestViewDelegate::setEditorData(QWidget *editor,
+void SampleTuningDelegate::setEditorData(QWidget *editor,
                                   const QModelIndex &index) const
 {
     if (index.column() == m_valueColumn) {
@@ -148,7 +148,7 @@ void TestViewDelegate::setEditorData(QWidget *editor,
 }
 
 
-void TestViewDelegate::setModelData(QWidget *editor,
+void SampleTuningDelegate::setModelData(QWidget *editor,
                                  QAbstractItemModel *model,
                                  const QModelIndex &index) const
 {
diff --git a/GUI/coregui/Views/Components/SimulationWidgets/TestViewDelegate.h b/GUI/coregui/Views/Components/SimulationWidgets/SampleTuningDelegate.h
similarity index 84%
rename from GUI/coregui/Views/Components/SimulationWidgets/TestViewDelegate.h
rename to GUI/coregui/Views/Components/SimulationWidgets/SampleTuningDelegate.h
index b91aaa1fca5..2d0a2d044ef 100644
--- a/GUI/coregui/Views/Components/SimulationWidgets/TestViewDelegate.h
+++ b/GUI/coregui/Views/Components/SimulationWidgets/SampleTuningDelegate.h
@@ -1,5 +1,5 @@
-#ifndef TESTVIEWDELEGATE_H
-#define TESTVIEWDELEGATE_H
+#ifndef SAMPLETUNINGDELEGATE_H
+#define SAMPLETUNINGDELEGATE_H
 
 #include <QItemDelegate>
 #include <QRect>
@@ -7,12 +7,12 @@
 #include <QHBoxLayout>
 #include <QDoubleSpinBox>
 
-class TestViewDelegate : public QItemDelegate
+class SampleTuningDelegate : public QItemDelegate
 {
     Q_OBJECT
 
 public:
-    TestViewDelegate(int valueColumn, QObject *parent = 0);
+    SampleTuningDelegate(int valueColumn, QObject *parent = 0);
 
     QSize sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & /* index */) const
     {
@@ -41,4 +41,4 @@ private:
     double m_multiplyFactor;
 };
 
-#endif //TESTVIEWDELEGATE_H
+#endif //SAMPLETUNINGDELEGATE_H
diff --git a/GUI/coregui/Views/Components/SimulationWidgets/SampleTuningWidget.cpp b/GUI/coregui/Views/Components/SimulationWidgets/SampleTuningWidget.cpp
index 1e6fab5e3eb..a25a1a49db2 100644
--- a/GUI/coregui/Views/Components/SimulationWidgets/SampleTuningWidget.cpp
+++ b/GUI/coregui/Views/Components/SimulationWidgets/SampleTuningWidget.cpp
@@ -1,26 +1,25 @@
 #include "SampleTuningWidget.h"
-#include "qitemselectionmodel.h"
+#include "SampleModel.h"
+#include "InstrumentModel.h"
 #include "PropertyAttribute.h"
-#include "TestViewDelegate.h"
-#include "qdebug.h"
+#include "SampleTuningDelegate.h"
 #include "ItemLink.h"
+#include <QItemSelectionModel>
+#include <QDebug>
 
-SampleTuningWidget::SampleTuningWidget(SessionModel *sampleModel, QWidget *parent)
+SampleTuningWidget::SampleTuningWidget(SampleModel *sampleModel, InstrumentModel *instrumentModel, QWidget *parent)
     : QWidget(parent)
+    , m_parameterModel(0)
+    , m_treeView(0)
+    , m_delegate(new SampleTuningDelegate(1))
     , m_sampleModel(sampleModel)
+    , m_instrumentModel(instrumentModel)
 {
 
-
-    m_itemModel = new QStandardItemModel(this);
-    m_itemModel->setHorizontalHeaderItem( 0, new QStandardItem( "Property" ) );
-    m_itemModel->setHorizontalHeaderItem( 1, new QStandardItem( "Value" ) );
-    updateItemModel();
-
     //generate Tree View
     m_treeView = new QTreeView(this);
     //treeView->setModel(model);
     //m_itemModel = getItemModelFromSessionModel();
-    m_treeView->setModel(m_itemModel);
     //treeView->setModel(getTestItemModel());
 
     m_treeView->setStyleSheet("QTreeView::branch {background: palette(base);}QTreeView::branch:has-siblings:!adjoins-item {border-image: url(:/images/treeview-vline.png) 0;}QTreeView::branch:has-siblings:adjoins-item {border-image: url(:/images/treeview-branch-more.png) 0;}QTreeView::branch:!has-children:!has-siblings:adjoins-item {border-image: url(:/images/treeview-branch-end.png) 0;}QTreeView::branch:has-children:!has-siblings:closed,QTreeView::branch:closed:has-children:has-siblings {border-image: none;image: url(:/images/treeview-branch-closed.png);}QTreeView::branch:open:has-children:!has-siblings,QTreeView::branch:open:has-children:has-siblings  {border-image: none;image: url(:/images/treeview-branch-open.png);}");
@@ -37,7 +36,7 @@ SampleTuningWidget::SampleTuningWidget(SessionModel *sampleModel, QWidget *paren
 
 
 
-    m_treeView->setItemDelegate(new TestViewDelegate(1));
+    m_treeView->setItemDelegate(m_delegate);
 
 
     //generate Table View
@@ -198,63 +197,73 @@ void SampleTuningWidget::insertRowIntoItem(QStandardItem *parentItem, QString ti
 
 }
 
-QStandardItemModel *SampleTuningWidget::getTestItemModel()
-{
-    QStandardItemModel *model = new QStandardItemModel(this);
-    model->setHorizontalHeaderItem( 0, new QStandardItem( "Property" ) );
-    model->setHorizontalHeaderItem( 1, new QStandardItem( "Value" ) );
+//QStandardItemModel *SampleTuningWidget::getTestItemModel()
+//{
+//    QStandardItemModel *model = new QStandardItemModel(this);
+//    model->setHorizontalHeaderItem( 0, new QStandardItem( "Property" ) );
+//    model->setHorizontalHeaderItem( 1, new QStandardItem( "Value" ) );
 
-    QStandardItem *formFactorItem = new QStandardItem(QString("Form Factor"));
+//    QStandardItem *formFactorItem = new QStandardItem(QString("Form Factor"));
 
 
-    QStandardItem *lengthTitleItem = new QStandardItem(QString("Length"));
-    QStandardItem *lengthValueItem = new QStandardItem();
-    lengthValueItem->setData(QVariant(10.0), Qt::EditRole);
-    lengthValueItem->setEditable(true);
+//    QStandardItem *lengthTitleItem = new QStandardItem(QString("Length"));
+//    QStandardItem *lengthValueItem = new QStandardItem();
+//    lengthValueItem->setData(QVariant(10.0), Qt::EditRole);
+//    lengthValueItem->setEditable(true);
 
-    QStandardItem *heightTitleItem = new QStandardItem(QString("Height"));
-    QStandardItem *heightValueItem = new QStandardItem();
-    heightValueItem->setData(QVariant(20.0), Qt::EditRole);
-    heightValueItem->setEditable(true);
+//    QStandardItem *heightTitleItem = new QStandardItem(QString("Height"));
+//    QStandardItem *heightValueItem = new QStandardItem();
+//    heightValueItem->setData(QVariant(20.0), Qt::EditRole);
+//    heightValueItem->setEditable(true);
 
-    QStandardItem *widthTitleItem = new QStandardItem(QString("Width"));
-    QStandardItem *widthValueItem = new QStandardItem();
-    widthValueItem->setData(QVariant(30.0), Qt::EditRole);
-    widthValueItem->setEditable(true);
+//    QStandardItem *widthTitleItem = new QStandardItem(QString("Width"));
+//    QStandardItem *widthValueItem = new QStandardItem();
+//    widthValueItem->setData(QVariant(30.0), Qt::EditRole);
+//    widthValueItem->setEditable(true);
 
-    QList<QStandardItem *> lengthList;
-    lengthList << lengthTitleItem << lengthValueItem;
-    formFactorItem->appendRow(lengthList);
+//    QList<QStandardItem *> lengthList;
+//    lengthList << lengthTitleItem << lengthValueItem;
+//    formFactorItem->appendRow(lengthList);
 
-    //formFactorItem->setChild(0,0,lengthTitleItem);
-    //formFactorItem->setChild(0,1,lengthValueItem);
-    formFactorItem->setChild(1,0,heightTitleItem);
-    formFactorItem->setChild(1,1,heightValueItem);
-    formFactorItem->setChild(2,0,widthTitleItem);
-    formFactorItem->setChild(2,1,widthValueItem);
+//    //formFactorItem->setChild(0,0,lengthTitleItem);
+//    //formFactorItem->setChild(0,1,lengthValueItem);
+//    formFactorItem->setChild(1,0,heightTitleItem);
+//    formFactorItem->setChild(1,1,heightValueItem);
+//    formFactorItem->setChild(2,0,widthTitleItem);
+//    formFactorItem->setChild(2,1,widthValueItem);
 
 
-    QStandardItem *particleItem = new QStandardItem( QString("Particle"));
-    particleItem->appendRow(formFactorItem);
+//    QStandardItem *particleItem = new QStandardItem( QString("Particle"));
+//    particleItem->appendRow(formFactorItem);
 
-    QStandardItem *layerItem = new QStandardItem( QString("Multilayer"));
-    layerItem->appendRow(particleItem);
+//    QStandardItem *layerItem = new QStandardItem( QString("Multilayer"));
+//    layerItem->appendRow(particleItem);
 
-    model->appendRow(layerItem);
+//    model->appendRow(layerItem);
 
-    return model;
+//    return model;
+//}
 
-}
 
 void SampleTuningWidget::updateTreeView()
 {
-    updateItemModel();
+    m_treeView->setModel(0);
+
+    delete m_parameterModel;
+    m_parameterModel = createParameterModel();
+
+    m_treeView->setModel(m_parameterModel);
     m_treeView->expandAll();
 }
 
-void SampleTuningWidget::updateItemModel()
+QStandardItemModel *SampleTuningWidget::createParameterModel()
 {
-    m_itemModel->setItem(0, iterateSessionModel());
+    QStandardItemModel *result(0);
+    result = new QStandardItemModel(this);
+    result->setHorizontalHeaderItem( 0, new QStandardItem( "Property" ) );
+    result->setHorizontalHeaderItem( 1, new QStandardItem( "Value" ) );
+    result->setItem(0, iterateSessionModel());
+    return result;
 }
 
 
diff --git a/GUI/coregui/Views/Components/SimulationWidgets/SampleTuningWidget.h b/GUI/coregui/Views/Components/SimulationWidgets/SampleTuningWidget.h
index 9955d8f877c..84a8b7275ea 100644
--- a/GUI/coregui/Views/Components/SimulationWidgets/SampleTuningWidget.h
+++ b/GUI/coregui/Views/Components/SimulationWidgets/SampleTuningWidget.h
@@ -5,14 +5,14 @@
 #include <QTreeView>
 #include <QAction>
 #include <QSignalMapper>
-
-#include "qstandarditemmodel.h"
 #include <QTableWidget>
-#include "SessionModel.h"
+#include <QStandardItemModel>
 
 
-class TestViewDelegate;
+class SampleTuningDelegate;
 class ParameterizedItem;
+class SampleModel;
+class InstrumentModel;
 
 
 //! TestView window to try things in mainwindow
@@ -21,24 +21,24 @@ class SampleTuningWidget : public QWidget
     Q_OBJECT
 
 public:
-    SampleTuningWidget(SessionModel *sampleModel, QWidget *parent = 0);
+    SampleTuningWidget(SampleModel *sampleModel, InstrumentModel *instrumentModel, QWidget *parent = 0);
     void updateTreeView();
 
 
 private:
-    QTreeView *m_treeView;
-    TestViewDelegate *m_delegate;
-    QTableWidget *m_tableWidget;
-    SessionModel *m_sampleModel;
-//    QStandardItemModel *getItemModelFromSessionModel();
-    QStandardItemModel *getTestItemModel();
+    //QStandardItemModel *getItemModelFromSessionModel();
+    // QStandardItemModel *getTestItemModel();
     QStandardItem *iterateSessionModel(const QModelIndex &parentIndex = QModelIndex(), QStandardItem *parentItem = NULL);
     void insertRowIntoItem(QStandardItem *parentItem, QStandardItem *childTitleItem, QStandardItem *childValueItem = NULL);
     void insertRowIntoItem(QStandardItem *parentItem, QString title, QVariant value, ParameterizedItem *parameterizedItem);
-    QStandardItemModel *m_itemModel;
-    void updateItemModel();
 
+    QStandardItemModel *createParameterModel();
 
+    QStandardItemModel *m_parameterModel;
+    QTreeView *m_treeView;
+    SampleTuningDelegate *m_delegate;
+    SampleModel *m_sampleModel;
+    InstrumentModel *m_instrumentModel;
 };
 
 
diff --git a/GUI/coregui/Views/Components/SimulationWidgets/SimulationSetupWidget.cpp b/GUI/coregui/Views/Components/SimulationWidgets/SimulationSetupWidget.cpp
index 1b395685db9..ef6d1b9675f 100644
--- a/GUI/coregui/Views/Components/SimulationWidgets/SimulationSetupWidget.cpp
+++ b/GUI/coregui/Views/Components/SimulationWidgets/SimulationSetupWidget.cpp
@@ -120,26 +120,21 @@ void SimulationSetupWidget::setJobQueueModel(JobQueueModel *model)
     }
 }
 
+QString SimulationSetupWidget::getInstrumentSelection() const
+{
+    return instrumentSelectionBox->currentText();
+}
 
-void SimulationSetupWidget::updateViewElements()
+QString SimulationSetupWidget::getSampleSelection() const
 {
-    instrumentSelectionBox->clear();
-    if(mp_simulation_data_model->getInstrumentList().isEmpty()) {
-        instrumentSelectionBox->addItem("No instrument defined yet");
-        instrumentSelectionBox->setEnabled(false);
-    } else {
-        instrumentSelectionBox->setEnabled(true);
-        instrumentSelectionBox->addItems(mp_simulation_data_model->getInstrumentList().keys());
-    }
+    return sampleSelectionBox->currentText();
+}
 
-    sampleSelectionBox->clear();
-    if(mp_simulation_data_model->getSampleList().isEmpty()) {
-        sampleSelectionBox->addItem("No sample to simulate yet");
-        sampleSelectionBox->setEnabled(false);
-    } else {
-        sampleSelectionBox->setEnabled(true);
-        sampleSelectionBox->addItems(mp_simulation_data_model->getSampleList().keys());
-    }
+
+void SimulationSetupWidget::updateViewElements()
+{
+    updateSelectionBox(instrumentSelectionBox, mp_simulation_data_model->getInstrumentList().keys());
+    updateSelectionBox(sampleSelectionBox, mp_simulation_data_model->getSampleList().keys());
 }
 
 void SimulationSetupWidget::onRunSimulation()
@@ -205,3 +200,20 @@ void SimulationSetupWidget::onJobFinished()
                              tr("A simulation job has finished."));
 }
 
+void SimulationSetupWidget::updateSelectionBox(QComboBox *comboBox, QStringList itemList)
+{
+    QString previousItem = comboBox->currentText();
+
+    comboBox->clear();
+    if(itemList.isEmpty()) {
+        comboBox->setEnabled(false);
+        comboBox->addItem("Not yet defined");
+    } else {
+        comboBox->setEnabled(true);
+        qSort(itemList.begin(), itemList.end());
+        comboBox->addItems(itemList);
+        if(itemList.contains(previousItem))
+            comboBox->setCurrentIndex(itemList.indexOf(previousItem));
+    }
+}
+
diff --git a/GUI/coregui/Views/Components/SimulationWidgets/SimulationSetupWidget.h b/GUI/coregui/Views/Components/SimulationWidgets/SimulationSetupWidget.h
index c54fad3fa04..5d291074649 100644
--- a/GUI/coregui/Views/Components/SimulationWidgets/SimulationSetupWidget.h
+++ b/GUI/coregui/Views/Components/SimulationWidgets/SimulationSetupWidget.h
@@ -18,12 +18,17 @@ public:
     void updateViewElements();
     void setJobQueueModel(JobQueueModel *model);
 
+    QString getInstrumentSelection() const;
+    QString getSampleSelection() const;
+
 public slots:
     void onRunSimulation();
     void onPythonJobLaunched();
     void onJobFinished();
 
 private:
+    void updateSelectionBox(QComboBox *comboBox, QStringList itemList);
+
     SimulationDataModel *mp_simulation_data_model;
     JobQueueModel *m_jobQueueModel;
     QComboBox *instrumentSelectionBox;
diff --git a/GUI/coregui/Views/SimulationView.cpp b/GUI/coregui/Views/SimulationView.cpp
index 9fcbf5908f9..fca409b7989 100644
--- a/GUI/coregui/Views/SimulationView.cpp
+++ b/GUI/coregui/Views/SimulationView.cpp
@@ -7,16 +7,22 @@
 #include "JobQueueModel.h"
 #include "QVBoxLayout"
 
-SimulationView::SimulationView(SimulationDataModel *p_simulation_data_model, JobQueueModel *jobQueueModel, SampleModel *sampleModel, QWidget *parent)
-    : QWidget(parent)
-    , mp_simulation_data_model(p_simulation_data_model)
-    , m_jobQueueModel(jobQueueModel)
-    , m_sampleModel(sampleModel)
+SimulationView::SimulationView(MainWindow *mainWindow)
+    : QWidget(mainWindow)
+    , mp_simulation_data_model(0)
+    , m_jobQueueModel(0)
+    , m_sampleModel(0)
+    , m_instrumentModel(0)
 {
+    mp_simulation_data_model = mainWindow->getSimulationDataModel();
+    m_jobQueueModel = mainWindow->getJobQueueModel();
+    m_sampleModel = mainWindow->getSampleModel();
+    m_instrumentModel = mainWindow->getInstrumentModel();
+
     m_simulationSetupWidget = new SimulationSetupWidget(mp_simulation_data_model);
     m_simulationSetupWidget->setJobQueueModel(m_jobQueueModel);
 
-    m_quickSimulationWidget = new QuickSimulationWidget(m_sampleModel);
+    m_quickSimulationWidget = new QuickSimulationWidget(m_sampleModel, m_instrumentModel);
 
     m_tabWidget = new QTabWidget();
     m_tabWidget->insertTab(SimulationSetupTab, m_simulationSetupWidget, tr("Simulation Params"));
diff --git a/GUI/coregui/Views/SimulationView.h b/GUI/coregui/Views/SimulationView.h
index 462332ff431..32cf39528f0 100644
--- a/GUI/coregui/Views/SimulationView.h
+++ b/GUI/coregui/Views/SimulationView.h
@@ -7,6 +7,7 @@
 #include "QuickSimulationWidget.h"
 #include <QTabWidget>
 
+class MainWindow;
 class SimulationDataModel;
 class JobQueueModel;
 class SampleModel;
@@ -18,7 +19,8 @@ class SimulationView : public QWidget
 
 public:
     enum TabViewId { SimulationSetupTab, QuickSimulationTab};
-    SimulationView(SimulationDataModel *p_simulation_data_model, JobQueueModel *jobQueueModel, SampleModel *sampleModel, QWidget *parent = 0);
+    SimulationView(MainWindow *mainWindow);
+
     void updateSimulationViewElements();
 
 public slots:
@@ -28,6 +30,7 @@ private:
     SimulationDataModel *mp_simulation_data_model;
     JobQueueModel *m_jobQueueModel;
     SampleModel *m_sampleModel;
+    InstrumentModel *m_instrumentModel;
 
     SimulationSetupWidget *m_simulationSetupWidget;
     QuickSimulationWidget *m_quickSimulationWidget;
diff --git a/GUI/coregui/mainwindow/mainwindow.cpp b/GUI/coregui/mainwindow/mainwindow.cpp
index e197c97695e..a88b933d0ca 100644
--- a/GUI/coregui/mainwindow/mainwindow.cpp
+++ b/GUI/coregui/mainwindow/mainwindow.cpp
@@ -91,11 +91,11 @@ MainWindow::MainWindow(QWidget *parent)
 
     m_tabWidget = new Manhattan::FancyTabWidget();
     m_welcomeView = new WelcomeView(this);
-    m_instrumentView = new InstrumentView(m_instrumentModel, this);
-    m_sampleView = new SampleView(m_sampleModel, m_instrumentModel, this);
+    m_instrumentView = new InstrumentView(m_instrumentModel);
+    m_sampleView = new SampleView(m_sampleModel, m_instrumentModel);
     //m_scriptView = new PyScriptView(mp_sim_data_model);
-    m_simulationView = new SimulationView(mp_sim_data_model, m_jobQueueModel, m_sampleModel, this);
-    m_jobQueueView = new JobQueueView(m_jobQueueModel, this);
+    m_simulationView = new SimulationView(this);
+    m_jobQueueView = new JobQueueView(m_jobQueueModel);
     //m_testView = new TestView(m_sampleModel, this);
 
     m_tabWidget->insertTab(WelcomeTab, m_welcomeView, QIcon(":/images/main_home.png"), "Welcome");
-- 
GitLab