From eefdeaae7ec7f0219223644e09cace04f6430118 Mon Sep 17 00:00:00 2001
From: Matthias Puchner <github@mpuchner.de>
Date: Tue, 7 Dec 2021 13:09:23 +0100
Subject: [PATCH] show only the currently selected sample in py preview

---
 GUI/View/SampleDesigner/SampleView.cpp  |  3 ++
 GUI/View/SampleDesigner/ScriptPanel.cpp | 39 +++++++++++++++----------
 GUI/View/SampleDesigner/ScriptPanel.h   |  4 +++
 3 files changed, 30 insertions(+), 16 deletions(-)

diff --git a/GUI/View/SampleDesigner/SampleView.cpp b/GUI/View/SampleDesigner/SampleView.cpp
index f1a906a1e4d..7e27f6f3ad1 100644
--- a/GUI/View/SampleDesigner/SampleView.cpp
+++ b/GUI/View/SampleDesigner/SampleView.cpp
@@ -76,6 +76,9 @@ SampleView::SampleView(QWidget* parent, ProjectDocument* document)
     connect(sampleSelectionView, &SampleListView::currentSampleChanged, m_realSpacePanel->canvas(),
             &RealSpaceCanvas::setCurrentItem);
 
+    connect(sampleSelectionView, &SampleListView::currentSampleChanged, scriptPanel,
+            &ScriptPanel::setCurrentSample);
+
     connect(editor, &LayerOrientedSampleEditor::requestViewInRealSpace, this,
             &SampleView::onRequestViewInRealSpace);
 
diff --git a/GUI/View/SampleDesigner/ScriptPanel.cpp b/GUI/View/SampleDesigner/ScriptPanel.cpp
index 427eb3e3ae3..8e3af3eb6b2 100644
--- a/GUI/View/SampleDesigner/ScriptPanel.cpp
+++ b/GUI/View/SampleDesigner/ScriptPanel.cpp
@@ -40,6 +40,7 @@ ScriptPanel::ScriptPanel(SampleModel* sampleModel, QWidget* parent)
     , m_highlighter(nullptr)
     , m_updateTimer(new UpdateTimer(accumulateUpdatesDuringMsec, this))
     , m_cautionSign(new CautionSign(m_textEdit))
+    , m_currentMultiLayerItem(nullptr)
 {
     setWindowTitle("Python Script");
     setObjectName("ScriptPanel");
@@ -56,6 +57,12 @@ ScriptPanel::ScriptPanel(SampleModel* sampleModel, QWidget* parent)
     m_textEdit->setFontPointSize(DesignerHelper::getPythonEditorFontSize());
 }
 
+void ScriptPanel::setCurrentSample(MultiLayerItem* multiLayerItem)
+{
+    m_currentMultiLayerItem = multiLayerItem;
+    updateEditor();
+}
+
 void ScriptPanel::updateEditor()
 {
     if (!m_highlighter) {
@@ -109,23 +116,23 @@ void ScriptPanel::hideEvent(QHideEvent*)
 QString ScriptPanel::generateCodeSnippet()
 {
     m_cautionSign->clear();
-    QString result;
 
-    for (const MultiLayerItem* sampleItem : m_sampleModel->multiLayerItems()) {
-        try {
-            auto multilayer = GUI::Model::DomainObjectBuilder::buildMultiLayer(*sampleItem);
-            if (!result.isEmpty())
-                result.append("\n");
-            result.append(QString::fromStdString(Py::Export::sampleCode(*multilayer)));
-        } catch (const std::exception& ex) {
-            QString message =
-                QString("Generation of Python Script failed. Code is not complete.\n\n"
-                        "It can happen if sample requires further assembling or some of sample "
-                        "parameters are not valid. See details below.\n\n%1")
-                    .arg(QString::fromStdString(ex.what()));
-
-            m_cautionSign->setCautionMessage(message);
-        }
+    if (m_currentMultiLayerItem == nullptr)
+        return {};
+
+    QString result;
+    try {
+        auto multilayer =
+            GUI::Model::DomainObjectBuilder::buildMultiLayer(*m_currentMultiLayerItem);
+        result.append(QString::fromStdString(Py::Export::sampleCode(*multilayer)));
+    } catch (const std::exception& ex) {
+        QString message =
+            QString("Generation of Python Script failed. Code is not complete.\n\n"
+                    "It can happen if sample requires further assembling or some of sample "
+                    "parameters are not valid. See details below.\n\n%1")
+                .arg(QString::fromStdString(ex.what()));
+
+        m_cautionSign->setCautionMessage(message);
     }
 
     return result;
diff --git a/GUI/View/SampleDesigner/ScriptPanel.h b/GUI/View/SampleDesigner/ScriptPanel.h
index bc8bd6c6c1a..dff8439d7f0 100644
--- a/GUI/View/SampleDesigner/ScriptPanel.h
+++ b/GUI/View/SampleDesigner/ScriptPanel.h
@@ -25,6 +25,7 @@ class QShowEvent;
 class QHideEvent;
 class QTextEdit;
 class QModelIndex;
+class MultiLayerItem;
 
 //! Resides at the bottom of SampleView and displays a Python script.
 
@@ -34,6 +35,8 @@ class ScriptPanel : public QWidget {
 public:
     explicit ScriptPanel(SampleModel* sampleModel, QWidget* parent);
 
+    void setCurrentSample(MultiLayerItem* multiLayerItem);
+
 protected:
     void showEvent(QShowEvent*) override;
     void hideEvent(QHideEvent*) override;
@@ -52,6 +55,7 @@ private:
     PythonSyntaxHighlighter* m_highlighter;
     UpdateTimer* m_updateTimer;
     CautionSign* m_cautionSign;
+    MultiLayerItem* m_currentMultiLayerItem;
 };
 
 #endif // BORNAGAIN_GUI_VIEW_SAMPLEDESIGNER_SCRIPTPANEL_H
-- 
GitLab