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

show DistributionPlot in-line instead of in separate dialog; simplify UI

parent ead62e64
No related branches found
No related tags found
1 merge request!708Refactor and simplify UI
...@@ -19,8 +19,10 @@ ...@@ -19,8 +19,10 @@
#include "GUI/Support/XML/Backup.h" #include "GUI/Support/XML/Backup.h"
#include "GUI/Support/XML/Streamer.h" #include "GUI/Support/XML/Streamer.h"
#include "GUI/View/Instrument/DistributionForms.h" #include "GUI/View/Instrument/DistributionForms.h"
#include "GUI/View/Instrument/DistributionPlot.h"
#include "GUI/View/Instrument/EditDistributionDialog.h" #include "GUI/View/Instrument/EditDistributionDialog.h"
#include "GUI/View/PropertyEditor/GroupInfoBox.h" #include "GUI/View/PropertyEditor/GroupInfoBox.h"
#include "GUI/View/Tool/GroupBoxCollapser.h"
#include "GUI/View/Tool/WidgetUtils.h" #include "GUI/View/Tool/WidgetUtils.h"
#include <QComboBox> #include <QComboBox>
#include <QFormLayout> #include <QFormLayout>
...@@ -112,20 +114,29 @@ DistributionEditor::DistributionEditor(const QString& title, ...@@ -112,20 +114,29 @@ DistributionEditor::DistributionEditor(const QString& title,
const std::optional<MeanConfig>& mean_config, const std::optional<MeanConfig>& mean_config,
GUI::ID::Distributions distributions, QWidget* parent, GUI::ID::Distributions distributions, QWidget* parent,
BeamDistributionItem* item) BeamDistributionItem* item)
: QWidget(parent) : QGroupBox(title, parent)
, m_title(title) , m_title(title)
{ {
auto* layout = new QVBoxLayout(this); setProperty("subgroup", true); // for stylesheet addressing
auto* hLayout = new QHBoxLayout(this);
m_selector = new DistributionSelector(mean_config, distributions, this, item);
hLayout->addWidget(m_selector);
hLayout->setSpacing(50);
m_plot = new DistributionPlot(this);
m_plot->setFixedSize(280, 170);
m_plot->setShowMouseCoords(false);
hLayout->addWidget(m_plot);
hLayout->addStretch(1);
auto* gbox = new GroupInfoBox(title, this); GroupBoxCollapser::installIntoGroupBox(this);
auto* glayout = new QVBoxLayout(gbox);
m_selector = new DistributionSelector(mean_config, distributions, gbox, item);
glayout->addWidget(m_selector);
layout->addWidget(gbox);
connect(m_selector, &DistributionSelector::distributionChanged, this, connect(m_selector, &DistributionSelector::distributionChanged, this,
&DistributionEditor::distributionChanged); &DistributionEditor::distributionChanged);
connect(gbox, &GroupInfoBox::clicked, this, &DistributionEditor::showDialog); connect(m_selector, &DistributionSelector::distributionChanged, this,
&DistributionEditor::updatePlot);
updatePlot();
} }
void DistributionEditor::updateData() void DistributionEditor::updateData()
...@@ -138,6 +149,14 @@ void DistributionEditor::showDialog() ...@@ -138,6 +149,14 @@ void DistributionEditor::showDialog()
showEditDistributionDialog(m_selector, m_title); showEditDistributionDialog(m_selector, m_title);
} }
void DistributionEditor::updatePlot()
{
auto* d = m_selector->item()->distribution();
m_plot->setVisible(!dynamic_cast<const DistributionNoneItem*>(d));
m_plot->setItem(d);
m_plot->plotItem();
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
// free functions // free functions
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
......
...@@ -16,13 +16,14 @@ ...@@ -16,13 +16,14 @@
#define BORNAGAIN_GUI_VIEW_INSTRUMENT_DISTRIBUTIONEDITOR_H #define BORNAGAIN_GUI_VIEW_INSTRUMENT_DISTRIBUTIONEDITOR_H
#include "GUI/View/Tool/ID.h" #include "GUI/View/Tool/ID.h"
#include <QWidget> #include <QGroupBox>
class QComboBox; class QComboBox;
class QStackedLayout; class QStackedLayout;
class DistributionForm; class DistributionForm;
class BeamDistributionItem; class BeamDistributionItem;
class QFormLayout; class QFormLayout;
class DistributionPlot;
#include <boost/numeric/interval.hpp> #include <boost/numeric/interval.hpp>
...@@ -76,7 +77,7 @@ private: ...@@ -76,7 +77,7 @@ private:
/// DistributionSelector as above but contained in a GroupBox with a title and a button /// DistributionSelector as above but contained in a GroupBox with a title and a button
/// to open the distribution dialog /// to open the distribution dialog
class DistributionEditor : public QWidget { class DistributionEditor : public QGroupBox {
Q_OBJECT Q_OBJECT
public: public:
...@@ -92,10 +93,12 @@ signals: ...@@ -92,10 +93,12 @@ signals:
private slots: private slots:
void showDialog(); void showDialog();
void updatePlot();
private: private:
QString m_title; QString m_title;
DistributionSelector* m_selector; DistributionSelector* m_selector;
DistributionPlot* m_plot;
}; };
/// utility function to show the EditDistributionDialog for a selector /// utility function to show the EditDistributionDialog for a selector
......
...@@ -297,6 +297,11 @@ void DistributionPlot::setXAxisName(const QString& xAxisName) ...@@ -297,6 +297,11 @@ void DistributionPlot::setXAxisName(const QString& xAxisName)
m_plot->xAxis->setLabel(xAxisName); m_plot->xAxis->setLabel(xAxisName);
} }
void DistributionPlot::setShowMouseCoords(bool b)
{
m_label->setVisible(b);
}
namespace { namespace {
//! Returns (xmin, xmax) of x-axis to display single value. //! Returns (xmin, xmax) of x-axis to display single value.
......
...@@ -36,6 +36,7 @@ public: ...@@ -36,6 +36,7 @@ public:
void setItem(DistributionItem* item); void setItem(DistributionItem* item);
void plotItem(); void plotItem();
void setXAxisName(const QString& xAxisName); void setXAxisName(const QString& xAxisName);
void setShowMouseCoords(bool b);
public slots: public slots:
void onMouseMove(QMouseEvent* event); void onMouseMove(QMouseEvent* event);
......
...@@ -17,39 +17,35 @@ ...@@ -17,39 +17,35 @@
#include "GUI/Model/Device/PointwiseAxisItem.h" #include "GUI/Model/Device/PointwiseAxisItem.h"
#include "GUI/Model/Device/SpecularBeamInclinationItem.h" #include "GUI/Model/Device/SpecularBeamInclinationItem.h"
#include "GUI/View/Instrument/DistributionEditor.h" #include "GUI/View/Instrument/DistributionEditor.h"
#include "GUI/View/Instrument/DistributionPlot.h"
#include "GUI/View/Instrument/SphericalAxisEditor.h" #include "GUI/View/Instrument/SphericalAxisEditor.h"
#include "GUI/View/PropertyEditor/GroupInfoBox.h" #include "GUI/View/PropertyEditor/GroupInfoBox.h"
#include "GUI/View/Tool/GroupBoxCollapser.h"
#include <QComboBox> #include <QComboBox>
#include <QFormLayout> #include <QFormLayout>
namespace {
static constexpr auto title = "Inclination angles [deg]";
}
InclinationAnglesEditor::InclinationAnglesEditor(QWidget* parent, SpecularBeamInclinationItem* item) InclinationAnglesEditor::InclinationAnglesEditor(QWidget* parent, SpecularBeamInclinationItem* item)
: QWidget(parent) : QGroupBox("Inclination angles [deg]", parent)
, m_item(item) , m_item(item)
{ {
auto* layout = new QVBoxLayout(this); setProperty("subgroup", true); // for stylesheet addressing
auto* hLayout = new QHBoxLayout(this);
auto* gbox = new GroupInfoBox(title, this); auto* gform = new QFormLayout(this);
auto* gform = new QFormLayout(gbox); hLayout->addLayout(gform);
connect(gbox, &GroupInfoBox::clicked, this, &InclinationAnglesEditor::showDialog);
layout->addWidget(gbox);
m_distributionEditor = m_selector =
new DistributionSelector(std::nullopt, GUI::ID::Distributions::Symmetric, gbox, m_item); new DistributionSelector(std::nullopt, GUI::ID::Distributions::Symmetric, this, m_item);
gform->addRow(m_distributionEditor); gform->addRow(m_selector);
m_typeComboBox = new QComboBox(gbox); m_typeComboBox = new QComboBox(this);
m_typeComboBox->addItem("Uniform axis"); m_typeComboBox->addItem("Uniform axis");
m_typeComboBox->addItem("Non-uniform axis"); m_typeComboBox->addItem("Non-uniform axis");
gform->addRow("Axis type:", m_typeComboBox); gform->addRow("Axis type:", m_typeComboBox);
connect(m_typeComboBox, qOverload<int>(&QComboBox::currentIndexChanged), this, connect(m_typeComboBox, qOverload<int>(&QComboBox::currentIndexChanged), this,
&InclinationAnglesEditor::onAxisTypeSelected); &InclinationAnglesEditor::onAxisTypeSelected);
m_form = new SphericalAxisForm(gform, gbox); m_form = new SphericalAxisForm(gform, this);
const int idx = m_item->pointwiseAlphaAxisSelected() ? 1 : 0; const int idx = m_item->pointwiseAlphaAxisSelected() ? 1 : 0;
ASSERT(idx != -1); ASSERT(idx != -1);
...@@ -59,9 +55,22 @@ InclinationAnglesEditor::InclinationAnglesEditor(QWidget* parent, SpecularBeamIn ...@@ -59,9 +55,22 @@ InclinationAnglesEditor::InclinationAnglesEditor(QWidget* parent, SpecularBeamIn
onAxisTypeSelected(idx); // trigger update manually onAxisTypeSelected(idx); // trigger update manually
m_typeComboBox->setEnabled(m_item->pointwiseAlphaAxisDefined()); m_typeComboBox->setEnabled(m_item->pointwiseAlphaAxisDefined());
connect(m_distributionEditor, &DistributionSelector::distributionChanged, this, m_plot = new DistributionPlot(this);
m_plot->setFixedSize(280, 170);
m_plot->setShowMouseCoords(false);
hLayout->addWidget(m_plot);
hLayout->setAlignment(m_plot, Qt::AlignTop);
hLayout->addStretch(1);
GroupBoxCollapser::installIntoGroupBox(this);
connect(m_selector, &DistributionSelector::distributionChanged, this,
&InclinationAnglesEditor::dataChanged); &InclinationAnglesEditor::dataChanged);
connect(m_selector, &DistributionSelector::distributionChanged, this,
&InclinationAnglesEditor::updatePlot);
connect(m_form, &SphericalAxisForm::dataChanged, this, &InclinationAnglesEditor::dataChanged); connect(m_form, &SphericalAxisForm::dataChanged, this, &InclinationAnglesEditor::dataChanged);
updatePlot();
} }
void InclinationAnglesEditor::updateIndicators() void InclinationAnglesEditor::updateIndicators()
...@@ -89,7 +98,10 @@ void InclinationAnglesEditor::onAxisTypeSelected(int index) ...@@ -89,7 +98,10 @@ void InclinationAnglesEditor::onAxisTypeSelected(int index)
} }
} }
void InclinationAnglesEditor::showDialog() void InclinationAnglesEditor::updatePlot()
{ {
showEditDistributionDialog(m_distributionEditor, title); auto* d = m_selector->item()->distribution();
m_plot->setVisible(!dynamic_cast<const DistributionNoneItem*>(d));
m_plot->setItem(d);
m_plot->plotItem();
} }
...@@ -15,16 +15,17 @@ ...@@ -15,16 +15,17 @@
#ifndef BORNAGAIN_GUI_VIEW_INSTRUMENT_INCLINATIONANGLESEDITOR_H #ifndef BORNAGAIN_GUI_VIEW_INSTRUMENT_INCLINATIONANGLESEDITOR_H
#define BORNAGAIN_GUI_VIEW_INSTRUMENT_INCLINATIONANGLESEDITOR_H #define BORNAGAIN_GUI_VIEW_INSTRUMENT_INCLINATIONANGLESEDITOR_H
#include <QWidget> #include <QGroupBox>
class DistributionSelector; class DistributionSelector;
class QComboBox; class QComboBox;
class SpecularBeamInclinationItem; class SpecularBeamInclinationItem;
class SphericalAxisForm; class SphericalAxisForm;
class DistributionPlot;
//! Editor for the case where there is no single inclination angle //! Editor for the case where there is no single inclination angle
class InclinationAnglesEditor : public QWidget { class InclinationAnglesEditor : public QGroupBox {
Q_OBJECT Q_OBJECT
public: public:
InclinationAnglesEditor(QWidget* parent, SpecularBeamInclinationItem* item); InclinationAnglesEditor(QWidget* parent, SpecularBeamInclinationItem* item);
...@@ -36,13 +37,14 @@ signals: ...@@ -36,13 +37,14 @@ signals:
private slots: private slots:
void onAxisTypeSelected(int index); void onAxisTypeSelected(int index);
void showDialog(); void updatePlot();
private: private:
DistributionSelector* m_distributionEditor; DistributionSelector* m_selector;
QComboBox* m_typeComboBox; QComboBox* m_typeComboBox;
SphericalAxisForm* m_form; SphericalAxisForm* m_form;
SpecularBeamInclinationItem* m_item; SpecularBeamInclinationItem* m_item;
DistributionPlot* m_plot;
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment