From 3febb81eebdb577c58bf6ae3cb4aa3ab9cb191af Mon Sep 17 00:00:00 2001
From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de>
Date: Fri, 24 Jun 2022 18:48:39 +0200
Subject: [PATCH] doing common spinbox

---
 GUI/View/Common/SafeSpinBox.cpp               |  2 +-
 GUI/View/Instrument/AxisPropertyEditor.cpp    |  2 +-
 .../Instrument/RectangularDetectorEditor.cpp  |  5 ++--
 GUI/View/Tool/WidgetUtils.cpp                 | 27 +++++++++++++++++--
 4 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/GUI/View/Common/SafeSpinBox.cpp b/GUI/View/Common/SafeSpinBox.cpp
index 5693329d4e9..44f74de457d 100644
--- a/GUI/View/Common/SafeSpinBox.cpp
+++ b/GUI/View/Common/SafeSpinBox.cpp
@@ -19,7 +19,7 @@ SafeSpinBox::SafeSpinBox(bool easyScrollable, QWidget* parent)
     : QSpinBox{parent}
     , easyScrollable(easyScrollable)
 {
-
+    setFocusPolicy(Qt::StrongFocus);
 }
 
 void SafeSpinBox::wheelEvent(QWheelEvent *event)
diff --git a/GUI/View/Instrument/AxisPropertyEditor.cpp b/GUI/View/Instrument/AxisPropertyEditor.cpp
index b4019169c1b..b40525db88c 100644
--- a/GUI/View/Instrument/AxisPropertyEditor.cpp
+++ b/GUI/View/Instrument/AxisPropertyEditor.cpp
@@ -31,7 +31,7 @@ AxisPropertyEditor::AxisPropertyEditor(QWidget* parent, const QString& groupTitl
     auto* formLayout = new QFormLayout(this);
     formLayout->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
 
-    m_nbinsSpinBox = GUI::Util::createSpinBox(axisProperty->nbins());
+    m_nbinsSpinBox = GUI::Util::createSpinBoxRow(formLayout, axisProperty->nbins());
     m_minSpinBox = GUI::Util::createDoubleSpinBoxRow(formLayout, axisProperty->min());
     m_maxSpinBox = GUI::Util::createDoubleSpinBoxRow(formLayout, axisProperty->max());
 
diff --git a/GUI/View/Instrument/RectangularDetectorEditor.cpp b/GUI/View/Instrument/RectangularDetectorEditor.cpp
index 6475aba98bd..3aa2953dc91 100644
--- a/GUI/View/Instrument/RectangularDetectorEditor.cpp
+++ b/GUI/View/Instrument/RectangularDetectorEditor.cpp
@@ -16,6 +16,7 @@
 #include "GUI/Model/Device/AxesItems.h"
 #include "GUI/Model/Device/RectangularDetectorItem.h"
 #include "GUI/View/Common/DoubleSpinBox.h"
+#include "GUI/View/Common/SafeSpinBox.h"
 #include "GUI/View/Instrument/DetectorAlignmentEditor.h"
 #include "GUI/View/Instrument/ResolutionFunctionEditor.h"
 #include "GUI/View/Tool/GroupBoxCollapser.h"
@@ -41,7 +42,7 @@ RectangularDetectorEditor::RectangularDetectorEditor(QWidget* parent,
     xAxisGroupBox->setProperty("subgroup", true); // for stylesheet addressing
     auto* xAxisFormLayout = new QFormLayout(xAxisGroupBox);
 
-    auto* xAxisNbinsSpinBox = new QSpinBox(xAxisGroupBox);
+    auto* xAxisNbinsSpinBox = new SafeSpinBox;
     xAxisNbinsSpinBox->setRange(1, 65536);
     xAxisNbinsSpinBox->setValue(detector->xSize());
     xAxisFormLayout->addRow("Nbins:", xAxisNbinsSpinBox);
@@ -68,7 +69,7 @@ RectangularDetectorEditor::RectangularDetectorEditor(QWidget* parent,
     yAxisGroupBox->setProperty("subgroup", true); // for stylesheet addressing
     auto* yAxisFormLayout = new QFormLayout(yAxisGroupBox);
 
-    auto* yAxisNbinsSpinBox = new QSpinBox(yAxisGroupBox);
+    auto* yAxisNbinsSpinBox = new SafeSpinBox;
     yAxisNbinsSpinBox->setRange(1, 65536);
     yAxisNbinsSpinBox->setValue(detector->ySize());
     yAxisFormLayout->addRow("Nbins:", yAxisNbinsSpinBox);
diff --git a/GUI/View/Tool/WidgetUtils.cpp b/GUI/View/Tool/WidgetUtils.cpp
index 61cdfac908d..f929b0827b2 100644
--- a/GUI/View/Tool/WidgetUtils.cpp
+++ b/GUI/View/Tool/WidgetUtils.cpp
@@ -24,12 +24,36 @@
 #include <QCheckBox>
 #include <QLineEdit>
 
+//QWidget* MinimizerSettingsWidget::createSpinbox(UIntDescriptor d)
+//{
+//    auto* spinBox = new QSpinBox(this);
+//    spinBox->setToolTip(d.tooltip);
+//    spinBox->setMaximum(std::numeric_limits<int>::max());
+//    spinBox->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
+
+//    if (d.limits.hasLowerLimit())
+//        spinBox->setMinimum(static_cast<int>(d.limits.lowerLimit()));
+//    if (d.limits.hasUpperLimit())
+//        spinBox->setMaximum(static_cast<int>(d.limits.upperLimit()));
+
+//    spinBox->setValue(d.get());
+
+//    QObject::connect(spinBox, QOverload<int>::of(&QSpinBox::valueChanged),
+//                     [=](int newValue) { d.set(newValue); });
+
+//    m_updaters << [=]() {
+//        QSignalBlocker b(spinBox);
+//        spinBox->setValue(d.get());
+//    };
+
+//    return spinBox;
+//}
+
 SafeSpinBox* GUI::Util::createSpinBox(const UIntDescriptor& d,
                                       std::function<void(uint)> slot,
                                       bool easyScrollable)
 {
     auto* spinBox = new SafeSpinBox(easyScrollable);
-    spinBox->setFocusPolicy(Qt::StrongFocus);
     spinBox->setToolTip(d.tooltip);
     spinBox->setMaximum(std::numeric_limits<int>::max());
     spinBox->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
@@ -74,7 +98,6 @@ QString GUI::Util::labelWithUnit(const QString& label, variant<QString, Unit> un
 {
     const QString s = std::holds_alternative<QString>(unit) ? std::get<QString>(unit)
                                                             : unitAsString(std::get<Unit>(unit));
-
     if (!s.isEmpty())
         return label + " [" + s + "]";
 
-- 
GitLab