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

0001 /*
0002  *  SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "KisScatterOptionWidget.h"
0007 
0008 #include <KisLager.h>
0009 
0010 #include <QWidget>
0011 #include <QLabel>
0012 #include <QCheckBox>
0013 #include <QHBoxLayout>
0014 #include <QVBoxLayout>
0015 
0016 #include <KisScatterOptionModel.h>
0017 #include <KisWidgetConnectionUtils.h>
0018 
0019 
0020 struct KisScatterOptionWidget::Private
0021 {
0022     Private(lager::cursor<KisScatterOptionData> optionData)
0023         : model(optionData.zoom(
0024                     kislager::lenses::to_base<KisScatterOptionMixIn>)
0025                 )
0026     {
0027     }
0028 
0029     KisScatterOptionModel model;
0030 };
0031 
0032 KisScatterOptionWidget::KisScatterOptionWidget(lager::cursor<KisScatterOptionData> optionData)
0033     : KisScatterOptionWidget(optionData, KisPaintOpOption::GENERAL)
0034 {
0035 }
0036 
0037 KisScatterOptionWidget::KisScatterOptionWidget(lager::cursor<KisScatterOptionData> optionData, PaintopCategory categoryOverride)
0038     : KisCurveOptionWidget(optionData.zoom(kislager::lenses::to_base<KisCurveOptionDataCommon>), categoryOverride)
0039     , m_d(new Private(optionData))
0040 {
0041     using namespace KisWidgetConnectionUtils;
0042 
0043     QWidget *page = new QWidget;
0044 
0045     QCheckBox *axisX = new QCheckBox(i18n("Axis X"), page);
0046     QCheckBox *axisY = new QCheckBox(i18n("Axis Y"), page);
0047     QLabel* scatterLbl = new QLabel(i18n("Scatter amount"), page);
0048 
0049     QHBoxLayout *hl = new QHBoxLayout;
0050     hl->addWidget(scatterLbl);
0051     hl->addWidget(axisX);
0052     hl->addWidget(axisY);
0053 
0054     QVBoxLayout *pageLayout = new QVBoxLayout(page);
0055     pageLayout->setMargin(0);
0056     pageLayout->addLayout(hl);
0057     pageLayout->addWidget(configurationPage());
0058 
0059     setConfigurationPage(page);
0060 
0061     connectControl(axisX, &m_d->model, "axisX");
0062     connectControl(axisY, &m_d->model, "axisY");
0063 
0064     m_d->model.scatterOptionData.bind(std::bind(&KisScatterOptionWidget::emitSettingChanged, this));
0065 }
0066 
0067 KisScatterOptionWidget::~KisScatterOptionWidget()
0068 {
0069 
0070 }
0071 
0072 void KisScatterOptionWidget::writeOptionSetting(KisPropertiesConfigurationSP setting) const
0073 {
0074     KisCurveOptionWidget::writeOptionSetting(setting);
0075     m_d->model.scatterOptionData->write(setting.data());
0076 }
0077 
0078 void KisScatterOptionWidget::readOptionSetting(const KisPropertiesConfigurationSP setting)
0079 {
0080     KisScatterOptionMixIn data = *m_d->model.scatterOptionData;
0081     data.read(setting.data());
0082     m_d->model.scatterOptionData.set(data);
0083 
0084     KisCurveOptionWidget::readOptionSetting(setting);
0085 }