File indexing completed on 2024-05-26 04:34:03

0001 /*
0002  *  SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "KisCompositeOpOptionWidget.h"
0007 
0008 #include <KoCompositeOpRegistry.h>
0009 
0010 #include "kis_icon_utils.h"
0011 #include <ui_wdgCompositeOpOption.h>
0012 
0013 #include "KisCompositeOpOptionModel.h"
0014 #include "KisWidgetConnectionUtils.h"
0015 #include "KisCompositeOpListConnectionHelper.h"
0016 
0017 struct KisCompositeOpOptionWidget::Private
0018 {
0019     Private(lager::cursor<KisCompositeOpOptionData> optionData)
0020         : model(optionData)
0021     {
0022     }
0023 
0024     KisCompositeOpOptionModel model;
0025 
0026     QLabel *lblCurrentCompositeOp = 0;
0027 };
0028 
0029 KisCompositeOpOptionWidget::KisCompositeOpOptionWidget(lager::cursor<KisCompositeOpOptionData> optionData)
0030     : KisPaintOpOption(i18n("Blending Mode"), KisPaintOpOption::GENERAL, true),
0031       m_d(new Private(optionData))
0032 {
0033     using namespace KisWidgetConnectionUtils;
0034     m_checkable = false;
0035 
0036     setObjectName("KisCompositeOpOption");
0037 
0038     QWidget* widget = new QWidget();
0039 
0040     Ui_wdgCompositeOpOption ui;
0041     ui.setupUi(widget);
0042     ui.bnEraser->setIcon(KisIconUtils::loadIcon("draw-eraser"));
0043 
0044     m_d->lblCurrentCompositeOp = ui.lbChosenMode;
0045     m_d->model.LAGER_QT(compositeOpId).bind(std::bind(&KisCompositeOpOptionWidget::updateCompositeOpLabel, this, std::placeholders::_1));
0046 
0047     connectControl(ui.bnEraser, &m_d->model, "eraserMode");
0048     connectControl(ui.list, &m_d->model, "compositeOpId");
0049 
0050     setConfigurationPage(widget);
0051     m_d->model.optionData.bind(std::bind(&KisCompositeOpOptionWidget::emitSettingChanged, this));
0052 }
0053 
0054 KisCompositeOpOptionWidget::~KisCompositeOpOptionWidget()
0055 {
0056 }
0057 
0058 void KisCompositeOpOptionWidget::writeOptionSetting(KisPropertiesConfigurationSP setting) const
0059 {
0060     m_d->model.optionData->write(setting.data());
0061 }
0062 
0063 void KisCompositeOpOptionWidget::readOptionSetting(const KisPropertiesConfigurationSP setting)
0064 {
0065     KisCompositeOpOptionData data = *m_d->model.optionData;
0066     data.read(setting.data());
0067     m_d->model.optionData.set(data);
0068 }
0069 
0070 void KisCompositeOpOptionWidget::updateCompositeOpLabel(const QString &id)
0071 {
0072     const KoID compositeOp = KoCompositeOpRegistry::instance().getKoID(id);
0073     m_d->lblCurrentCompositeOp->setText(compositeOp.name());
0074 }