File indexing completed on 2024-06-23 04:27:49
0001 /* 0002 * SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 #ifndef KisCurveOptionWidget_H 0007 #define KisCurveOptionWidget_H 0008 0009 #include <kis_paintop_option.h> 0010 0011 class Ui_WdgCurveOption2; 0012 class KisCurveOption; 0013 class QComboBox; 0014 0015 #include <KisCurveOptionData.h> 0016 #include <KisCurveRangeModelInterface.h> 0017 #include <KisCurveOptionInputControlsStrategyInterface.h> 0018 #include <KisCurveOptionRangeControlsStrategyInterface.h> 0019 #include <lager/cursor.hpp> 0020 #include <lager/constant.hpp> 0021 0022 0023 class PAINTOP_EXPORT KisCurveOptionWidget : public KisPaintOpOption 0024 { 0025 Q_OBJECT 0026 public: 0027 enum Flag { 0028 None = 0x0, 0029 SupportsCommonCurve = 0x1, 0030 SupportsCurveMode = 0x2, 0031 UseFloatingPointStrength = 0x4, 0032 }; 0033 0034 Q_DECLARE_FLAGS(Flags, Flag) 0035 0036 public: 0037 using data_type = KisCurveOptionDataCommon; 0038 0039 KisCurveOptionWidget(lager::cursor<KisCurveOptionDataCommon> optionData, 0040 KisPaintOpOption::PaintopCategory category, 0041 lager::reader<bool> enabledLink = lager::make_constant(true), 0042 std::optional<lager::reader<std::tuple<qreal, qreal>>> strengthRangeReader = std::nullopt); 0043 0044 KisCurveOptionWidget(lager::cursor<KisCurveOptionDataCommon> optionData, 0045 KisPaintOpOption::PaintopCategory category, 0046 const QString &curveMinLabel, const QString &curveMaxLabel, 0047 lager::reader<bool> enabledLink = lager::make_constant(true), 0048 std::optional<lager::reader<std::tuple<qreal, qreal>>> strengthRangeReader = std::nullopt); 0049 0050 KisCurveOptionWidget(lager::cursor<KisCurveOptionDataCommon> optionData, 0051 KisPaintOpOption::PaintopCategory category, 0052 const QString &curveMinLabel, const QString &curveMaxLabel, 0053 int curveMinValue, int curveMaxValue, const QString &curveValueSuffix, 0054 lager::reader<bool> enabledLink = lager::make_constant(true), 0055 std::optional<lager::reader<std::tuple<qreal, qreal>>> strengthRangeReader = std::nullopt); 0056 0057 KisCurveOptionWidget(lager::cursor<KisCurveOptionDataCommon> optionData, 0058 PaintopCategory category, 0059 const QString &curveMinLabel, const QString &curveMaxLabel, 0060 int curveMinValue, int curveMaxValue, const QString &curveValueSuffix, 0061 const QString &strengthPrefix, const QString &strengthSuffix, 0062 qreal strengthDisplayMultiplier, 0063 lager::reader<bool> enabledLink = lager::make_constant(true), 0064 std::optional<lager::reader<std::tuple<qreal, qreal>>> strengthRangeReader = std::nullopt); 0065 0066 protected: 0067 KisCurveOptionWidget(lager::cursor<KisCurveOptionDataCommon> optionData, 0068 KisPaintOpOption::PaintopCategory category, 0069 const QString &strengthPrefix, const QString &strengthSuffix, 0070 qreal strengthDisplayMultiplier, 0071 lager::reader<bool> enabledLink, 0072 std::optional<lager::reader<std::tuple<qreal, qreal>>> strengthRangeReader, 0073 KisCurveRangeModelFactory curveRangeModelFactory, 0074 KisCurveOptionInputControlsStrategyFactory inputControlsFactory, 0075 KisCurveOptionRangeControlsStrategyFactory rangeControlsFactory, 0076 Flags flags); 0077 public: 0078 0079 ~KisCurveOptionWidget() override; 0080 0081 void writeOptionSetting(KisPropertiesConfigurationSP setting) const override; 0082 void readOptionSetting(const KisPropertiesConfigurationSP setting) override; 0083 0084 bool isCheckable() const override; 0085 void show(); 0086 0087 protected: 0088 lager::cursor<qreal> strengthValueDenorm(); 0089 0090 void setCurveWidgetsEnabled(bool value); 0091 QWidget* curveWidget(); 0092 0093 protected Q_SLOTS: 0094 void updateThemedIcons(); 0095 0096 0097 // curve shape preset buttons 0098 void changeCurveLinear(); 0099 void changeCurveReverseLinear(); 0100 void changeCurveSShape(); 0101 void changeCurveReverseSShape(); 0102 void changeCurveJShape(); 0103 void changeCurveLShape(); 0104 void changeCurveUShape(); 0105 void changeCurveArchShape(); 0106 0107 0108 protected: 0109 QWidget* m_widget {nullptr}; 0110 Ui_WdgCurveOption2* m_curveOptionWidget {nullptr}; 0111 QScopedPointer<KisCurveOptionInputControlsStrategyInterface> m_curveInputControlsStrategy; 0112 QScopedPointer<KisCurveOptionRangeControlsStrategyInterface> m_curveRangeControlsStrategy; 0113 QComboBox* m_curveMode {nullptr}; 0114 struct Private; 0115 const QScopedPointer<Private> m_d; 0116 }; 0117 0118 Q_DECLARE_OPERATORS_FOR_FLAGS(KisCurveOptionWidget::Flags) 0119 0120 #endif // KisCurveOptionWidget_H