File indexing completed on 2025-02-23 04:12:36

0001 /*
0002  *  SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "KisDynamicSensorFactoryTime.h"
0007 
0008 #include "ui_SensorTimeConfiguration.h"
0009 
0010 #include <KisWidgetConnectionUtils.h>
0011 #include <KisSensorWithLengthModel.h>
0012 #include <KisKritaSensorPack.h>
0013 
0014 namespace {
0015     auto safeDereferenceTimeSensor = 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().sensorTime;
0020         } else {
0021             qWarning() << "safeDereferenceTimeSensor(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().sensorTime = sensor;
0029         } else {
0030             qWarning() << "safeDereferenceTimeSensor(set): failed to get a Krita sensor data";
0031         }
0032         return data;
0033     });
0034 }
0035 
0036 KisDynamicSensorFactoryTime::KisDynamicSensorFactoryTime()
0037     : KisSimpleDynamicSensorFactory(TimeId.id(), 0, 3000, i18n("0"), "", i18n(" ms"))
0038 {
0039 
0040 }
0041 
0042 QWidget *KisDynamicSensorFactoryTime::createConfigWidget(lager::cursor<KisCurveOptionDataCommon> data, QWidget *parent)
0043 {
0044     QWidget* wdg = new QWidget(parent);
0045     Ui_SensorTimeConfiguration stc;
0046     stc.setupUi(wdg);
0047 
0048     KisSensorWithLengthModel *model =
0049         new KisSensorWithLengthModel(data.zoom(safeDereferenceTimeSensor), wdg);
0050 
0051     using namespace KisWidgetConnectionUtils;
0052 
0053     connectControl(stc.checkBoxRepeat, model, "isPeriodic");
0054     connectControl(stc.spinBoxDuration, model, "length");
0055 
0056     stc.spinBoxDuration->setRange(1, 10000);
0057     stc.spinBoxDuration->setExponentRatio(2);
0058     stc.spinBoxDuration->setSuffix(i18n(" ms"));
0059 
0060     return wdg;
0061 }
0062 
0063 int KisDynamicSensorFactoryTime::maximumValue(int length)
0064 {
0065     return length >= 0 ? length : KisSimpleDynamicSensorFactory::maximumValue(length);
0066 }
0067 
0068 QString KisDynamicSensorFactoryTime::maximumLabel(int length)
0069 {
0070     return i18n("%1 ms", length);
0071 }