File indexing completed on 2025-03-09 03:50:15

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2008-11-28
0007  * Description : PNG image Converter batch tool.
0008  *
0009  * SPDX-FileCopyrightText: 2008-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0010  *
0011  * SPDX-License-Identifier: GPL-2.0-or-later
0012  *
0013  * ============================================================ */
0014 
0015 #include "converttopng.h"
0016 
0017 // Qt includes
0018 
0019 #include <QFileInfo>
0020 #include <QWidget>
0021 #include <QLabel>
0022 #include <QVBoxLayout>
0023 
0024 // KDE includes
0025 
0026 #include <kconfiggroup.h>
0027 #include <ksharedconfig.h>
0028 #include <klocalizedstring.h>
0029 
0030 // Local includes
0031 
0032 #include "dimg.h"
0033 #include "dimgloader.h"
0034 #include "dpluginloader.h"
0035 
0036 namespace DigikamBqmConvertToPngPlugin
0037 {
0038 
0039 ConvertToPNG::ConvertToPNG(QObject* const parent)
0040     : BatchTool(QLatin1String("ConvertToPNG"), ConvertTool, parent),
0041       m_changeSettings(true)
0042 {
0043 }
0044 
0045 ConvertToPNG::~ConvertToPNG()
0046 {
0047 }
0048 
0049 BatchTool* ConvertToPNG::clone(QObject* const parent) const
0050 {
0051     return new ConvertToPNG(parent);
0052 }
0053 
0054 void ConvertToPNG::registerSettingsWidget()
0055 {
0056     QWidget* const box               = new QWidget();
0057     QVBoxLayout* const vlay          = new QVBoxLayout(box);
0058     DImgLoaderSettings* const PNGBox = DPluginLoader::instance()->exportWidget(QLatin1String("PNG"));
0059     QLabel* const note               = new QLabel(i18n("<b>If conversion to PNG fails, this may be due to the "
0060                                                        "color profile check. Simply insert the tool for "
0061                                                        "color profile conversion before this tool and "
0062                                                        "select the desired color profile.</b>"));
0063     note->setWordWrap(true);
0064     note->setFrameStyle(QFrame::StyledPanel | QFrame::Raised);
0065 
0066     vlay->addWidget(PNGBox);
0067     vlay->addWidget(note);
0068     vlay->addStretch(10);
0069 
0070     connect(PNGBox, SIGNAL(signalSettingsChanged()),
0071             this, SLOT(slotSettingsChanged()));
0072 
0073     m_settingsWidget = box;
0074 
0075     BatchTool::registerSettingsWidget();
0076 }
0077 
0078 BatchToolSettings ConvertToPNG::defaultSettings()
0079 {
0080     KSharedConfig::Ptr config = KSharedConfig::openConfig();
0081     KConfigGroup group        = config->group(QLatin1String("ImageViewer Settings"));
0082     int compression           = group.readEntry(QLatin1String("PNGCompression"), 9);
0083     BatchToolSettings settings;
0084     settings.insert(QLatin1String("quality"), compression);
0085 
0086     return settings;
0087 }
0088 
0089 void ConvertToPNG::slotAssignSettings2Widget()
0090 {
0091     m_changeSettings = false;
0092 
0093     DImgLoaderSettings* const PNGBox = dynamic_cast<DImgLoaderSettings*>(m_settingsWidget);
0094 
0095     if (PNGBox)
0096     {
0097         DImgLoaderPrms set;
0098         set.insert(QLatin1String("quality"),  settings()[QLatin1String("quality")].toInt());
0099         PNGBox->setSettings(set);
0100     }
0101 
0102     m_changeSettings = true;
0103 }
0104 
0105 void ConvertToPNG::slotSettingsChanged()
0106 {
0107     if (m_changeSettings)
0108     {
0109         DImgLoaderSettings* const PNGBox = dynamic_cast<DImgLoaderSettings*>(m_settingsWidget);
0110 
0111         if (PNGBox)
0112         {
0113             BatchToolSettings settings;
0114             settings.insert(QLatin1String("quality"),  PNGBox->settings()[QLatin1String("quality")].toInt());
0115             BatchTool::slotSettingsChanged(settings);
0116         }
0117     }
0118 }
0119 
0120 QString ConvertToPNG::outputSuffix() const
0121 {
0122     return QLatin1String("png");
0123 }
0124 
0125 bool ConvertToPNG::toolOperations()
0126 {
0127     if (!loadToDImg())
0128     {
0129         return false;
0130     }
0131 
0132     int PNGCompression = DImgLoader::convertCompressionForLibPng(settings()[QLatin1String("quality")].toInt());
0133     image().setAttribute(QLatin1String("quality"), PNGCompression);
0134 
0135     return (savefromDImg());
0136 }
0137 
0138 } // namespace DigikamBqmConvertToPngPlugin
0139 
0140 #include "moc_converttopng.cpp"