File indexing completed on 2024-05-12 15:58:10

0001 /*
0002  *  SPDX-FileCopyrightText: 2004, 2006-2007 Cyrille Berger <cberger@cberger.net>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "kis_base_processor.h"
0008 
0009 #include <QString>
0010 
0011 #include "kis_bookmarked_configuration_manager.h"
0012 #include "filter/kis_filter_configuration.h"
0013 #include "kis_paint_device.h"
0014 #include "kis_selection.h"
0015 #include <KisGlobalResourcesInterface.h>
0016 
0017 
0018 class KisBaseProcessorConfigurationFactory : public KisSerializableConfigurationFactory
0019 {
0020 public:
0021     KisBaseProcessorConfigurationFactory(KisBaseProcessor* _generator) : m_generator(_generator) {}
0022     ~KisBaseProcessorConfigurationFactory() override {}
0023 
0024     KisSerializableConfigurationSP createDefault() override {
0025         return m_generator->defaultConfiguration(KisGlobalResourcesInterface::instance());
0026     }
0027     KisSerializableConfigurationSP create(const QDomElement& e) override {
0028         KisSerializableConfigurationSP config = m_generator->factoryConfiguration(KisGlobalResourcesInterface::instance());
0029         config->fromXML(e);
0030         return config;
0031     }
0032 private:
0033     KisBaseProcessor* m_generator;
0034 };
0035 
0036 struct Q_DECL_HIDDEN KisBaseProcessor::Private {
0037     Private()
0038             : bookmarkManager(0)
0039             , supportsPainting(false)
0040             , supportsAdjustmentLayers(true)
0041             , supportsThreading(true)
0042             , showConfigurationWidget(true)
0043             , colorSpaceIndependence(FULLY_INDEPENDENT) {
0044     }
0045 
0046     KisBookmarkedConfigurationManager* bookmarkManager;
0047 
0048     KoID id;
0049     KoID category; // The category in the filter menu this filter fits
0050     QString entry; // the i18n'ed accelerated menu text
0051     QKeySequence shortcut;
0052     bool supportsPainting;
0053     bool supportsAdjustmentLayers;
0054     bool supportsThreading;
0055     bool showConfigurationWidget;
0056     ColorSpaceIndependence colorSpaceIndependence;
0057 };
0058 
0059 KisBaseProcessor::KisBaseProcessor(const KoID& id, const KoID & category, const QString & entry)
0060         : d(new Private)
0061 {
0062     d->id = id;
0063     d->category = category;
0064     d->entry = entry;
0065 }
0066 
0067 void KisBaseProcessor::init(const QString& configEntryGroup)
0068 {
0069     d->bookmarkManager = new KisBookmarkedConfigurationManager(configEntryGroup, new KisBaseProcessorConfigurationFactory(this));
0070 }
0071 
0072 KisBaseProcessor::~KisBaseProcessor()
0073 {
0074     delete d->bookmarkManager;
0075     delete d;
0076 }
0077 
0078 KisFilterConfigurationSP KisBaseProcessor::factoryConfiguration(KisResourcesInterfaceSP resourcesInterface) const
0079 {
0080     return new KisFilterConfiguration(id(), 1, resourcesInterface);
0081 }
0082 
0083 KisFilterConfigurationSP KisBaseProcessor::defaultConfiguration(KisResourcesInterfaceSP resourcesInterface) const
0084 {
0085     return factoryConfiguration(resourcesInterface);
0086 }
0087 
0088 KisConfigWidget * KisBaseProcessor::createConfigurationWidget(QWidget *, const KisPaintDeviceSP, bool) const
0089 {
0090     return 0;
0091 }
0092 
0093 KisBookmarkedConfigurationManager* KisBaseProcessor::bookmarkManager()
0094 {
0095     return d->bookmarkManager;
0096 }
0097 
0098 const KisBookmarkedConfigurationManager* KisBaseProcessor::bookmarkManager() const
0099 {
0100     return d->bookmarkManager;
0101 }
0102 
0103 QString KisBaseProcessor::id() const
0104 {
0105     return d->id.id();
0106 }
0107 
0108 QString KisBaseProcessor::name() const
0109 {
0110     return d->id.name();
0111 }
0112 
0113 KoID KisBaseProcessor::menuCategory() const
0114 {
0115     return d->category;
0116 }
0117 
0118 QString KisBaseProcessor::menuEntry() const
0119 {
0120     return d->entry;
0121 }
0122 
0123 QKeySequence KisBaseProcessor::shortcut() const
0124 {
0125     return d->shortcut;
0126 }
0127 
0128 void KisBaseProcessor::setShortcut(const QKeySequence & shortcut)
0129 {
0130     d->shortcut = shortcut;
0131 }
0132 
0133 bool KisBaseProcessor::supportsPainting() const
0134 {
0135     return d->supportsPainting;
0136 }
0137 
0138 bool KisBaseProcessor::supportsAdjustmentLayers() const
0139 {
0140     return d->supportsAdjustmentLayers;
0141 }
0142 
0143 bool KisBaseProcessor::supportsThreading() const
0144 {
0145     return d->supportsThreading;
0146 }
0147 
0148 ColorSpaceIndependence KisBaseProcessor::colorSpaceIndependence() const
0149 {
0150     return d->colorSpaceIndependence;
0151 }
0152 
0153 void KisBaseProcessor::setSupportsPainting(bool v)
0154 {
0155     d->supportsPainting = v;
0156 }
0157 
0158 void KisBaseProcessor::setSupportsAdjustmentLayers(bool v)
0159 {
0160     d->supportsAdjustmentLayers = v;
0161 }
0162 
0163 void KisBaseProcessor::setSupportsThreading(bool v)
0164 {
0165     d->supportsThreading = v;
0166 }
0167 
0168 void KisBaseProcessor::setColorSpaceIndependence(ColorSpaceIndependence v)
0169 {
0170     d->colorSpaceIndependence = v;
0171 }
0172 
0173 bool KisBaseProcessor::showConfigurationWidget()
0174 {
0175     return d->showConfigurationWidget;
0176 }
0177 
0178 void KisBaseProcessor::setShowConfigurationWidget(bool v)
0179 {
0180     d->showConfigurationWidget = v;
0181 }