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

0001 /*
0002  *  SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "KisPaintingModeOptionWidget.h"
0007 
0008 #include <QButtonGroup>
0009 
0010 #include <lager/constant.hpp>
0011 #include "ui_wdgincremental.h"
0012 
0013 #include "KisPaintingModeOptionModel.h"
0014 
0015 namespace {
0016 
0017 class KisPaintingModeWidget: public QWidget, public Ui::WdgIncremental
0018 {
0019 public:
0020     KisPaintingModeWidget(QWidget *parent = 0)
0021         : QWidget(parent) {
0022         setupUi(this);
0023     }
0024 };
0025 
0026 QString calcButtonGroupToolTip(bool maskingBrushEnabled) {
0027     return maskingBrushEnabled ?
0028         i18nc("@info:tooltip",
0029               "Only wash mode is possible when using a masked brush.") :
0030         "";
0031 }
0032 
0033 }
0034 
0035 
0036 struct KisPaintingModeOptionWidget::Private
0037 {
0038     Private(lager::cursor<KisPaintingModeOptionData> optionData, lager::reader<bool> maskingBrushEnabled)
0039         : model(optionData, maskingBrushEnabled)
0040         , buttonGroupToolTip {maskingBrushEnabled.map(&calcButtonGroupToolTip)}
0041     {
0042     }
0043 
0044     KisPaintingModeOptionModel model;
0045     lager::reader<QString> buttonGroupToolTip;
0046 };
0047 
0048 
0049 KisPaintingModeOptionWidget::KisPaintingModeOptionWidget(lager::cursor<KisPaintingModeOptionData> optionData)
0050     : KisPaintingModeOptionWidget(optionData, lager::make_constant(false))
0051 {
0052 }
0053 
0054 KisPaintingModeOptionWidget::KisPaintingModeOptionWidget(lager::cursor<KisPaintingModeOptionData> optionData, lager::reader<bool> maskingBrushEnabled)
0055     : KisPaintOpOption(i18n("Painting Mode"), KisPaintOpOption::COLOR, true)
0056     , m_d(new Private(optionData, maskingBrushEnabled))
0057 {
0058     using namespace KisWidgetConnectionUtils;
0059 
0060     setObjectName("KisPaintActionTypeOption");
0061     m_checkable = false;
0062 
0063     KisPaintingModeWidget *widget = new KisPaintingModeWidget();
0064 
0065     QButtonGroup *group = new QButtonGroup(widget);
0066     group->addButton(widget->radioBuildup, static_cast<int>(enumPaintingMode::BUILDUP));
0067     group->addButton(widget->radioWash, static_cast<int>(enumPaintingMode::WASH));
0068     group->setExclusive(true);
0069 
0070     setConfigurationPage(widget);
0071 
0072     connectControlState(group, &m_d->model, "paintingModeState", "paintingMode");
0073     m_d->buttonGroupToolTip.bind(std::bind(&QWidget::setToolTip, widget->radioBuildup, std::placeholders::_1));
0074     m_d->buttonGroupToolTip.bind(std::bind(&QWidget::setToolTip, widget->radioWash, std::placeholders::_1));
0075     m_d->buttonGroupToolTip.bind(std::bind(&QWidget::setToolTip, widget->label, std::placeholders::_1));
0076 
0077     m_d->model.optionData.bind(std::bind(&KisPaintingModeOptionWidget::emitSettingChanged, this));
0078 }
0079 
0080 KisPaintingModeOptionWidget::~KisPaintingModeOptionWidget()
0081 {
0082 }
0083 
0084 void KisPaintingModeOptionWidget::writeOptionSetting(KisPropertiesConfigurationSP setting) const
0085 {
0086     m_d->model.bakedOptionData().write(setting.data());
0087 }
0088 
0089 void KisPaintingModeOptionWidget::readOptionSetting(const KisPropertiesConfigurationSP setting)
0090 {
0091     KisPaintingModeOptionData data = *m_d->model.optionData;
0092     data.read(setting.data());
0093     m_d->model.optionData.set(data);
0094 }