File indexing completed on 2025-03-09 04:06:49
0001 /* 0002 * SPDX-FileCopyrightText: 2006 Boudewijn Rempt <boud@valdyas.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "kis_dlg_adj_layer_props.h" 0008 #include <klocalizedstring.h> 0009 0010 #include <QLabel> 0011 #include <QVBoxLayout> 0012 #include <QHBoxLayout> 0013 0014 #include <QLineEdit> 0015 0016 #include "kis_config_widget.h" 0017 #include "kis_transaction.h" 0018 #include "filter/kis_filter.h" 0019 #include "filter/kis_filter_configuration.h" 0020 #include "filter/kis_filter_registry.h" 0021 #include "kis_layer.h" 0022 #include "kis_adjustment_layer.h" 0023 #include "kis_paint_device.h" 0024 #include "kis_paint_layer.h" 0025 #include "kis_group_layer.h" 0026 #include "kis_node_filter_interface.h" 0027 #include <KisGlobalResourcesInterface.h> 0028 0029 KisDlgAdjLayerProps::KisDlgAdjLayerProps(KisNodeSP node, 0030 KisNodeFilterInterface* nfi, 0031 KisPaintDeviceSP paintDevice, 0032 KisViewManager *view, 0033 KisFilterConfigurationSP configuration, 0034 const QString & layerName, 0035 const QString & caption, 0036 QWidget *parent, 0037 const char *name) 0038 : KoDialog(parent) 0039 , m_node(node) 0040 , m_paintDevice(paintDevice) 0041 , m_currentConfigWidget(0) 0042 , m_currentFilter(0) 0043 , m_currentConfiguration(0) 0044 , m_nodeFilterInterface(nfi) 0045 { 0046 setButtons(Ok | Cancel); 0047 setDefaultButton(Ok); 0048 0049 setObjectName(name); 0050 0051 m_currentConfiguration = configuration->clone(); 0052 if (m_currentConfiguration) { 0053 m_currentFilter = KisFilterRegistry::instance()->get(m_currentConfiguration->name()).data(); 0054 } 0055 0056 setCaption(caption); 0057 QWidget * page = new QWidget(this); 0058 page->setObjectName("page widget"); 0059 QHBoxLayout * layout = new QHBoxLayout(page); 0060 layout->setMargin(0); 0061 setMainWidget(page); 0062 0063 QVBoxLayout *v1 = new QVBoxLayout(); 0064 layout->addLayout(v1); 0065 QHBoxLayout *hl = new QHBoxLayout(); 0066 v1->addLayout(hl); 0067 0068 QLabel * lblName = new QLabel(i18n("Layer name:"), page); 0069 lblName->setObjectName("lblName"); 0070 hl->addWidget(lblName, 0); 0071 0072 m_layerName = new QLineEdit(page); 0073 m_layerName->setObjectName("m_layerName"); 0074 m_layerName->setText(layerName); 0075 m_layerName->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); 0076 hl->addWidget(m_layerName, 10); 0077 connect(m_layerName, SIGNAL(textChanged(QString)), this, SLOT(slotNameChanged(QString))); 0078 0079 if (m_currentFilter) { 0080 m_currentConfigWidget = m_currentFilter->createConfigurationWidget(page, paintDevice, true); 0081 0082 if (m_currentConfigWidget) { 0083 m_currentConfigWidget->setView(view); 0084 m_currentConfigWidget->setConfiguration(m_currentConfiguration); 0085 } 0086 } 0087 0088 if (m_currentFilter == 0 || m_currentConfigWidget == 0) { 0089 QLabel * labelNoConfigWidget = new QLabel(i18n("No configuration options are available for this filter"), page); 0090 v1->addWidget(labelNoConfigWidget); 0091 } 0092 else { 0093 v1->addWidget(m_currentConfigWidget); 0094 connect(m_currentConfigWidget, SIGNAL(sigConfigurationUpdated()), SLOT(slotConfigChanged())); 0095 } 0096 0097 enableButtonOk(!m_layerName->text().isEmpty()); 0098 0099 } 0100 0101 void KisDlgAdjLayerProps::slotNameChanged(const QString & text) 0102 { 0103 enableButtonOk(!text.isEmpty()); 0104 } 0105 0106 KisFilterConfigurationSP KisDlgAdjLayerProps::filterConfiguration() const 0107 { 0108 if (m_currentConfigWidget) { 0109 KisFilterConfigurationSP config = dynamic_cast<KisFilterConfiguration*>(m_currentConfigWidget->configuration().data()); 0110 if (config) { 0111 return config; 0112 } 0113 } 0114 return m_currentFilter->defaultConfiguration(KisGlobalResourcesInterface::instance()); 0115 } 0116 0117 QString KisDlgAdjLayerProps::layerName() const 0118 { 0119 return m_layerName->text(); 0120 } 0121 0122 void KisDlgAdjLayerProps::slotConfigChanged() 0123 { 0124 enableButtonOk(true); 0125 KisFilterConfigurationSP config = filterConfiguration(); 0126 if (config) { 0127 m_nodeFilterInterface->setFilter(config->cloneWithResourcesSnapshot()); 0128 } 0129 m_node->setDirty(); 0130 } 0131 0132