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