File indexing completed on 2024-06-16 04:17:28

0001 /*
0002  *  SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef KISCURVEOPTIONMODEL_H
0008 #define KISCURVEOPTIONMODEL_H
0009 
0010 #include "kritapaintop_export.h"
0011 #include "KisCurveOptionData.h"
0012 #include "KisCurveRangeModelInterface.h"
0013 
0014 #include <lager/state.hpp>
0015 #include <lager/constant.hpp>
0016 #include <lager/extra/qt.hpp>
0017 
0018 using RangeState = std::tuple<qreal, qreal>;
0019 using StrengthState = std::tuple<qreal, qreal, qreal>;
0020 using LabelsState = std::tuple<QString, int>;
0021 
0022 
0023 class PAINTOP_EXPORT KisCurveOptionModel : public QObject
0024 {
0025     Q_OBJECT
0026 public:
0027     KisCurveOptionModel(lager::cursor<KisCurveOptionDataCommon> optionData,
0028                         lager::reader<bool> externallyEnabled,
0029                         std::optional<lager::reader<RangeState>> strengthRangeOverride,
0030                         qreal strengthDisplayMultiplier,
0031                         KisCurveRangeModelFactory rangeModelFactory);
0032     ~KisCurveOptionModel();
0033 
0034     // the state must be declared **before** any cursors or readers
0035     lager::cursor<KisCurveOptionDataCommon> optionData;
0036     lager::reader<RangeState> strengthRangeNorm;
0037     lager::state<QString, lager::automatic_tag> activeSensorIdData;
0038     LAGER_QT_READER(bool, isCheckable);
0039     LAGER_QT_CURSOR(bool, isChecked);
0040     LAGER_QT_READER(bool, effectiveIsChecked);
0041     LAGER_QT_READER(qreal, effectiveStrengthValueNorm);
0042     LAGER_QT_CURSOR(qreal, strengthValueDenorm);
0043     LAGER_QT_READER(StrengthState, effectiveStrengthStateDenorm);
0044     LAGER_QT_CURSOR(bool, useCurve);
0045     LAGER_QT_CURSOR(bool, useSameCurve);
0046     LAGER_QT_CURSOR(int, curveMode);
0047     LAGER_QT_CURSOR(QString, activeSensorId);
0048     LAGER_QT_READER(int, activeSensorLength);
0049     LAGER_QT_READER(LabelsState, labelsState);
0050     LAGER_QT_CURSOR(QString, activeCurve);
0051     std::unique_ptr<KisCurveRangeModelInterface> rangeModel;
0052     LAGER_QT_CURSOR(QString, displayedCurve);
0053     LAGER_QT_READER(QString, curveXMinLabel);
0054     LAGER_QT_READER(QString, curveXMaxLabel);
0055     LAGER_QT_READER(QString, curveYMinLabel);
0056     LAGER_QT_READER(QString, curveYMaxLabel);
0057 
0058     KisCurveOptionDataCommon bakedOptionData() const;
0059 };
0060 
0061 #endif // KISCURVEOPTIONMODEL_H