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 "KisColorSourceOptionWidget.h"
0007 
0008 #include <QGroupBox>
0009 #include <QButtonGroup>
0010 #include <QRadioButton>
0011 #include <QVBoxLayout>
0012 
0013 #include <KoID.h>
0014 
0015 #include <KisColorSourceOptionModel.h>
0016 #include <KisWidgetConnectionUtils.h>
0017 
0018 struct KisColorSourceOptionWidget::Private
0019 {
0020     Private(lager::cursor<KisColorSourceOptionData> optionData)
0021         : model(optionData)
0022     {
0023     }
0024 
0025     KisColorSourceOptionModel model;
0026 };
0027 
0028 KisColorSourceOptionWidget::KisColorSourceOptionWidget(lager::cursor<KisColorSourceOptionData> optionData)
0029     : KisPaintOpOption(i18nc("Color source", "Source"), KisPaintOpOption::COLOR, true)
0030     , m_d(new Private(optionData))
0031 {
0032     using namespace KisWidgetConnectionUtils;
0033 
0034     setObjectName("KisColorSourceOptionWidget");
0035     m_checkable = false;
0036 
0037     QWidget* widget = new QWidget;
0038 
0039     QGroupBox* groupBox = new QGroupBox(widget);
0040     QVBoxLayout* verticalLayout = new QVBoxLayout(groupBox);
0041 
0042     QButtonGroup *buttonGroup = new QButtonGroup(widget);
0043     buttonGroup->setExclusive(true);
0044 
0045     Q_FOREACH (const KoID &id, KisColorSourceOptionData::colorSourceTypeIds()) {
0046         QRadioButton* radioButton = new QRadioButton(groupBox);
0047         radioButton->setText(id.name());
0048         verticalLayout->addWidget(radioButton);
0049         buttonGroup->addButton(radioButton, KisColorSourceOptionData::id2Type(id));
0050     }
0051     QVBoxLayout* verticalLayout_2 = new QVBoxLayout(widget);
0052     verticalLayout_2->setMargin(0);
0053     verticalLayout_2->addWidget(groupBox);
0054     verticalLayout_2->addStretch();
0055 
0056     setConfigurationPage(widget);
0057 
0058     connectControl(buttonGroup, &m_d->model, "type");
0059 
0060     m_d->model.optionData.bind(std::bind(&KisColorSourceOptionWidget::emitSettingChanged, this));
0061 }
0062 
0063 KisColorSourceOptionWidget::~KisColorSourceOptionWidget()
0064 {
0065 }
0066 
0067 void KisColorSourceOptionWidget::writeOptionSetting(KisPropertiesConfigurationSP setting) const
0068 {
0069     m_d->model.optionData->write(setting.data());
0070 }
0071 
0072 void KisColorSourceOptionWidget::readOptionSetting(const KisPropertiesConfigurationSP setting)
0073 {
0074     KisColorSourceOptionData data = *m_d->model.optionData;
0075     data.read(setting.data());
0076     m_d->model.optionData.set(data);
0077 }