Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_dlg_adjustment_layer.cc
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2006 Boudewijn Rempt <boud@valdyas.org>
3 * SPDX-FileCopyrightText: 2008 Cyrille Berger <cberger@cberger.net>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
9#include <klocalizedstring.h>
10#include <kstandardguiitem.h>
11
12#include <QGroupBox>
13#include <QLayout>
14#include <QGridLayout>
15#include <QPixmap>
16#include <QDialogButtonBox>
17
18#include "filter/kis_filter.h"
19#include "kis_config_widget.h"
22#include "kis_paint_device.h"
23#include "kis_transaction.h"
24#include "kis_node.h"
26#include <kis_config.h>
27#include "KisViewManager.h"
28#include <kis_icon_utils.h>
29
30
33 KisPaintDeviceSP paintDevice,
34 const QString &layerName,
35 const QString &caption,
36 KisViewManager *view,
37 QWidget *parent,
38 KisFilterConfigurationSP initialFilterConfig)
39 : KoDialog(parent, Qt::Dialog)
40 , m_node(node)
41 , m_nodeFilterInterface(nfi)
42 , m_currentFilter(0)
43 , m_customName(false)
44 , m_layerName(layerName)
45{
46 setCaption(caption);
48
49 QWidget * page = new QWidget(this);
50 wdgFilterNodeCreation.setupUi(page);
51 setMainWidget(page);
52
53 wdgFilterNodeCreation.filterGalleryToggle->setChecked(wdgFilterNodeCreation.filterSelector->isFilterGalleryVisible());
54 wdgFilterNodeCreation.filterGalleryToggle->setIcon(KisIconUtils::loadIcon("sidebaricon"));
55 wdgFilterNodeCreation.filterGalleryToggle->setMaximumWidth(wdgFilterNodeCreation.filterGalleryToggle->height());
56 connect(wdgFilterNodeCreation.filterSelector, SIGNAL(sigFilterGalleryToggled(bool)), wdgFilterNodeCreation.filterGalleryToggle, SLOT(setChecked(bool)));
57 connect(wdgFilterNodeCreation.filterGalleryToggle, SIGNAL(toggled(bool)), wdgFilterNodeCreation.filterSelector, SLOT(showFilterGallery(bool)));
58 connect(wdgFilterNodeCreation.filterSelector, SIGNAL(sigSizeChanged()), this, SLOT(slotFilterWidgetSizeChanged()));
59
60 KGuiItem::assign(wdgFilterNodeCreation.buttonBox->button(QDialogButtonBox::Ok), KStandardGuiItem::ok());
61 KGuiItem::assign(wdgFilterNodeCreation.buttonBox->button(QDialogButtonBox::Cancel), KStandardGuiItem::cancel());
62 connect(wdgFilterNodeCreation.buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
63 connect(wdgFilterNodeCreation.buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
64
65 wdgFilterNodeCreation.filterSelector->setView(view);
66 wdgFilterNodeCreation.filterSelector->showFilterGallery(KisConfig(true).showFilterGalleryLayerMaskDialog());
67
68 wdgFilterNodeCreation.filterSelector->setPaintDevice(false, paintDevice);
69 wdgFilterNodeCreation.layerName->setText(layerName);
70
71 if (initialFilterConfig) {
72 KisFilterSP filter = KisFilterRegistry::instance()->get(initialFilterConfig->name()).data();
73 if (filter) {
74 wdgFilterNodeCreation.filterSelector->setFilter(filter, initialFilterConfig);
75 m_previousFilterName = filter->name();
76 }
77 }
78
79 connect(wdgFilterNodeCreation.filterSelector, SIGNAL(configurationChanged()), SLOT(slotConfigChanged()));
80 connect(wdgFilterNodeCreation.layerName, SIGNAL(textChanged(QString)), SLOT(slotNameChanged(QString)));
81
83}
84
89
91{
92 Q_UNUSED(text);
93 m_customName = !text.isEmpty();
95}
96
98{
99 KisFilterConfigurationSP config = wdgFilterNodeCreation.filterSelector->configuration();
100
101 Q_ASSERT(config);
102
103 return config;
104}
105
107{
108 return wdgFilterNodeCreation.layerName->text();
109}
110
112{
114
116
117 if (m_currentFilter) {
118 m_nodeFilterInterface->setFilter(m_currentFilter->cloneWithResourcesSnapshot());
119 const QString newFilterName = wdgFilterNodeCreation.filterSelector->currentFilter()->name();
120 if (newFilterName != m_previousFilterName) {
121 updateLayerNameForNewFilter(newFilterName);
122 m_previousFilterName = newFilterName;
123 }
124 }
125
126 m_node->setDirty();
127}
128
130{
131 if (m_customName) return;
132
133 const QString text = wdgFilterNodeCreation.layerName->text();
134 QString newText = text;
135
136 if (m_previousFilterName.isEmpty()) {
137 newText = m_layerName + " (" + newFilterName + ")";
138 } else if (text == m_previousFilterName) {
139 newText = newFilterName;
140 } else {
141 const QString oldSuffix = "(" + m_previousFilterName + ")";
142 if (text.endsWith(oldSuffix)) {
143 newText.chop(oldSuffix.size());
144 newText += "(" + newFilterName + ")";
145 }
146 }
147
148 if (newText != text) {
149 wdgFilterNodeCreation.layerName->blockSignals(true);
150 wdgFilterNodeCreation.layerName->setText(newText);
151 wdgFilterNodeCreation.layerName->blockSignals(false);
152 }
153}
154
156{
157 QWidget::adjustSize();
158}
159
161{
162 QMetaObject::invokeMethod(this, "adjustSize", Qt::QueuedConnection);
163}
void setShowFilterGalleryLayerMaskDialog(bool showFilterGallery) const
Ui::WdgFilterNodeCreation wdgFilterNodeCreation
KisDlgAdjustmentLayer(KisNodeSP node, KisNodeFilterInterface *nfi, KisPaintDeviceSP paintDevice, const QString &layerName, const QString &caption, KisViewManager *view, QWidget *parent=0, KisFilterConfigurationSP initialFilterConfig=KisFilterConfigurationSP())
KisNodeFilterInterface * m_nodeFilterInterface
void slotNameChanged(const QString &)
KisFilterConfigurationSP filterConfiguration() const
KisFilterConfigurationSP m_currentFilter
void updateLayerNameForNewFilter(const QString &newFilterName)
static KisFilterRegistry * instance()
virtual void setFilter(KisFilterConfigurationSP filterConfig, bool checkCompareConfig=true)
A dialog base class with standard buttons and predefined layouts.
Definition KoDialog.h:116
void enableButtonOk(bool state)
Definition KoDialog.cpp:606
void setMainWidget(QWidget *widget)
Definition KoDialog.cpp:345
virtual void setCaption(const QString &caption)
Definition KoDialog.cpp:489
void setButtons(ButtonCodes buttonMask)
Definition KoDialog.cpp:195
T get(const QString &id) const
QIcon loadIcon(const QString &name)
virtual void setDirty()
Definition kis_node.cpp:577