Skip to content
Snippets Groups Projects
Commit 6fb0231a authored by Matthias Puchner's avatar Matthias Puchner Committed by Wuttke, Joachim
Browse files

harmonize instrument editor UI; simplify

parent ed013379
No related branches found
No related tags found
1 merge request!708Refactor and simplify UI
Showing
with 72 additions and 69 deletions
......@@ -15,6 +15,7 @@
#include "GUI/View/Instrument/AxisPropertyEditor.h"
#include "GUI/Model/Descriptor/AxisProperty.h"
#include "GUI/View/Edit/DoubleSpinBox.h"
#include "GUI/View/Tool/GroupBoxCollapser.h"
#include "GUI/View/Tool/WidgetUtils.h"
#include <QFormLayout>
#include <QGroupBox>
......@@ -25,12 +26,16 @@ AxisPropertyEditor::AxisPropertyEditor(QWidget* parent, const QString& groupTitl
: QGroupBox(groupTitle, parent)
, m_axisProperty(axisProperty)
{
setProperty("subgroup", true); // for stylesheet addressing
auto* formLayout = new QFormLayout(this);
formLayout->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
m_nbinsSpinBox = GUI::Util::createSpinBox(formLayout, axisProperty->nbins());
m_minSpinBox = GUI::Util::createSpinBox(formLayout, axisProperty->min());
m_maxSpinBox = GUI::Util::createSpinBox(formLayout, axisProperty->max());
GroupBoxCollapser::installIntoGroupBox(this);
connect(m_nbinsSpinBox, qOverload<int>(&QSpinBox::valueChanged), [=](int v) {
if (axisProperty->nbins() != static_cast<uint>(v)) {
axisProperty->setNbins(v);
......
......@@ -34,10 +34,8 @@ DepthProbeInstrumentEditor::DepthProbeInstrumentEditor(QWidget* parent,
auto* parametersGroupBox = new QGroupBox(this);
parametersGroupBox->setTitle("Parameters");
auto* grid = new QGridLayout(parametersGroupBox);
grid->setColumnStretch(0, 1);
grid->setColumnStretch(1, 1);
grid->setColumnStretch(2, 1);
auto* vLayout = new QVBoxLayout(parametersGroupBox);
vLayout->setContentsMargins(30, 8, 0, 0);
// valid input range is ]0,inf[
MeanConfig wave_cfg{boost::numeric::interval<double>(std::numeric_limits<double>::min(),
......@@ -46,14 +44,14 @@ DepthProbeInstrumentEditor::DepthProbeInstrumentEditor(QWidget* parent,
auto* m_wavelengthEditor =
new DistributionEditor("Wavelength [nm]", wave_cfg, GUI::ID::Distributions::Symmetric, this,
instrument->beamItem()->wavelengthItem());
grid->addWidget(m_wavelengthEditor, 1, 0);
vLayout->addWidget(m_wavelengthEditor);
auto* inclinationEditor =
new InclinationAnglesEditor(this, instrument->beamItem()->inclinationAngleItem());
grid->addWidget(inclinationEditor, 1, 1);
vLayout->addWidget(inclinationEditor);
auto* depthAxisEditor = new AxisPropertyEditor(this, "Depth axis", &instrument->zAxis());
grid->addWidget(depthAxisEditor, 1, 2);
vLayout->addWidget(depthAxisEditor);
GroupBoxCollapser::installIntoGroupBox(parametersGroupBox);
layout->addWidget(parametersGroupBox);
......
......@@ -16,26 +16,26 @@
#include "GUI/Model/Device/FootprintItems.h"
#include "GUI/Model/Device/InstrumentItems.h"
#include "GUI/View/Edit/DoubleSpinBox.h"
#include "GUI/View/Tool/GroupBoxCollapser.h"
#include "GUI/View/Tool/WidgetUtils.h"
#include <QFormLayout>
#include <QGroupBox>
FootprintCorrectionEditor::FootprintCorrectionEditor(QWidget* parent, SpecularBeamItem* item)
: QWidget(parent)
: QGroupBox("Footprint correction", parent)
, m_item(item)
{
ASSERT(item);
auto* layout = new QVBoxLayout(this);
auto* gbox = new QGroupBox("Footprint correction", this);
layout->addWidget(gbox);
m_formLayout = new QFormLayout(gbox);
setProperty("subgroup", true); // for stylesheet addressing
m_formLayout = new QFormLayout(this);
m_formLayout->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
auto* typeCombo = GUI::Util::createSelectionCombo(this, item->footprintSelection(), [=](int) {
createFootprintWidgets();
emit dataChanged();
});
m_formLayout->addRow("Type:", typeCombo);
GroupBoxCollapser::installIntoGroupBox(this);
createFootprintWidgets();
}
......
......@@ -15,7 +15,7 @@
#ifndef BORNAGAIN_GUI_VIEW_INSTRUMENT_FOOTPRINTCORRECTIONEDITOR_H
#define BORNAGAIN_GUI_VIEW_INSTRUMENT_FOOTPRINTCORRECTIONEDITOR_H
#include <QWidget>
#include <QGroupBox>
class SpecularBeamItem;
class QFormLayout;
......@@ -23,7 +23,7 @@ class QFormLayout;
//! FootprintCorrection editor (i.e. background) for instrument editors.
//! Operates on InstrumentItem.
class FootprintCorrectionEditor : public QWidget {
class FootprintCorrectionEditor : public QGroupBox {
Q_OBJECT
public:
......
......@@ -28,13 +28,11 @@ GISASBeamEditor::GISASBeamEditor(QWidget* parent, BeamItem* item)
: QGroupBox("Beam parameters", parent)
{
ASSERT(item);
auto* grid = new QGridLayout(this);
grid->setColumnStretch(0, 1);
grid->setColumnStretch(1, 1);
grid->setColumnStretch(2, 1);
auto* vLayout = new QVBoxLayout(this);
vLayout->setContentsMargins(30, 8, 0, 0);
auto* form = new QFormLayout();
grid->addLayout(form, 0, 0);
form->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
vLayout->addLayout(form);
auto* intensityEditor = new QLineEdit(this);
intensityEditor->setToolTip("Beam intensity in neutrons (or gammas per second.");
auto* validator = new QDoubleValidator(intensityEditor);
......@@ -49,21 +47,21 @@ GISASBeamEditor::GISASBeamEditor(QWidget* parent, BeamItem* item)
4, true};
auto* wavelengthEditor = new DistributionEditor(
"Wavelength [nm]", wave_cfg, GUI::ID::Distributions::All, this, item->wavelengthItem());
grid->addWidget(wavelengthEditor, 1, 0);
vLayout->addWidget(wavelengthEditor);
// valid input range is [0,90]
MeanConfig incl_cfg{boost::numeric::interval<double>(0.0, 90.0), 3, false};
auto* inclinationEditor =
new DistributionEditor("Inclination angle [deg]", incl_cfg, GUI::ID::Distributions::All,
this, item->inclinationAngleItem());
grid->addWidget(inclinationEditor, 1, 1);
vLayout->addWidget(inclinationEditor);
// valid input range is [-90,90]
MeanConfig azim_cfg{boost::numeric::interval<double>(-90.0, 90.0), 3, false};
auto* azimuthalEditor =
new DistributionEditor("Azimuthal angle [deg]", azim_cfg, GUI::ID::Distributions::All, this,
item->azimuthalAngleItem());
grid->addWidget(azimuthalEditor, 1, 2);
vLayout->addWidget(azimuthalEditor);
intensityEditor->setText(QString::number(item->intensity()));
......
......@@ -13,13 +13,11 @@
// ************************************************************************************************
#include "GUI/View/Instrument/InclinationAnglesEditor.h"
#include "GUI/Model/BaseItem/GroupItem.h"
#include "GUI/Model/Device/PointwiseAxisItem.h"
#include "GUI/Model/Device/SpecularBeamInclinationItem.h"
#include "GUI/View/Instrument/DistributionEditor.h"
#include "GUI/View/Instrument/DistributionPlot.h"
#include "GUI/View/Instrument/SphericalAxisEditor.h"
#include "GUI/View/PropertyEditor/GroupInfoBox.h"
#include "GUI/View/Tool/GroupBoxCollapser.h"
#include <QComboBox>
#include <QFormLayout>
......@@ -30,30 +28,31 @@ InclinationAnglesEditor::InclinationAnglesEditor(QWidget* parent, SpecularBeamIn
{
setProperty("subgroup", true); // for stylesheet addressing
auto* hLayout = new QHBoxLayout(this);
hLayout->setSpacing(50);
auto* gform = new QFormLayout(this);
gform->setSpacing(6);
hLayout->addLayout(gform);
m_selector =
new DistributionSelector(std::nullopt, GUI::ID::Distributions::Symmetric, this, m_item);
gform->addRow(m_selector);
m_typeComboBox = new QComboBox(this);
m_typeComboBox->addItem("Uniform axis");
m_typeComboBox->addItem("Non-uniform axis");
gform->addRow("Axis type:", m_typeComboBox);
connect(m_typeComboBox, qOverload<int>(&QComboBox::currentIndexChanged), this,
auto* typeComboBox = new QComboBox(this);
typeComboBox->addItem("Uniform axis");
typeComboBox->addItem("Non-uniform axis");
gform->addRow("Axis type:", typeComboBox);
connect(typeComboBox, qOverload<int>(&QComboBox::currentIndexChanged), this,
&InclinationAnglesEditor::onAxisTypeSelected);
m_form = new SphericalAxisForm(gform, this);
const int idx = m_item->pointwiseAlphaAxisSelected() ? 1 : 0;
ASSERT(idx != -1);
if (idx != m_typeComboBox->currentIndex())
m_typeComboBox->setCurrentIndex(idx);
if (idx != typeComboBox->currentIndex())
typeComboBox->setCurrentIndex(idx);
else
onAxisTypeSelected(idx); // trigger update manually
m_typeComboBox->setEnabled(m_item->pointwiseAlphaAxisDefined());
typeComboBox->setEnabled(m_item->pointwiseAlphaAxisDefined());
m_plot = new DistributionPlot(this);
m_plot->setFixedSize(280, 170);
......@@ -78,10 +77,6 @@ void InclinationAnglesEditor::updateIndicators()
m_form->updateData();
}
//--------------------------------------------------------------------------------------------------
// private slots
//--------------------------------------------------------------------------------------------------
void InclinationAnglesEditor::onAxisTypeSelected(int index)
{
if (m_item) {
......
......@@ -41,7 +41,6 @@ private slots:
private:
DistributionSelector* m_selector;
QComboBox* m_typeComboBox;
SphericalAxisForm* m_form;
SpecularBeamInclinationItem* m_item;
DistributionPlot* m_plot;
......
......@@ -30,13 +30,11 @@ OffSpecularBeamEditor::OffSpecularBeamEditor(QWidget* parent, OffSpecularInstrum
{
ASSERT(item);
auto* grid = new QGridLayout(this);
grid->setColumnStretch(0, 1);
grid->setColumnStretch(1, 1);
grid->setColumnStretch(2, 1);
auto* vLayout = new QVBoxLayout(this);
vLayout->setContentsMargins(30, 8, 0, 0);
auto* form = new QFormLayout();
grid->addLayout(form, 0, 0);
form->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
vLayout->addLayout(form);
auto* intensityEditor = new QLineEdit(this);
intensityEditor->setToolTip("Beam intensity in neutrons (or gammas per second.");
auto* validator = new QDoubleValidator(intensityEditor);
......@@ -52,18 +50,17 @@ OffSpecularBeamEditor::OffSpecularBeamEditor(QWidget* parent, OffSpecularInstrum
auto* wavelengthEditor =
new DistributionEditor("Wavelength [nm]", wave_cfg, GUI::ID::Distributions::All, this,
item->beamItem()->wavelengthItem());
grid->addWidget(wavelengthEditor, 1, 0);
vLayout->addWidget(wavelengthEditor);
auto* inclinationEditor =
new AxisPropertyEditor(this, "Inclination angle [deg]", &item->alphaAxis());
grid->addWidget(inclinationEditor, 1, 1);
auto* inclinationEditor = new AxisPropertyEditor(this, "Inclination angle", &item->alphaAxis());
vLayout->addWidget(inclinationEditor);
// valid input range is [-90,90]
MeanConfig azim_cfg{boost::numeric::interval<double>(-90.0, 90.0), 3, false};
auto* azimuthalEditor =
new DistributionEditor("Azimuthal angle [deg]", azim_cfg, GUI::ID::Distributions::All, this,
item->beamItem()->azimuthalAngleItem());
grid->addWidget(azimuthalEditor, 1, 2);
vLayout->addWidget(azimuthalEditor);
intensityEditor->setText(QString::number(item->beamItem()->intensity()));
......
......@@ -18,6 +18,7 @@
#include "GUI/View/Edit/DoubleSpinBox.h"
#include "GUI/View/Instrument/DetectorAlignmentEditor.h"
#include "GUI/View/Instrument/ResolutionFunctionEditor.h"
#include "GUI/View/Tool/GroupBoxCollapser.h"
#include <QFormLayout>
#include <QGridLayout>
#include <QGroupBox>
......@@ -37,6 +38,7 @@ RectangularDetectorEditor::RectangularDetectorEditor(QWidget* parent,
// -- x-axis controls
auto* xAxisGroupBox = new QGroupBox("X axis", this);
xAxisGroupBox->setProperty("subgroup", true); // for stylesheet addressing
auto* xAxisFormLayout = new QFormLayout(xAxisGroupBox);
auto* xAxisNbinsSpinBox = new QSpinBox(xAxisGroupBox);
......@@ -58,9 +60,12 @@ RectangularDetectorEditor::RectangularDetectorEditor(QWidget* parent,
emit dataChanged();
});
grid->addWidget(xAxisGroupBox, 1, 0);
GroupBoxCollapser::installIntoGroupBox(xAxisGroupBox);
// -- y-axis controls
auto* yAxisGroupBox = new QGroupBox("Y axis", this);
yAxisGroupBox->setProperty("subgroup", true); // for stylesheet addressing
auto* yAxisFormLayout = new QFormLayout(yAxisGroupBox);
auto* yAxisNbinsSpinBox = new QSpinBox(yAxisGroupBox);
......@@ -82,6 +87,7 @@ RectangularDetectorEditor::RectangularDetectorEditor(QWidget* parent,
emit dataChanged();
});
grid->addWidget(yAxisGroupBox, 1, 1);
GroupBoxCollapser::installIntoGroupBox(yAxisGroupBox);
// -- resolution function
auto* resolutionFunctionEditor =
......
......@@ -16,20 +16,20 @@
#include "GUI/Model/Device/DetectorItems.h"
#include "GUI/Model/Device/ResolutionFunctionItems.h"
#include "GUI/View/Edit/DoubleSpinBox.h"
#include "GUI/View/Tool/GroupBoxCollapser.h"
#include "GUI/View/Tool/WidgetUtils.h"
#include <QFormLayout>
#include <QGroupBox>
ResolutionFunctionEditor::ResolutionFunctionEditor(Unit unit, QWidget* parent, DetectorItem* item)
: QWidget(parent)
: QGroupBox("Resolution function", parent)
, m_unit(unit)
, m_item(item)
{
ASSERT(item);
auto* layout = new QHBoxLayout(this);
auto* gbox = new QGroupBox("Resolution function", this);
m_formLayout = new QFormLayout(gbox);
layout->addWidget(gbox);
setProperty("subgroup", true); // for stylesheet addressing
m_formLayout = new QFormLayout(this);
m_formLayout->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
auto* typeCombo =
GUI::Util::createSelectionCombo(this, item->resolutionFunctionSelection(), [=](int) {
......@@ -38,6 +38,8 @@ ResolutionFunctionEditor::ResolutionFunctionEditor(Unit unit, QWidget* parent, D
});
m_formLayout->addRow("Type:", typeCombo);
GroupBoxCollapser::installIntoGroupBox(this);
createResolutionWidgets();
}
......
......@@ -15,7 +15,7 @@
#ifndef BORNAGAIN_GUI_VIEW_INSTRUMENT_RESOLUTIONFUNCTIONEDITOR_H
#define BORNAGAIN_GUI_VIEW_INSTRUMENT_RESOLUTIONFUNCTIONEDITOR_H
#include <QWidget>
#include <QGroupBox>
class DetectorItem;
class QFormLayout;
......@@ -23,7 +23,7 @@ class QFormLayout;
//! Widget for selecting the resolution function of a detector (combo box) and input of the
//! corresponding values
class ResolutionFunctionEditor : public QWidget {
class ResolutionFunctionEditor : public QGroupBox {
Q_OBJECT
public:
enum Unit { Degree, Millimeter };
......
......@@ -32,13 +32,11 @@ SpecularBeamEditor::SpecularBeamEditor(QWidget* parent, SpecularBeamItem* item,
{
ASSERT(item);
auto* grid = new QGridLayout(this);
grid->setColumnStretch(0, 1);
grid->setColumnStretch(1, 1);
grid->setColumnStretch(2, 1);
auto* vLayout = new QVBoxLayout(this);
vLayout->setContentsMargins(30, 8, 0, 0);
auto* form = new QFormLayout();
grid->addLayout(form, 0, 0);
form->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
vLayout->addLayout(form);
auto* intensityLineEdit = new QLineEdit(this);
intensityLineEdit->setToolTip("Beam intensity in neutrons (or gammas per second.");
auto* validator = new QDoubleValidator(intensityLineEdit);
......@@ -54,13 +52,13 @@ SpecularBeamEditor::SpecularBeamEditor(QWidget* parent, SpecularBeamItem* item,
auto* wavelengthEditor =
new DistributionEditor("Wavelength [nm]", wave_cfg, GUI::ID::Distributions::Symmetric, this,
item->wavelengthItem());
grid->addWidget(wavelengthEditor, 1, 0);
vLayout->addWidget(wavelengthEditor);
auto* inclinationEditor = new InclinationAnglesEditor(this, item->inclinationAngleItem());
grid->addWidget(inclinationEditor, 1, 1);
vLayout->addWidget(inclinationEditor);
auto* footprintEditor = new FootprintCorrectionEditor(this, item);
grid->addWidget(footprintEditor, 1, 2);
vLayout->addWidget(footprintEditor);
intensityLineEdit->setText(QString::number(item->intensity()));
......
......@@ -144,6 +144,11 @@ InterferenceForm QWidget#ContentArea
background-color: rgba(0, 0, 0, 5%)
}
QGroupBox[subgroup="true"] QToolButton#GroupBoxToggler
{
font: bold 12px;
margin-left: 0px;
margin-bottom: 0px;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment