Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_paintop_option.cpp
Go to the documentation of this file.
1/* This file is part of the KDE project
2 * SPDX-FileCopyrightText: 2008 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
8
9
10#include <QWidget>
11
12#include <klocalizedstring.h>
13
16
17#include <lager/constant.hpp>
18#include <lager/state.hpp>
20
22{
23public:
24 lager::state<bool, lager::automatic_tag> checkedFallback;
25 lager::cursor<bool> checkedCursor;
26 lager::reader<bool> externallyEnabledReader;
27 lager::reader<bool> pageEnabledReader;
28 QString label;
30
33 QWidget *configurationPage {nullptr};
34
35 bool updatesBlocked {false};
36 bool isWritingSettings {false};
37
40};
41
42KisPaintOpOption::KisPaintOpOption(const QString &label, PaintopCategory category, bool checked)
43 : m_checkable(true)
44 , m_d(new Private())
45
46{
47 m_d->label = label;
48 m_d->checkedFallback.set(checked);
50 m_d->externallyEnabledReader = lager::make_constant(true);
53 m_d->pageEnabledReader.bind(std::bind(&KisPaintOpOption::slotEnablePageWidget, this, std::placeholders::_1));
54 m_d->checkedCursor.bind(std::bind(&KisPaintOpOption::sigCheckedChanged, this, std::placeholders::_1));
55 m_d->externallyEnabledReader.bind(std::bind(&KisPaintOpOption::sigEnabledChanged, this, std::placeholders::_1));
56
57}
58
60 lager::cursor<bool> checkedCursor)
61 : KisPaintOpOption(label, category, checkedCursor, lager::make_constant(true))
62{
63
64}
65
67 lager::cursor<bool> checkedCursor,
68 lager::reader<bool> externallyEnabledLink)
69 : m_checkable(true)
70 , m_d(new Private())
71{
72 m_d->label = label;
73 m_d->checkedCursor = checkedCursor;
74 m_d->externallyEnabledReader = externallyEnabledLink;
75 m_d->pageEnabledReader = lager::with(m_d->checkedCursor, m_d->externallyEnabledReader).map(std::logical_and{});
77 m_d->pageEnabledReader.bind(std::bind(&KisPaintOpOption::slotEnablePageWidget, this, std::placeholders::_1));
78 m_d->checkedCursor.bind(std::bind(&KisPaintOpOption::sigCheckedChanged, this, std::placeholders::_1));
79 m_d->externallyEnabledReader.bind(std::bind(&KisPaintOpOption::sigEnabledChanged, this, std::placeholders::_1));
80}
81
86
95
97{
99
100 if (!m_d->updatesBlocked) {
101 Q_EMIT sigCheckedChanged(checked);
102 }
103}
104
106{
108
109 if (!m_d->updatesBlocked) {
110 Q_EMIT sigEnabledChanged(enabled);
111 }
112}
113
120
127
129{
130 Q_UNUSED(l);
131}
132
134{
136
137 if (reader) {
138 reader = lager::with(m_d->pageEnabledReader, *reader)
139 .map([](bool enabled, const KisPaintopLodLimitations &l) {
140 return enabled ? l : KisPaintopLodLimitations();
141 });
142 }
143
144 return reader;
145}
146
148{
149 // no limitations by default
150 return std::nullopt;
151}
152
157
159{
160 return m_d->checkedCursor.get();
161}
162
164 return m_checkable;
165}
166
168{
169 m_d->checkedCursor.set(checked);
170
172}
173
175{
176 return m_d->externallyEnabledReader.get();
177}
178
180{
181 Q_UNUSED(image);
182}
183
185{
186 Q_UNUSED(node);
187}
188
193
198
203
208
210{
211 if (m_d->configurationPage && !m_d->checkedCursor.get()) {
212 m_d->configurationPage->setEnabled(true);
213 }
214
215 m_d->configurationPage = page;
216
217 if (m_d->configurationPage) {
218 m_d->configurationPage->setEnabled(m_d->checkedCursor.get());
219 }
220}
221
223{
224 return m_d->configurationPage;
225}
226
228{
229 if (m_d->configurationPage) {
230 m_d->configurationPage->setEnabled(value);
231 }
232}
233
238
240{
241 return m_locked;
242}
243
245{
246 return m_d->label;
247}
float value(const T *src, size_t ch)
std::optional< lager::reader< KisPaintopLodLimitations > > OptionalLodLimitationsReader
void sigEnabledChanged(bool value)
virtual void lodLimitations(KisPaintopLodLimitations *l) const
void emitCheckedChanged(bool checked)
void startReadOptionSetting(const KisPropertiesConfigurationSP setting)
virtual void setCanvasResourcesInterface(KoCanvasResourcesInterfaceSP canvasResourcesInterface)
virtual void readOptionSetting(const KisPropertiesConfigurationSP setting)
KisResourcesInterfaceSP resourcesInterface() const
virtual void setChecked(bool checked)
virtual void setNode(KisNodeWSP node)
virtual void setResourcesInterface(KisResourcesInterfaceSP resourcesInterface)
virtual void writeOptionSetting(KisPropertiesConfigurationSP setting) const
void sigSettingChanged()
virtual OptionalLodLimitationsReader lodLimitationsReader() const
KisPaintOpOption::PaintopCategory category() const
void setConfigurationPage(QWidget *page)
KisPaintOpOption(const QString &label, KisPaintOpOption::PaintopCategory category, bool checked)
void startWriteOptionSetting(KisPropertiesConfigurationSP setting) const
virtual bool isCheckable() const
virtual void setImage(KisImageWSP image)
void sigCheckedChanged(bool value)
QWidget * configurationPage() const
void emitEnabledChanged(bool enabled)
OptionalLodLimitationsReader effectiveLodLimitations() const
void slotEnablePageWidget(bool value)
virtual bool isChecked() const
KoCanvasResourcesInterfaceSP canvasResourcesInterface() const
void setLocked(bool value)
#define KIS_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:75
KoCanvasResourcesInterfaceSP canvasResourcesInterface
lager::reader< bool > pageEnabledReader
lager::reader< bool > externallyEnabledReader
KisPaintOpOption::PaintopCategory category
lager::cursor< bool > checkedCursor
KisResourcesInterfaceSP resourcesInterface
lager::state< bool, lager::automatic_tag > checkedFallback