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

#include <kis_dlg_filter.h>

+ Inheritance diagram for KisDlgFilter:

Classes

struct  Private
 

Public Slots

void adjustSize ()
 

Public Member Functions

 KisDlgFilter (KisViewManager *view, KisNodeSP node, KisFilterManager *filterManager, QWidget *parent=0)
 
void setFilter (KisFilterSP f, KisFilterConfigurationSP overrideDefaultConfig)
 
 ~KisDlgFilter () override
 

Protected Slots

void createMask ()
 
void enablePreviewToggled (bool checked)
 
void filterSelectionChanged ()
 
void slotOnAccept ()
 
void slotOnReject ()
 

Private Slots

void slotFilterWidgetSizeChanged ()
 
void updatePreview ()
 

Private Member Functions

void setDialogTitle (KisFilterSP f)
 
void startApplyingFilter (KisFilterConfigurationSP config)
 

Private Attributes

KisDlgFilter::Private *const d
 

Detailed Description

Definition at line 17 of file kis_dlg_filter.h.

Constructor & Destructor Documentation

◆ KisDlgFilter()

KisDlgFilter::KisDlgFilter ( KisViewManager * view,
KisNodeSP node,
KisFilterManager * filterManager,
QWidget * parent = 0 )

Definition at line 61 of file kis_dlg_filter.cpp.

61 :
62 QDialog(parent),
63 d(new Private(filterManager, view))
64{
65 setModal(false);
66
67 d->uiFilterDialog.setupUi(this);
68 d->node = node;
69
70 d->uiFilterDialog.filterSelection->setView(view);
71 d->uiFilterDialog.filterSelection->showFilterGallery(KisConfig(true).showFilterGallery());
72
73 d->uiFilterDialog.pushButtonCreateMaskEffect->show();
74 connect(d->uiFilterDialog.pushButtonCreateMaskEffect, SIGNAL(pressed()), SLOT(createMask()));
75
76 d->uiFilterDialog.filterGalleryToggle->setChecked(d->uiFilterDialog.filterSelection->isFilterGalleryVisible());
77 d->uiFilterDialog.filterGalleryToggle->setIcon(KisIconUtils::loadIcon("sidebaricon"));
78 d->uiFilterDialog.filterGalleryToggle->setMaximumWidth(d->uiFilterDialog.filterGalleryToggle->height());
79 connect(d->uiFilterDialog.filterSelection, SIGNAL(sigFilterGalleryToggled(bool)), d->uiFilterDialog.filterGalleryToggle, SLOT(setChecked(bool)));
80 connect(d->uiFilterDialog.filterGalleryToggle, SIGNAL(toggled(bool)), d->uiFilterDialog.filterSelection, SLOT(showFilterGallery(bool)));
81 connect(d->uiFilterDialog.filterSelection, SIGNAL(sigSizeChanged()), this, SLOT(slotFilterWidgetSizeChanged()));
82
83 if (node->inherits("KisMask")) {
84 d->uiFilterDialog.pushButtonCreateMaskEffect->setVisible(false);
85 }
86
87 d->uiFilterDialog.filterSelection->setPaintDevice(true, d->node->paintDevice());
88
89 KGuiItem::assign(d->uiFilterDialog.buttonBox->button(QDialogButtonBox::Ok), KStandardGuiItem::ok());
90 KGuiItem::assign(d->uiFilterDialog.buttonBox->button(QDialogButtonBox::Cancel), KStandardGuiItem::cancel());
91
92 connect(d->uiFilterDialog.buttonBox, SIGNAL(accepted()), SLOT(accept()));
93 connect(d->uiFilterDialog.buttonBox, SIGNAL(rejected()), SLOT(reject()));
94 connect(d->uiFilterDialog.checkBoxPreview, SIGNAL(toggled(bool)), SLOT(enablePreviewToggled(bool)));
95 connect(d->uiFilterDialog.filterSelection, SIGNAL(configurationChanged()), SLOT(filterSelectionChanged()));
96
97 connect(this, SIGNAL(accepted()), SLOT(slotOnAccept()));
98 connect(this, SIGNAL(accepted()), d->uiFilterDialog.filterSelection, SLOT(slotBookMarkCurrentFilter()));
99 connect(this, SIGNAL(rejected()), SLOT(slotOnReject()));
100
101 KConfigGroup group( KSharedConfig::openConfig(), "filterdialog");
102 d->uiFilterDialog.checkBoxPreview->setChecked(group.readEntry("showPreview", true));
103
104 d->uiFilterDialog.chkFilterSelectedFrames->setChecked(d->filterManager->filterAllSelectedFrames());
105
106 //Handle create mask toggle based on state of chkFilterSelectedFrames
107 connect(d->uiFilterDialog.chkFilterSelectedFrames, &QCheckBox::toggled, [this](const bool state){
108 if (d->currentFilter) {
109 d->uiFilterDialog.pushButtonCreateMaskEffect->setEnabled(!state && d->currentFilter->supportsAdjustmentLayers());
110 }
111 });
112
113 d->uiFilterDialog.chkFilterSelectedFrames->setToolTip(i18n("In addition to filtering the currently visible frame, \nfilter all other keyframe selected in the Animation Timeline docker."));
114
115 restoreGeometry(KisConfig(true).readEntry("filterdialog/geometry", QByteArray()));
116 connect(&d->updateCompressor, SIGNAL(timeout()), this, SLOT(updatePreview()));
117
118}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void slotFilterWidgetSizeChanged()
KisDlgFilter::Private *const d
void enablePreviewToggled(bool checked)
void filterSelectionChanged()
QIcon loadIcon(const QString &name)
virtual KisPaintDeviceSP paintDevice() const =0
Ui_FilterDialog uiFilterDialog
KisSignalCompressor updateCompressor
KisFilterManager * filterManager

References connect(), createMask(), d, enablePreviewToggled(), KisFilterManager::filterAllSelectedFrames(), KisDlgFilter::Private::filterManager, filterSelectionChanged(), KisIconUtils::loadIcon(), KisDlgFilter::Private::node, KisBaseNode::paintDevice(), slotFilterWidgetSizeChanged(), slotOnAccept(), slotOnReject(), and KisDlgFilter::Private::uiFilterDialog.

◆ ~KisDlgFilter()

KisDlgFilter::~KisDlgFilter ( )
override

Definition at line 120 of file kis_dlg_filter.cpp.

121{
122 KisConfig(false).writeEntry("filterdialog/geometry", saveGeometry());
123 delete d;
124}
void writeEntry(const QString &name, const T &value)
Definition kis_config.h:779

References d, and KisConfig::writeEntry().

Member Function Documentation

◆ adjustSize

void KisDlgFilter::adjustSize ( )
slot

Definition at line 170 of file kis_dlg_filter.cpp.

171{
172 QWidget::adjustSize();
173}

◆ createMask

void KisDlgFilter::createMask ( )
protectedslot

Definition at line 204 of file kis_dlg_filter.cpp.

205{
206 if (d->node->inherits("KisMask")) return;
207
212 return;
213 }
214 }
215
216 KisLayer *layer = qobject_cast<KisLayer*>(d->node.data());
217 KisFilterMaskSP mask = new KisFilterMask(d->view->image(), i18n("Filter Mask"));
218 mask->setName(d->currentFilter->name());
219 mask->initSelection(d->view->selection(), layer);
220 mask->setFilter(d->uiFilterDialog.filterSelection->configuration()->cloneWithResourcesSnapshot());
221
222 Q_ASSERT(layer->allowAsChild(mask));
223
224 KisNodeCommandsAdapter adapter(d->view);
225 adapter.addNode(mask, layer, layer->lastChild());
226
227 close();
228}
bool isStrokeRunning() const
void cancelRunningStroke()
Cancel current running stroke.
bool blockUntilOperationsFinished(KisImageSP image)
blockUntilOperationsFinished blocks the GUI of the application until execution of actions on image is...
KisSelectionSP selection()
KisImageWSP image() const
Return the image this view is displaying.
QAction * close(const QObject *recvr, const char *slot, QObject *parent)
KisViewManager * view
KisNodeSP lastChild() const
Definition kis_node.cpp:367
virtual bool allowAsChild(KisNodeSP) const =0

References KisNodeCommandsAdapter::addNode(), KisNode::allowAsChild(), KisViewManager::blockUntilOperationsFinished(), KisFilterManager::cancelRunningStroke(), KisDlgFilter::Private::currentFilter, d, KisSharedPtr< T >::data(), KisDlgFilter::Private::filterManager, KisViewManager::image(), KisFilterManager::isStrokeRunning(), KisNode::lastChild(), KisBaseProcessor::name(), KisDlgFilter::Private::node, KisViewManager::selection(), KisDlgFilter::Private::uiFilterDialog, updatePreview(), and KisDlgFilter::Private::view.

◆ enablePreviewToggled

void KisDlgFilter::enablePreviewToggled ( bool checked)
protectedslot

Definition at line 230 of file kis_dlg_filter.cpp.

231{
232 if (checked) {
234 } else if (d->filterManager->isStrokeRunning()) {
236 }
237
238 KConfigGroup group( KSharedConfig::openConfig(), "filterdialog");
239 group.writeEntry("showPreview", checked);
240
241 group.config()->sync();
242}

References KisFilterManager::cancelRunningStroke(), d, KisDlgFilter::Private::filterManager, KisFilterManager::isStrokeRunning(), KisSignalCompressor::start(), and KisDlgFilter::Private::updateCompressor.

◆ filterSelectionChanged

void KisDlgFilter::filterSelectionChanged ( )
protectedslot

Definition at line 244 of file kis_dlg_filter.cpp.

245{
246 KisFilterSP filter = d->uiFilterDialog.filterSelection->currentFilter();
247 setDialogTitle(filter);
248 d->currentFilter = filter;
249 const bool multiframeEnabled = d->uiFilterDialog.chkFilterSelectedFrames->isChecked();
250 d->uiFilterDialog.pushButtonCreateMaskEffect->setEnabled(filter.isNull() ? false : (filter->supportsAdjustmentLayers() && !multiframeEnabled));
252}
void setDialogTitle(KisFilterSP f)
bool isNull() const

References KisDlgFilter::Private::currentFilter, d, KisSharedPtr< T >::isNull(), setDialogTitle(), KisSignalCompressor::start(), KisBaseProcessor::supportsAdjustmentLayers, KisDlgFilter::Private::uiFilterDialog, and KisDlgFilter::Private::updateCompressor.

◆ setDialogTitle()

void KisDlgFilter::setDialogTitle ( KisFilterSP f)
private

Definition at line 137 of file kis_dlg_filter.cpp.

138{
139 setWindowTitle(filter.isNull() ? i18nc("@title:window", "Filter") : i18nc("@title:window", "Filter: %1", filter->name()));
140}
const char * name(StandardAction id)

References KisSharedPtr< T >::isNull(), and KisBaseProcessor::name().

◆ setFilter()

void KisDlgFilter::setFilter ( KisFilterSP f,
KisFilterConfigurationSP overrideDefaultConfig )

Definition at line 126 of file kis_dlg_filter.cpp.

127{
128 Q_ASSERT(f);
130 d->uiFilterDialog.filterSelection->setFilter(f, overrideDefaultConfig);
131 const bool multiframeEnabled = d->uiFilterDialog.chkFilterSelectedFrames->isChecked();
132 d->uiFilterDialog.pushButtonCreateMaskEffect->setEnabled(f->supportsAdjustmentLayers() && !multiframeEnabled);
133 d->currentFilter = f;
135}

References KisDlgFilter::Private::currentFilter, d, setDialogTitle(), KisSignalCompressor::start(), KisDlgFilter::Private::uiFilterDialog, and KisDlgFilter::Private::updateCompressor.

◆ slotFilterWidgetSizeChanged

void KisDlgFilter::slotFilterWidgetSizeChanged ( )
privateslot

Definition at line 175 of file kis_dlg_filter.cpp.

176{
177 QMetaObject::invokeMethod(this, "adjustSize", Qt::QueuedConnection);
178}

◆ slotOnAccept

void KisDlgFilter::slotOnAccept ( )
protectedslot

Definition at line 180 of file kis_dlg_filter.cpp.

181{
183 KisFilterConfigurationSP config(d->uiFilterDialog.filterSelection->configuration());
184 startApplyingFilter(config);
185 }
186
187 d->filterManager->setFilterAllSelectedFrames(d->uiFilterDialog.chkFilterSelectedFrames->isChecked());
189
190 d->uiFilterDialog.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
191
192 KisConfig(false).setShowFilterGallery(d->uiFilterDialog.filterSelection->isFilterGalleryVisible());
193}
void setShowFilterGallery(bool showFilterGallery) const
void startApplyingFilter(KisFilterConfigurationSP config)
void setFilterAllSelectedFrames(bool filterAllSelectedFrames)

References d, KisDlgFilter::Private::filterManager, KisFilterManager::finish(), KisFilterManager::isStrokeRunning(), KisFilterManager::setFilterAllSelectedFrames(), KisConfig::setShowFilterGallery(), startApplyingFilter(), and KisDlgFilter::Private::uiFilterDialog.

◆ slotOnReject

void KisDlgFilter::slotOnReject ( )
protectedslot

◆ startApplyingFilter()

void KisDlgFilter::startApplyingFilter ( KisFilterConfigurationSP config)
private

Definition at line 142 of file kis_dlg_filter.cpp.

143{
144 if (!d->uiFilterDialog.filterSelection->configuration()) return;
145
146 if (d->node->inherits("KisPaintLayer")) {
147 config->setChannelFlags(qobject_cast<KisPaintLayer*>(d->node.data())->channelLockFlags());
148 }
149
150 d->filterManager->apply(config);
151}
void apply(KisFilterConfigurationSP filterConfig)

References KisFilterManager::apply(), d, KisSharedPtr< T >::data(), KisDlgFilter::Private::filterManager, KisDlgFilter::Private::node, and KisDlgFilter::Private::uiFilterDialog.

◆ updatePreview

void KisDlgFilter::updatePreview ( )
privateslot

Definition at line 153 of file kis_dlg_filter.cpp.

154{
155 KisFilterConfigurationSP config = d->uiFilterDialog.filterSelection->configuration();
156 if (!config) return;
157
158 bool maskCreationAllowed = !d->currentFilter || d->currentFilter->configurationAllowedForMask(config);
159 const bool multiframeEnabled = d->uiFilterDialog.chkFilterSelectedFrames->isChecked();
160 d->uiFilterDialog.pushButtonCreateMaskEffect->setEnabled(maskCreationAllowed && !multiframeEnabled);
161
162 if (d->uiFilterDialog.checkBoxPreview->isChecked()) {
163 KisFilterConfigurationSP config(d->uiFilterDialog.filterSelection->configuration());
164 startApplyingFilter(config);
165 }
166
167 d->uiFilterDialog.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
168}
virtual bool configurationAllowedForMask(KisFilterConfigurationSP config) const

References KisFilter::configurationAllowedForMask(), KisDlgFilter::Private::currentFilter, d, startApplyingFilter(), and KisDlgFilter::Private::uiFilterDialog.

Member Data Documentation

◆ d

KisDlgFilter::Private* const KisDlgFilter::d
private

Definition at line 55 of file kis_dlg_filter.h.


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