File: AxisForm.cpp

package info (click to toggle)
bornagain 23.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 103,936 kB
  • sloc: cpp: 423,131; python: 40,997; javascript: 11,167; awk: 630; sh: 318; ruby: 173; xml: 130; makefile: 51; ansic: 24
file content (53 lines) | stat: -rw-r--r-- 2,222 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//  ************************************************************************************************
//
//  BornAgain: simulate and fit reflection and scattering
//
//! @file      GUI/View/Device/AxisForm.cpp
//! @brief     Implement class AxisForm
//!
//! @homepage  http://www.bornagainproject.org
//! @license   GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2022
//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
//  ************************************************************************************************

#include "GUI/View/Device/AxisForm.h"
#include "GUI/Model/Descriptor/AxisProperty.h"
#include "GUI/Model/Project/ProjectDocument.h"
#include "GUI/View/Numeric/DSpinBox.h"
#include "GUI/View/Numeric/NumWidgetUtil.h"
#include <QFormLayout>
#include <QSpinBox>

AxisForm::AxisForm(QWidget* parent, const QString& group_title, AxisProperty* axis_property,
                   QString nbins_tooltip)
    : StaticGroupBox(group_title, parent)
{
    auto* layout = new QFormLayout;
    body()->setLayout(layout);
    setFixedWidth(300);

    layout->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);

    QSpinBox* nbins_spin_box =
        GUI::Util::createIntSpinBox([axis_property] { return axis_property->nbins(); },
                                    [axis_property](int v) {
                                        axis_property->setNbins(v);
                                        gDoc->setModified();
                                    },
                                    RealLimits::nonnegative(), nbins_tooltip);
    layout->addRow("# bins:", nbins_spin_box);

    DSpinBox* min_spin_box = GUI::Util::addDoubleSpinBoxRow(layout, axis_property->min());
    DSpinBox* max_spin_box = GUI::Util::addDoubleSpinBoxRow(layout, axis_property->max());

    connect(min_spin_box, &DSpinBox::valueChanged, [axis_property](double v) {
        if (axis_property->max().dVal() < v)
            axis_property->max().setAndNotify(v);
    });
    connect(max_spin_box, &DSpinBox::valueChanged, [axis_property](double v) {
        if (axis_property->min().dVal() > v)
            axis_property->min().setAndNotify(v);
    });
}