File indexing completed on 2025-03-09 04:10:09

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