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

#include <kis_filter_selector_widget.h>

+ Inheritance diagram for KisFilterSelectorWidget:

Classes

struct  Private
 

Public Slots

void setVisible (bool visible) override
 
void showFilterGallery (bool visible)
 

Signals

void configurationChanged ()
 
void sigFilterGalleryToggled (bool visible)
 
void sigSizeChanged ()
 

Public Member Functions

KisFilterConfigurationSP configuration ()
 
KisFilterSP currentFilter () const
 
bool isFilterGalleryVisible () const
 
 KisFilterSelectorWidget (QWidget *parent)
 
void setFilter (KisFilterSP f, KisFilterConfigurationSP overrideDefaultConfig)
 
void setPaintDevice (bool showAll, KisPaintDeviceSP)
 
void setView (KisViewManager *view)
 
 ~KisFilterSelectorWidget () override
 

Protected Slots

void editConfigurations ()
 
void setFilterIndex (const QModelIndex &)
 
void showXMLdialog ()
 
void slotBookMarkCurrentFilter ()
 
void slotBookmarkedFilterConfigurationSelected (int)
 
void update ()
 

Private Attributes

Private *const d {nullptr}
 

Detailed Description

Widget for selecting the filter. This shows the widget if there is any.

Definition at line 30 of file kis_filter_selector_widget.h.

Constructor & Destructor Documentation

◆ KisFilterSelectorWidget()

KisFilterSelectorWidget::KisFilterSelectorWidget ( QWidget * parent)

Definition at line 69 of file kis_filter_selector_widget.cc.

70 : d(new Private)
71{
72 Q_UNUSED(parent);
73 setObjectName("KisFilterSelectorWidget");
74 d->uiFilterSelector.setupUi(this);
75
76 d->widgetLayout = new QGridLayout(d->uiFilterSelector.centralWidgetHolder);
77 d->widgetLayout->setContentsMargins(0,0,0,0);
78 d->widgetLayout->setHorizontalSpacing(0);
79
80 showFilterGallery(false);
81
82 connect(d->uiFilterSelector.filtersSelector, SIGNAL(clicked(QModelIndex)), SLOT(setFilterIndex(QModelIndex)));
83 connect(d->uiFilterSelector.filtersSelector, SIGNAL(activated(QModelIndex)), SLOT(setFilterIndex(QModelIndex)));
84
85 connect(d->uiFilterSelector.comboBoxPresets, SIGNAL(activated(int)),SLOT(slotBookmarkedFilterConfigurationSelected(int)));
86 connect(d->uiFilterSelector.pushButtonEditPresets, SIGNAL(pressed()), SLOT(editConfigurations()));
87 connect(d->uiFilterSelector.btnXML, SIGNAL(clicked()), this, SLOT(showXMLdialog()));
88
89 KisConfig cfg(true);
90 d->uiFilterSelector.chkRememberPreset->setChecked(cfg.readEntry<bool>("filterdialog/rememberlastpreset", false));
91
92}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void setFilterIndex(const QModelIndex &)

References connect(), d, editConfigurations(), KisConfig::readEntry(), setFilterIndex(), showFilterGallery(), showXMLdialog(), slotBookmarkedFilterConfigurationSelected(), KisFilterSelectorWidget::Private::uiFilterSelector, and KisFilterSelectorWidget::Private::widgetLayout.

◆ ~KisFilterSelectorWidget()

KisFilterSelectorWidget::~KisFilterSelectorWidget ( )
override

Member Function Documentation

◆ configuration()

KisFilterConfigurationSP KisFilterSelectorWidget::configuration ( )

Definition at line 327 of file kis_filter_selector_widget.cc.

328{
331 if (config) {
332 return config;
333 }
334 } else if (d->currentFilter) {
336 }
337 return 0;
338
339}
virtual KisPropertiesConfigurationSP configuration() const =0
static KisResourcesInterfaceSP instance()
virtual KisFilterConfigurationSP defaultConfiguration(KisResourcesInterfaceSP resourcesInterface) const

References KisConfigWidget::configuration(), KisFilterSelectorWidget::Private::currentFilter, KisFilterSelectorWidget::Private::currentFilterConfigurationWidget, d, KisSharedPtr< T >::data(), KisBaseProcessor::defaultConfiguration(), and KisGlobalResourcesInterface::instance().

◆ configurationChanged

void KisFilterSelectorWidget::configurationChanged ( )
signal

◆ currentFilter()

KisFilterSP KisFilterSelectorWidget::currentFilter ( ) const

Definition at line 183 of file kis_filter_selector_widget.cc.

184{
185 return d->currentFilter;
186}

References KisFilterSelectorWidget::Private::currentFilter, and d.

◆ editConfigurations

◆ isFilterGalleryVisible()

bool KisFilterSelectorWidget::isFilterGalleryVisible ( ) const

◆ setFilter()

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

Definition at line 188 of file kis_filter_selector_widget.cc.

189{
190 Q_ASSERT(f);
191 Q_ASSERT(d->filtersModel);
192 setWindowTitle(f->name());
193 dbgKrita << "setFilter: " << f;
194 d->currentFilter = f;
195 delete d->currentCentralWidget;
196
197 {
198 bool v = d->uiFilterSelector.filtersSelector->blockSignals(true);
199 d->uiFilterSelector.filtersSelector->setCurrentIndex(d->filtersModel->indexForFilter(f->id()));
200 d->uiFilterSelector.filtersSelector->blockSignals(v);
201 }
202
203 KisConfigWidget* widget =
205
206 if (!widget) { // No widget, so display a label instead
207 d->uiFilterSelector.comboBoxPresets->setEnabled(false);
208 d->uiFilterSelector.pushButtonEditPresets->setEnabled(false);
209 d->uiFilterSelector.btnXML->setEnabled(false);
210
212 d->currentCentralWidget = new QLabel(i18n("No configuration options"),
213 d->uiFilterSelector.centralWidgetHolder);
214 d->uiFilterSelector.scrollArea->setMinimumSize(d->currentCentralWidget->sizeHint());
215 qobject_cast<QLabel*>(d->currentCentralWidget)->setAlignment(Qt::AlignCenter);
216 } else {
217 KisFilterConfigurationSP defaultConfiguration =
218 overrideDefaultConfig ?
219 overrideDefaultConfig :
221
222 d->uiFilterSelector.comboBoxPresets->setEnabled(true);
223 d->uiFilterSelector.pushButtonEditPresets->setEnabled(true);
224 d->uiFilterSelector.btnXML->setEnabled(true);
225
227 d->currentCentralWidget = widget;
228 widget->layout()->setContentsMargins(0,0,0,0);
230 d->currentFilterConfigurationWidget->blockSignals(true);
232 d->currentFilterConfigurationWidget->blockSignals(false);
233 d->uiFilterSelector.scrollArea->setContentsMargins(0,0,0,0);
234 d->uiFilterSelector.scrollArea->setMinimumWidth(widget->sizeHint().width() + 18);
235 connect(d->currentFilterConfigurationWidget, SIGNAL(sigConfigurationUpdated()), this, SIGNAL(configurationChanged()));
236 }
237
238 // Change the list of presets
242
243 // Add the widget to the layout
244 d->currentCentralWidget->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
245 d->widgetLayout->addWidget(d->currentCentralWidget, 0 , 0);
246
247 if (d->uiFilterSelector.chkRememberPreset->isChecked()) {
248 int lastBookmarkedFilterConfiguration = KisConfig(true).readEntry<int>("lastBookmarkedFilterConfiguration/" + f->id(), 0);
249 if (d->uiFilterSelector.comboBoxPresets->count() > lastBookmarkedFilterConfiguration) {
250 d->uiFilterSelector.comboBoxPresets->setCurrentIndex(lastBookmarkedFilterConfiguration);
251 slotBookmarkedFilterConfigurationSelected(lastBookmarkedFilterConfiguration);
252 }
253 }
254
255 update();
256}
qreal v
virtual void setView(KisViewManager *view)
virtual void setConfiguration(const KisPropertiesConfigurationSP config)=0
T readEntry(const QString &name, const T &defaultValue=T())
Definition kis_config.h:789
QModelIndex indexForFilter(const QString &id)
#define dbgKrita
Definition kis_debug.h:45
virtual KisConfigWidget * createConfigurationWidget(QWidget *parent, const KisPaintDeviceSP dev, bool useForMasks) const

References configurationChanged(), connect(), KisBaseProcessor::createConfigurationWidget(), KisFilterSelectorWidget::Private::currentBookmarkedFilterConfigurationsModel, KisFilterSelectorWidget::Private::currentCentralWidget, KisFilterSelectorWidget::Private::currentFilter, KisFilterSelectorWidget::Private::currentFilterConfigurationWidget, d, dbgKrita, KisBaseProcessor::defaultConfiguration(), KisFilterSelectorWidget::Private::filtersModel, KisFiltersModel::indexForFilter(), KisGlobalResourcesInterface::instance(), KisFilterSelectorWidget::Private::paintDevice, KisConfig::readEntry(), KisConfigWidget::setConfiguration(), KisConfigWidget::setView(), slotBookmarkedFilterConfigurationSelected(), KisFilterSelectorWidget::Private::thumb, KisFilterSelectorWidget::Private::uiFilterSelector, update(), KisFilterSelectorWidget::Private::usedForMask, v, KisFilterSelectorWidget::Private::view, and KisFilterSelectorWidget::Private::widgetLayout.

◆ setFilterIndex

void KisFilterSelectorWidget::setFilterIndex ( const QModelIndex & idx)
protectedslot

Definition at line 258 of file kis_filter_selector_widget.cc.

259{
260 if (!idx.isValid()) return;
261
262 Q_ASSERT(d->filtersModel);
263 KisFilter* filter = const_cast<KisFilter*>(d->filtersModel->indexToFilter(idx));
264 if (filter) {
265 setFilter(filter, 0);
266 }
267 else {
268 if (d->currentFilter) {
269 bool v = d->uiFilterSelector.filtersSelector->blockSignals(true);
270 QModelIndex idx = d->filtersModel->indexForFilter(d->currentFilter->id());
271 d->uiFilterSelector.filtersSelector->setCurrentIndex(idx);
272 d->uiFilterSelector.filtersSelector->scrollTo(idx);
273 d->uiFilterSelector.filtersSelector->blockSignals(v);
274 }
275 }
276
278 emit(configurationChanged());
279}
void setFilter(KisFilterSP f, KisFilterConfigurationSP overrideDefaultConfig)
const KisFilter * indexToFilter(const QModelIndex &idx)

References configurationChanged(), KisFilterSelectorWidget::Private::currentFilter, d, KisFilterSelectorWidget::Private::filtersModel, KisBaseProcessor::id, KisFiltersModel::indexForFilter(), KisFiltersModel::indexToFilter(), setFilter(), slotBookMarkCurrentFilter(), KisFilterSelectorWidget::Private::uiFilterSelector, and v.

◆ setPaintDevice()

void KisFilterSelectorWidget::setPaintDevice ( bool showAll,
KisPaintDeviceSP _paintDevice )

Definition at line 110 of file kis_filter_selector_widget.cc.

111{
112 if (!_paintDevice) return;
113
114 if (d->filtersModel) delete d->filtersModel;
115
116 d->usedForMask = !showAll;
117 d->paintDevice = _paintDevice;
120 d->filtersModel = new KisFiltersModel(showAll, d->thumb);
121
122 d->uiFilterSelector.filtersSelector->setFilterModel(d->filtersModel);
123 d->uiFilterSelector.filtersSelector->header()->setVisible(false);
124
125 KisConfig cfg(true);
126 QModelIndex idx = d->filtersModel->indexForFilter(cfg.readEntry<QString>("FilterSelector/LastUsedFilter", "levels"));
127
128 if (!idx.isValid()) {
129 idx = d->filtersModel->indexForFilter("levels");
130 }
131
133 d->uiFilterSelector.filtersSelector->activateFilter(idx);
134 }
135
136}
void setDefaultBounds(KisDefaultBoundsBaseSP bounds)
KisPaintDeviceSP createThumbnailDevice(qint32 w, qint32 h, QRect rect=QRect(), QRect outputRect=QRect()) const

References KisPaintDevice::createThumbnailDevice(), d, KisFilterSelectorWidget::Private::filtersModel, KisFiltersModel::indexForFilter(), isFilterGalleryVisible(), KisFilterSelectorWidget::Private::paintDevice, KisConfig::readEntry(), KisPaintDevice::setDefaultBounds(), KisFilterSelectorWidget::Private::thumb, KisFilterSelectorWidget::Private::uiFilterSelector, and KisFilterSelectorWidget::Private::usedForMask.

◆ setView()

void KisFilterSelectorWidget::setView ( KisViewManager * view)

Definition at line 105 of file kis_filter_selector_widget.cc.

106{
107 d->view = view;
108}

References d, and KisFilterSelectorWidget::Private::view.

◆ setVisible

void KisFilterSelectorWidget::setVisible ( bool visible)
overrideslot

Definition at line 356 of file kis_filter_selector_widget.cc.

357{
358 QWidget::setVisible(visible);
359 if (visible) {
360 update();
361 }
362}

References update().

◆ showFilterGallery

void KisFilterSelectorWidget::showFilterGallery ( bool visible)
slot

Definition at line 138 of file kis_filter_selector_widget.cc.

139{
140 if (d->showFilterGallery == visible) {
141 return;
142 }
143
144 d->showFilterGallery = visible;
145 update();
146 Q_EMIT sigFilterGalleryToggled(visible);
147 Q_EMIT sigSizeChanged();
148}
void sigFilterGalleryToggled(bool visible)

References d, KisFilterSelectorWidget::Private::showFilterGallery, sigFilterGalleryToggled(), sigSizeChanged(), and update().

◆ showXMLdialog

void KisFilterSelectorWidget::showXMLdialog ( )
protectedslot

Definition at line 150 of file kis_filter_selector_widget.cc.

151{
152 if (currentFilter()->showConfigurationWidget()) {
153 QDialog *xmlDialog = new QDialog(qApp->activeWindow());
154 xmlDialog->setMinimumWidth(500);
155 xmlDialog->setWindowTitle(i18n("Filter configuration XML"));
156 QVBoxLayout *xmllayout = new QVBoxLayout(xmlDialog);
157 QPlainTextEdit *text = new QPlainTextEdit(xmlDialog);
159 text->setPlainText(config->toXML());
160 xmllayout->addWidget(text);
161 QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel, xmlDialog);
162 KGuiItem::assign(buttons->button(QDialogButtonBox::Ok), KStandardGuiItem::ok());
163 KGuiItem::assign(buttons->button(QDialogButtonBox::Cancel), KStandardGuiItem::cancel());
164 connect(buttons, SIGNAL(accepted()), xmlDialog, SLOT(accept()));
165 connect(buttons, SIGNAL(rejected()), xmlDialog, SLOT(reject()));
166 xmllayout->addWidget(buttons);
167 if (xmlDialog->exec()==QDialog::Accepted) {
168 QDomDocument doc;
169 doc.setContent(text->toPlainText());
170 config->fromXML(doc.documentElement());
171 if (config) {
173 }
174 }
175 }
176}
KisFilterConfigurationSP configuration()
QString buttons(const T &ev)

References buttons(), configuration(), connect(), currentFilter(), KisFilterSelectorWidget::Private::currentFilterConfigurationWidget, d, and KisConfigWidget::setConfiguration().

◆ sigFilterGalleryToggled

void KisFilterSelectorWidget::sigFilterGalleryToggled ( bool visible)
signal

◆ sigSizeChanged

void KisFilterSelectorWidget::sigSizeChanged ( )
signal

◆ slotBookMarkCurrentFilter

void KisFilterSelectorWidget::slotBookMarkCurrentFilter ( )
protectedslot

Definition at line 281 of file kis_filter_selector_widget.cc.

281 {
282 KisConfig cfg(false);
283 cfg.writeEntry<QString>("FilterSelector/LastUsedFilter", d->currentFilter->id());
284}

References KisFilterSelectorWidget::Private::currentFilter, d, KisBaseProcessor::id, and KisConfig::writeEntry().

◆ slotBookmarkedFilterConfigurationSelected

void KisFilterSelectorWidget::slotBookmarkedFilterConfigurationSelected ( int index)
protectedslot

Definition at line 286 of file kis_filter_selector_widget.cc.

287{
289 QModelIndex modelIndex = d->currentBookmarkedFilterConfigurationsModel->index(index, 0);
292 if (d->currentFilter && index != KisConfig(true).readEntry<int>("lastBookmarkedFilterConfiguration/" + d->currentFilter->id(), 0)) {
293 KisConfig(false).writeEntry<int>("lastBookmarkedFilterConfiguration/" + d->currentFilter->id(), index);
294 }
295 }
296}
KisFilterConfigurationSP configuration(const QModelIndex &index) const
void writeEntry(const QString &name, const T &value)
Definition kis_config.h:779

References KisBookmarkedFilterConfigurationsModel::configuration(), KisFilterSelectorWidget::Private::currentBookmarkedFilterConfigurationsModel, KisFilterSelectorWidget::Private::currentFilter, KisFilterSelectorWidget::Private::currentFilterConfigurationWidget, d, KisBaseProcessor::id, KisConfigWidget::setConfiguration(), and KisConfig::writeEntry().

◆ update

void KisFilterSelectorWidget::update ( )
protectedslot

Definition at line 306 of file kis_filter_selector_widget.cc.

307{
308 d->uiFilterSelector.filtersSelector->setVisible(d->showFilterGallery);
309 if (d->showFilterGallery) {
310 setMinimumWidth(qMax(sizeHint().width(), 700));
311 d->uiFilterSelector.scrollArea->setMinimumHeight(400);
312 setMinimumHeight(d->uiFilterSelector.verticalLayout->sizeHint().height());
313 if (d->currentFilter) {
314 bool v = d->uiFilterSelector.filtersSelector->blockSignals(true);
315 d->uiFilterSelector.filtersSelector->setCurrentIndex(d->filtersModel->indexForFilter(d->currentFilter->id()));
316 d->uiFilterSelector.filtersSelector->blockSignals(v);
317 }
318 }
319 else {
320 if (d->currentCentralWidget) {
321 d->uiFilterSelector.scrollArea->setMinimumHeight(qMin(400, d->currentCentralWidget->sizeHint().height()));
322 }
323 setMinimumSize(d->uiFilterSelector.verticalLayout->sizeHint());
324 }
325}

References KisFilterSelectorWidget::Private::currentCentralWidget, KisFilterSelectorWidget::Private::currentFilter, d, KisFilterSelectorWidget::Private::filtersModel, KisBaseProcessor::id, KisFiltersModel::indexForFilter(), KisFilterSelectorWidget::Private::showFilterGallery, KisFilterSelectorWidget::Private::uiFilterSelector, and v.

Member Data Documentation

◆ d

Private* const KisFilterSelectorWidget::d {nullptr}
private

Definition at line 58 of file kis_filter_selector_widget.h.

58{nullptr};

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