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

0001 /*
0002  *  SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "KisDynamicSensorFactoryFade.h"
0007 
0008 #include "ui_SensorFadeConfiguration.h"
0009 
0010 #include <KisWidgetConnectionUtils.h>
0011 #include <KisSensorWithLengthModel.h>
0012 #include <KisKritaSensorPack.h>
0013 
0014 namespace {
0015     auto safeDereferenceFadeSensor = lager::lenses::getset(
0016     [](const KisCurveOptionDataCommon &data) -> KisSensorWithLengthData {
0017         const KisKritaSensorPack *pack = dynamic_cast<const KisKritaSensorPack*>(data.sensorData.constData());
0018         if (pack) {
0019             return pack->constSensorsStruct().sensorFade;
0020         } else {
0021             qWarning() << "safeDereferenceFadeSensor(get): failed to get a Krita sensor data";
0022             return KisSensorWithLengthData(FadeId);
0023         }
0024     },
0025     [](KisCurveOptionDataCommon data, KisSensorWithLengthData sensor) -> KisCurveOptionDataCommon {
0026         KisKritaSensorPack *pack = dynamic_cast<KisKritaSensorPack*>(data.sensorData.data());
0027         if (pack) {
0028             pack->sensorsStruct().sensorFade = sensor;
0029         } else {
0030             qWarning() << "safeDereferenceFadeSensor(set): failed to get a Krita sensor data";
0031         }
0032         return data;
0033     });
0034 }
0035 
0036 KisDynamicSensorFactoryFade::KisDynamicSensorFactoryFade()
0037     : KisSimpleDynamicSensorFactory(FadeId.id(), 0, 1000, i18n("0"), "", "")
0038 {
0039 
0040 }
0041 
0042 QWidget *KisDynamicSensorFactoryFade::createConfigWidget(lager::cursor<KisCurveOptionDataCommon> data, QWidget *parent)
0043 {
0044     QWidget* wdg = new QWidget(parent);
0045     Ui_SensorFadeConfiguration stc;
0046     stc.setupUi(wdg);
0047 
0048     KisSensorWithLengthModel *model =
0049         new KisSensorWithLengthModel(data.zoom(safeDereferenceFadeSensor), wdg);
0050 
0051     using namespace KisWidgetConnectionUtils;
0052 
0053     connectControl(stc.checkBoxRepeat, model, "isPeriodic");
0054     connectControl(stc.spinBoxLength, model, "length");
0055 
0056     stc.spinBoxLength->setExponentRatio(3.0);
0057 
0058     return wdg;
0059 }
0060 
0061 int KisDynamicSensorFactoryFade::maximumValue(int length)
0062 {
0063     return length >= 0 ? length : KisSimpleDynamicSensorFactory::maximumValue(length);
0064 }
0065 
0066 QString KisDynamicSensorFactoryFade::maximumLabel(int length)
0067 {
0068     return i18n("%1", length);
0069 }