Krita Source Code Documentation
Loading...
Searching...
No Matches
KisFilterOptionWidget Class Reference

#include <KisFilterOptionWidget.h>

+ Inheritance diagram for KisFilterOptionWidget:

Classes

struct  Private
 

Public Types

using data_type = KisFilterOptionData
 
- Public Types inherited from KisPaintOpOption
using OptionalLodLimitationsReader = std::optional<lager::reader<KisPaintopLodLimitations>>
 
enum  PaintopCategory {
  GENERAL , COLOR , TEXTURE , FILTER ,
  MASKING_BRUSH
}
 

Public Member Functions

 KisFilterOptionWidget (lager::cursor< KisFilterOptionData > optionData)
 
void readOptionSetting (const KisPropertiesConfigurationSP setting) override
 
void setImage (KisImageWSP image) override
 
void setNode (KisNodeWSP node) override
 
void writeOptionSetting (KisPropertiesConfigurationSP setting) const override
 
 ~KisFilterOptionWidget ()
 
- Public Member Functions inherited from KisPaintOpOption
KisPaintOpOption::PaintopCategory category () const
 
QWidget * configurationPage () const
 
OptionalLodLimitationsReader effectiveLodLimitations () const
 
virtual bool isCheckable () const
 
virtual bool isChecked () const
 
bool isEnabled () const
 
bool isLocked () const
 
 KisPaintOpOption (const QString &label, KisPaintOpOption::PaintopCategory category, bool checked)
 
 KisPaintOpOption (const QString &label, KisPaintOpOption::PaintopCategory category, lager::cursor< bool > checkedCursor)
 
 KisPaintOpOption (const QString &label, KisPaintOpOption::PaintopCategory category, lager::cursor< bool > checkedCursor, lager::reader< bool > externallyEnabledLink)
 
QString label () const
 
virtual void lodLimitations (KisPaintopLodLimitations *l) const
 
virtual void setCanvasResourcesInterface (KoCanvasResourcesInterfaceSP canvasResourcesInterface)
 
virtual void setChecked (bool checked)
 
void setLocked (bool value)
 
virtual void setResourcesInterface (KisResourcesInterfaceSP resourcesInterface)
 
void startReadOptionSetting (const KisPropertiesConfigurationSP setting)
 
void startWriteOptionSetting (KisPropertiesConfigurationSP setting) const
 
 ~KisPaintOpOption () override
 

Private Slots

void slotFilterConfigChangedInGui ()
 
void slotFilterIdChangedInGui (const KoID &fitlerId)
 
void updateFilterState (const QString &fitlerId, const QString &filterConfig, bool forceResetWidget=false)
 

Private Attributes

const QScopedPointer< Privatem_d
 

Additional Inherited Members

- Signals inherited from KisPaintOpOption
void sigCheckedChanged (bool value)
 
void sigEnabledChanged (bool value)
 
void sigSettingChanged ()
 
- Protected Slots inherited from KisPaintOpOption
void emitCheckedChanged (bool checked)
 
void emitEnabledChanged (bool enabled)
 
void emitSettingChanged ()
 
- Protected Member Functions inherited from KisPaintOpOption
KoCanvasResourcesInterfaceSP canvasResourcesInterface () const
 
virtual OptionalLodLimitationsReader lodLimitationsReader () const
 
KisResourcesInterfaceSP resourcesInterface () const
 
void setConfigurationPage (QWidget *page)
 
- Protected Attributes inherited from KisPaintOpOption
bool m_checkable {false}
 
bool m_locked {false}
 

Detailed Description

Definition at line 13 of file KisFilterOptionWidget.h.

Member Typedef Documentation

◆ data_type

Constructor & Destructor Documentation

◆ KisFilterOptionWidget()

KisFilterOptionWidget::KisFilterOptionWidget ( lager::cursor< KisFilterOptionData > optionData)

Definition at line 57 of file KisFilterOptionWidget.cpp.

58 : KisPaintOpOption(i18n("Filter"), KisPaintOpOption::COLOR, true)
59 , m_d(new Private(optionData))
60{
61 setObjectName("KisFilterOption");
62 m_checkable = false;
63 using namespace KisWidgetConnectionUtils;
64
65 m_d->page = new FilterWidget();
67
68 m_d->layout = new QGridLayout(m_d->page->grpFilterOptions);
69
70 // Check which filters support painting
72 QList<KoID> supportedFilters;
73
74 for (auto it = allFilters.begin(); it != allFilters.end(); ++it) {
76 if (f->supportsPainting()) {
77 supportedFilters.push_back(KoID(*it, f->name()));
78 }
79 }
80
81 m_d->page->filtersList->setIDList(supportedFilters);
82
83 m_d->model.LAGER_QT(effectiveFilterState).bind(
86 this,
87 std::placeholders::_1,
88 std::placeholders::_2,
89 false)));
90
92
93 connectControl(m_d->page->checkBoxSmudgeMode, &m_d->model, "smudgeMode");
94
95 m_d->model.optionData.bind(std::bind(&KisFilterOptionWidget::emitSettingChanged, this));
96}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void activated(const KoID &)
const QScopedPointer< Private > m_d
void slotFilterIdChangedInGui(const KoID &fitlerId)
void updateFilterState(const QString &fitlerId, const QString &filterConfig, bool forceResetWidget=false)
static KisFilterRegistry * instance()
void setConfigurationPage(QWidget *page)
KisPaintOpOption(const QString &label, KisPaintOpOption::PaintopCategory category, bool checked)
const T value(const QString &id) const
QList< QString > keys() const
Definition KoID.h:30
void connectControl(KisCompositeOpListWidget *widget, QObject *source, const char *property)
constexpr auto unzip_wrapper
Definition KisMpl.h:70

References KisCmbIDList::activated(), connect(), KisPaintOpOption::emitSettingChanged(), KisFilterRegistry::instance(), KoGenericRegistry< T >::keys(), KisPaintOpOption::m_checkable, m_d, KisPaintOpOption::setConfigurationPage(), slotFilterIdChangedInGui(), kismpl::unzip_wrapper, updateFilterState(), and KoGenericRegistry< T >::value().

◆ ~KisFilterOptionWidget()

KisFilterOptionWidget::~KisFilterOptionWidget ( )

Definition at line 98 of file KisFilterOptionWidget.cpp.

99{
100}

Member Function Documentation

◆ readOptionSetting()

void KisFilterOptionWidget::readOptionSetting ( const KisPropertiesConfigurationSP setting)
overridevirtual

Re-implement this to set the widgets with the values in setting.

Reimplemented from KisPaintOpOption.

Definition at line 107 of file KisFilterOptionWidget.cpp.

108{
109 KisFilterOptionData data = m_d->model.bakedOptionData();
110 data.read(setting.data());
111 m_d->model.optionData.set(data);
112
113}
bool read(const KisPropertiesConfiguration *setting)

References KisSharedPtr< T >::data(), m_d, and KisFilterOptionData::read().

◆ setImage()

void KisFilterOptionWidget::setImage ( KisImageWSP image)
overridevirtual

Reimplement this to use the image in the option widget

Reimplemented from KisPaintOpOption.

Definition at line 115 of file KisFilterOptionWidget.cpp.

116{
117 m_d->image = image;
118 m_d->model.LAGER_QT(effectiveFilterState).nudge();
119}

References m_d.

◆ setNode()

void KisFilterOptionWidget::setNode ( KisNodeWSP node)
overridevirtual

Reimplemented from KisPaintOpOption.

Definition at line 121 of file KisFilterOptionWidget.cpp.

122{
123 m_d->paintDevice = node && node->paintDevice() ? node->paintDevice() : nullptr;
124
125 QString filterId;
126 QString filterConfig;
127 std::tie(filterId, filterConfig) = m_d->model.effectiveFilterState();
128 updateFilterState(filterId, filterConfig, true);
129}
virtual KisPaintDeviceSP paintDevice() const =0

References m_d, KisBaseNode::paintDevice(), and updateFilterState().

◆ slotFilterConfigChangedInGui

void KisFilterOptionWidget::slotFilterConfigChangedInGui ( )
privateslot

Definition at line 197 of file KisFilterOptionWidget.cpp.

198{
199 KIS_SAFE_ASSERT_RECOVER_RETURN(m_d->currentFilter);
200
201 QString config;
202
203 if (m_d->currentFilterConfigWidget) {
204 config = m_d->currentFilterConfigWidget->configuration()->toXML();
205 } else {
206 KisFilterConfigurationSP filterConfig = m_d->currentFilter->defaultConfiguration(resourcesInterface());
207 config = filterConfig->toXML();
208 }
209
210 m_d->model.seteffectiveFilterState(std::make_tuple(m_d->currentFilter->id(), config));
211}
KisResourcesInterfaceSP resourcesInterface() const
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128

References KIS_SAFE_ASSERT_RECOVER_RETURN, m_d, and KisPaintOpOption::resourcesInterface().

◆ slotFilterIdChangedInGui

void KisFilterOptionWidget::slotFilterIdChangedInGui ( const KoID & fitlerId)
privateslot

Definition at line 186 of file KisFilterOptionWidget.cpp.

187{
188 if (m_d->currentFilter && m_d->currentFilter->id() == filterId.id()) return;
189
190 KisFilterSP newFilter = KisFilterRegistry::instance()->value(filterId.id());
192
194 m_d->model.seteffectiveFilterState(std::make_tuple(filterId.id(), filterConfig->toXML()));
195}
virtual KisFilterConfigurationSP defaultConfiguration(KisResourcesInterfaceSP resourcesInterface) const

References KisBaseProcessor::defaultConfiguration(), KoID::id(), KisFilterRegistry::instance(), KIS_SAFE_ASSERT_RECOVER_RETURN, m_d, KisPaintOpOption::resourcesInterface(), and KoGenericRegistry< T >::value().

◆ updateFilterState

void KisFilterOptionWidget::updateFilterState ( const QString & fitlerId,
const QString & filterConfig,
bool forceResetWidget = false )
privateslot

Definition at line 131 of file KisFilterOptionWidget.cpp.

132{
133 if (!m_d->currentFilter ||
134 m_d->currentFilter->id() != filterId) {
135
136 KisSignalsBlocker b(m_d->page->filtersList);
137 m_d->page->filtersList->setCurrent(filterId);
138
139 m_d->currentFilter = KisFilterRegistry::instance()->value(filterId);
140 KIS_SAFE_ASSERT_RECOVER_RETURN(m_d->currentFilter);
141
142 forceResetWidget = true;
143 }
144
145 if (!m_d->paintDevice) {
146 forceResetWidget = true;
147 }
148
149 if (forceResetWidget && m_d->currentFilterConfigWidget) {
150 m_d->currentFilterConfigWidget->hide();
151 m_d->layout->removeWidget(m_d->currentFilterConfigWidget);
152 m_d->layout->invalidate();
153 delete m_d->currentFilterConfigWidget;
154 m_d->currentFilterConfigWidget = nullptr;
155 }
156
157 if (m_d->paintDevice && !m_d->currentFilterConfigWidget) {
158 m_d->currentFilterConfigWidget =
159 m_d->currentFilter->createConfigurationWidget(m_d->page->grpFilterOptions, m_d->paintDevice, true);
160
161 if (m_d->currentFilterConfigWidget) {
162 KisSignalsBlocker b(m_d->currentFilterConfigWidget);
163
164 // TODO: init resources in ctor
165 m_d->currentFilterConfigWidget->setCanvasResourcesInterface(canvasResourcesInterface());
166 m_d->currentFilterConfigWidget->setConfiguration(m_d->currentFilter->defaultConfiguration(resourcesInterface()));
167 m_d->layout->addWidget(m_d->currentFilterConfigWidget);
168 m_d->page->grpFilterOptions->updateGeometry();
169 m_d->currentFilterConfigWidget->show();
170 connect(m_d->currentFilterConfigWidget, SIGNAL(sigConfigurationUpdated()),
171 this, SLOT(slotFilterConfigChangedInGui()));
172 }
173 }
174
175 if (m_d->currentFilterConfigWidget) {
177 m_d->currentFilter->factoryConfiguration(resourcesInterface());
178
179 config->fromXML(filterConfig);
180
181 KisSignalsBlocker b(m_d->currentFilterConfigWidget);
182 m_d->currentFilterConfigWidget->setConfiguration(config);
183 }
184}
KoCanvasResourcesInterfaceSP canvasResourcesInterface() const

References KisPaintOpOption::canvasResourcesInterface(), connect(), KisFilterRegistry::instance(), KIS_SAFE_ASSERT_RECOVER_RETURN, m_d, KisPaintOpOption::resourcesInterface(), slotFilterConfigChangedInGui(), and KoGenericRegistry< T >::value().

◆ writeOptionSetting()

void KisFilterOptionWidget::writeOptionSetting ( KisPropertiesConfigurationSP setting) const
overridevirtual

Re-implement this to save the configuration to the paint configuration.

Reimplemented from KisPaintOpOption.

Definition at line 102 of file KisFilterOptionWidget.cpp.

103{
104 m_d->model.bakedOptionData().write(setting.data());
105}

References KisSharedPtr< T >::data(), and m_d.

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisFilterOptionWidget::m_d
private

Definition at line 35 of file KisFilterOptionWidget.h.


The documentation for this class was generated from the following files: