File indexing completed on 2025-01-19 03:51:01

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2009-06-06
0007  * Description : PGF image export settings widget.
0008  *
0009  * SPDX-FileCopyrightText: 2009-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 "dimgpgfexportsettings.h"
0016 
0017 // Qt includes
0018 
0019 #include <QString>
0020 #include <QLabel>
0021 #include <QCheckBox>
0022 #include <QLayout>
0023 #include <QGridLayout>
0024 #include <QApplication>
0025 #include <QStyle>
0026 
0027 // KDE includes
0028 
0029 #include <klocalizedstring.h>
0030 
0031 // Local includes
0032 
0033 #include "dnuminput.h"
0034 
0035 namespace Digikam
0036 {
0037 
0038 class Q_DECL_HIDDEN DImgPGFExportSettings::Private
0039 {
0040 
0041 public:
0042 
0043     explicit Private()
0044       : PGFGrid            (nullptr),
0045         labelPGFcompression(nullptr),
0046         PGFLossLess        (nullptr),
0047         PGFcompression     (nullptr)
0048     {
0049     }
0050 
0051     QGridLayout*  PGFGrid;
0052 
0053     QLabel*       labelPGFcompression;
0054 
0055     QCheckBox*    PGFLossLess;
0056 
0057     DIntNumInput* PGFcompression;
0058 };
0059 
0060 DImgPGFExportSettings::DImgPGFExportSettings(QWidget* const parent)
0061     : DImgLoaderSettings(parent),
0062       d                 (new Private)
0063 {
0064     const int spacing = qMin(QApplication::style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing),
0065                              QApplication::style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing));
0066 
0067     d->PGFGrid        = new QGridLayout(this);
0068     d->PGFLossLess    = new QCheckBox(i18n("Lossless PGF files"), this);
0069 
0070     d->PGFLossLess->setWhatsThis(i18n("<p>Toggle lossless compression for PGF images.</p>"
0071                                       "<p>If this option is enabled, a lossless method will be used "
0072                                       "to compress PGF pictures.</p>"));
0073 
0074     d->PGFcompression = new DIntNumInput(this);
0075     d->PGFcompression->setDefaultValue(3);
0076     d->PGFcompression->setRange(1, 9, 1);
0077     d->labelPGFcompression = new QLabel(i18n("PGF quality:"), this);
0078 
0079     d->PGFcompression->setWhatsThis(i18n("<p>The quality value for PGF images:</p>"
0080                                          "<p><b>1</b>: high quality (no compression and "
0081                                          "large file size)<br/>"
0082                                          "<b>3</b>: good quality (default)<br/>"
0083                                          "<b>6</b>: medium quality<br/>"
0084                                          "<b>9</b>: low quality (high compression and small "
0085                                          "file size)</p>"
0086                                          "<p><b>Note: PGF is not a lossless image "
0087                                          "compression format when you use this setting.</b></p>"));
0088 
0089     d->PGFGrid->addWidget(d->PGFLossLess,         0, 0, 1, 2);
0090     d->PGFGrid->addWidget(d->labelPGFcompression, 1, 0, 1, 2);
0091     d->PGFGrid->addWidget(d->PGFcompression,      2, 0, 1, 2);
0092     d->PGFGrid->setColumnStretch(1, 10);
0093     d->PGFGrid->setRowStretch(3, 10);
0094     d->PGFGrid->setContentsMargins(spacing, spacing, spacing, spacing);
0095     d->PGFGrid->setSpacing(spacing);
0096 
0097     connect(d->PGFLossLess, SIGNAL(toggled(bool)),
0098             this, SLOT(slotTogglePGFLossLess(bool)));
0099 
0100     connect(d->PGFLossLess, SIGNAL(toggled(bool)),
0101             this, SIGNAL(signalSettingsChanged()));
0102 
0103     connect(d->PGFcompression, SIGNAL(valueChanged(int)),
0104             this, SIGNAL(signalSettingsChanged()));
0105 }
0106 
0107 DImgPGFExportSettings::~DImgPGFExportSettings()
0108 {
0109     delete d;
0110 }
0111 
0112 void DImgPGFExportSettings::setSettings(const DImgLoaderPrms& set)
0113 {
0114     for (DImgLoaderPrms::const_iterator it = set.constBegin() ; it != set.constEnd() ; ++it)
0115     {
0116         if      (it.key() == QLatin1String("quality"))
0117         {
0118             d->PGFcompression->setValue(it.value().toInt());
0119         }
0120         else if (it.key() == QLatin1String("lossless"))
0121         {
0122             d->PGFLossLess->setChecked(it.value().toBool());
0123         }
0124     }
0125 
0126     slotTogglePGFLossLess(d->PGFLossLess->isChecked());
0127 }
0128 
0129 DImgLoaderPrms DImgPGFExportSettings::settings() const
0130 {
0131     DImgLoaderPrms set;
0132     set.insert(QLatin1String("quality"),  d->PGFcompression->value());
0133     set.insert(QLatin1String("lossless"), d->PGFLossLess->isChecked());
0134 
0135     return set;
0136 }
0137 
0138 void DImgPGFExportSettings::slotTogglePGFLossLess(bool b)
0139 {
0140     d->PGFcompression->setEnabled(!b);
0141     d->labelPGFcompression->setEnabled(!b);
0142 }
0143 
0144 } // namespace Digikam
0145 
0146 #include "moc_dimgpgfexportsettings.cpp"