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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
// ************************************************************************************************
//
// BornAgain: simulate and fit reflection and scattering
//
//! @file GUI/Model/Tune/FitParameterItem.h
//! @brief Defines classes FitTypeItem FitDoubleItem FitEditableDoubleItem FitParameterItem.
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2018
//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
// ************************************************************************************************
#ifndef BORNAGAIN_GUI_MODEL_TUNE_FITPARAMETERITEM_H
#define BORNAGAIN_GUI_MODEL_TUNE_FITPARAMETERITEM_H
#include "Base/Type/OwningVector.h"
#include "Fit/Param/AttLimits.h"
#include "GUI/Model/Descriptor/ComboProperty.h"
class FitParameterLinkItem;
//! Holds ComboProperty values, accessible from FitparameterModel.
class FitTypeItem : public QObject {
Q_OBJECT
public:
explicit FitTypeItem(const ComboProperty& type, QObject* parent = nullptr);
const ComboProperty& type() const { return m_type; }
void setType(const ComboProperty& c) { m_type = c; }
void writeTo(QXmlStreamWriter* w) const;
void readFrom(QXmlStreamReader* r);
private:
ComboProperty m_type;
};
//! Holds a floating-point variable, accessible from FitparameterModel.
class FitDoubleItem : public QObject {
Q_OBJECT
public:
explicit FitDoubleItem(double value, QObject* parent = nullptr);
double value() const { return m_value; }
void setDVal(double value) { m_value = value; }
const RealLimits& limits() const { return m_limits; }
void setLimits(const RealLimits& l) { m_limits = l; }
int decimals() const { return m_decimals; }
void setDecimals(int v) { m_decimals = v; }
virtual void writeTo(QXmlStreamWriter* w) const;
virtual void readFrom(QXmlStreamReader* r);
private:
double m_value;
int m_decimals; // no need to save/load
RealLimits m_limits; // no need to save/load
};
//! Holds floating-point variables which can be enabled or disabled, accessible from
//! FitparameterModel
class FitEditableDoubleItem : public FitDoubleItem {
public:
explicit FitEditableDoubleItem(double value, bool isEnabled, QObject* parent = nullptr);
bool isEnabled() const { return m_is_enabled; }
void setEnabled(bool b) { m_is_enabled = b; }
void writeTo(QXmlStreamWriter* w) const override;
void readFrom(QXmlStreamReader* r) override;
private:
bool m_is_enabled;
};
//! Represents a fit parameter in GUI. Contains links to corresponding ParameterItems in a tuning
//! tree.
class FitParameterItem : public QObject {
Q_OBJECT
public:
explicit FitParameterItem(QObject* parent = nullptr);
void initMinMaxValues(const RealLimits& limits);
AttLimits attLimits() const;
bool isValid() const;
QString displayName() const { return m_display_name; }
void setDisplayName(QString displayName);
double startValue() const;
void setStartValue(double start_value);
QObject* startValueItem() const;
double minimum() const;
void setMinimum(double minimum);
QObject* minimumItem() const;
double maximum() const;
void setMaximum(double maximum);
QObject* maximumItem() const;
FitParameterLinkItem* addLinkItem(const QString& title, const QString& link);
void removeLink(const QString& link);
QVector<FitParameterLinkItem*> linkItems() const;
QStringList links() const;
void setTypeCombo(const ComboProperty& type);
QString currentType() const;
QObject* typeItem() const;
void writeTo(QXmlStreamWriter* w) const;
void readFrom(QXmlStreamReader* r);
private:
void onTypeChange();
void setLimitEnabled(FitEditableDoubleItem* propertyItem, bool enabled);
bool isLimited() const;
bool isFree() const;
bool isLowerLimited() const;
bool isUpperLimited() const;
bool isFixed() const;
QString m_display_name;
std::unique_ptr<FitTypeItem> m_type_item;
std::unique_ptr<FitDoubleItem> m_start_value_item;
std::unique_ptr<FitEditableDoubleItem> m_min_item;
std::unique_ptr<FitEditableDoubleItem> m_max_item;
OwningVector<FitParameterLinkItem> m_links;
};
#endif // BORNAGAIN_GUI_MODEL_TUNE_FITPARAMETERITEM_H
|