From 54b9dfa4e6dbab31bd9e36c8d571c0c0fc4f808d Mon Sep 17 00:00:00 2001
From: Matthias Puchner <github@mpuchner.de>
Date: Fri, 28 Jan 2022 15:32:17 +0100
Subject: [PATCH] enhance VectorEditor to work with VectorDescriptor

---
 GUI/View/Instrument/VectorEditor.cpp | 34 +++++++++++++---------------
 GUI/View/Instrument/VectorEditor.h   |  4 +++-
 2 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/GUI/View/Instrument/VectorEditor.cpp b/GUI/View/Instrument/VectorEditor.cpp
index 6efd3742f1a..38727efffd6 100644
--- a/GUI/View/Instrument/VectorEditor.cpp
+++ b/GUI/View/Instrument/VectorEditor.cpp
@@ -23,7 +23,6 @@
 
 VectorEditor::VectorEditor(const QString& title, const QString& tooltip, QWidget* parent)
     : QGroupBox(title, parent)
-    , m_item(nullptr)
 {
     auto* form = new QFormLayout(this);
 
@@ -55,39 +54,38 @@ VectorEditor::VectorEditor(const QString& title, const QString& tooltip, QWidget
 
 void VectorEditor::setItem(VectorItem* item)
 {
-    m_item = item;
-    setEnabled(m_item);
-    if (m_item) {
-        m_xSpinBox->setValue(m_item->x());
-        m_ySpinBox->setValue(m_item->y());
-        m_zSpinBox->setValue(m_item->z());
-    } else {
-        m_xSpinBox->setValue(0);
-        m_ySpinBox->setValue(0);
-        m_zSpinBox->setValue(0);
-    }
+    ASSERT(item);
+    setVector(VectorDescriptor(item, Unit::unitless));
+}
+
+void VectorEditor::setVector(const VectorDescriptor& d)
+{
+    m_descriptor = d;
+    m_xSpinBox->setValue(m_descriptor.x);
+    m_ySpinBox->setValue(m_descriptor.y);
+    m_zSpinBox->setValue(m_descriptor.z);
 }
 
 void VectorEditor::onXValueChanged(double x)
 {
-    if (m_item) {
-        m_item->setX(x);
+    if (x != m_descriptor.x) {
+        m_descriptor.x.set(x);
         emit vectorChanged();
     }
 }
 
 void VectorEditor::onYValueChanged(double y)
 {
-    if (m_item) {
-        m_item->setY(y);
+    if (y != m_descriptor.y) {
+        m_descriptor.y.set(y);
         emit vectorChanged();
     }
 }
 
 void VectorEditor::onZValueChanged(double z)
 {
-    if (m_item) {
-        m_item->setZ(z);
+    if (z != m_descriptor.z) {
+        m_descriptor.z.set(z);
         emit vectorChanged();
     }
 }
diff --git a/GUI/View/Instrument/VectorEditor.h b/GUI/View/Instrument/VectorEditor.h
index 6cc7c268247..31b271994c1 100644
--- a/GUI/View/Instrument/VectorEditor.h
+++ b/GUI/View/Instrument/VectorEditor.h
@@ -15,6 +15,7 @@
 #ifndef BORNAGAIN_GUI_VIEW_INSTRUMENT_VECTOREDITOR_H
 #define BORNAGAIN_GUI_VIEW_INSTRUMENT_VECTOREDITOR_H
 
+#include "GUI/Model/Types/VectorDescriptor.h"
 #include <QGroupBox>
 
 class QDoubleSpinBox;
@@ -30,6 +31,7 @@ public:
     /// \param tooltip the tooltip for the spinboxes with wildcard ("%1") for coordinate
     VectorEditor(const QString& title, const QString& tooltip, QWidget* parent = nullptr);
     void setItem(VectorItem* item);
+    void setVector(const VectorDescriptor& d);
 
 signals:
     void vectorChanged();
@@ -43,7 +45,7 @@ private:
     QDoubleSpinBox* m_xSpinBox;
     QDoubleSpinBox* m_ySpinBox;
     QDoubleSpinBox* m_zSpinBox;
-    VectorItem* m_item;
+    VectorDescriptor m_descriptor;
 };
 
 #endif // BORNAGAIN_GUI_VIEW_INSTRUMENT_VECTOREDITOR_H
-- 
GitLab