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 }