File indexing completed on 2025-01-19 03:51:02
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2022-04-04 0007 * Description : WEBP image export settings widget. 0008 * 0009 * SPDX-FileCopyrightText: 2022 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 "dimgwebpexportsettings.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 DImgWEBPExportSettings::Private 0039 { 0040 0041 public: 0042 0043 explicit Private() 0044 : WEBPGrid (nullptr), 0045 labelWEBPcompression(nullptr), 0046 WEBPLossLess (nullptr), 0047 WEBPcompression (nullptr) 0048 { 0049 } 0050 0051 QGridLayout* WEBPGrid; 0052 0053 QLabel* labelWEBPcompression; 0054 0055 QCheckBox* WEBPLossLess; 0056 0057 DIntNumInput* WEBPcompression; 0058 }; 0059 0060 DImgWEBPExportSettings::DImgWEBPExportSettings(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->WEBPGrid = new QGridLayout(this); 0068 d->WEBPLossLess = new QCheckBox(i18n("Lossless WEBP files"), this); 0069 0070 d->WEBPLossLess->setWhatsThis(i18n("<p>Toggle lossless compression for WEBP images.</p>" 0071 "<p>If this option is enabled, a lossless method will be used " 0072 "to compress WEBP pictures.</p>")); 0073 0074 d->WEBPcompression = new DIntNumInput(this); 0075 d->WEBPcompression->setDefaultValue(75); 0076 d->WEBPcompression->setRange(1, 99, 1); 0077 d->labelWEBPcompression = new QLabel(i18n("WEBP quality:"), this); 0078 0079 d->WEBPcompression->setWhatsThis(i18n("<p>The quality value for WEB images:</p>" 0080 "<p><b>1</b>: low quality (high compression and small " 0081 "file size)<br/>" 0082 "<b>50</b>: medium quality<br/>" 0083 "<b>75</b>: good quality (default)<br/>" 0084 "<b>99</b>: high quality (no compression and " 0085 "large file size)</p>" 0086 "<p><b>Note: WEBP is not a lossless image " 0087 "compression format when you use this setting.</b></p>")); 0088 0089 d->WEBPGrid->addWidget(d->WEBPLossLess, 0, 0, 1, 2); 0090 d->WEBPGrid->addWidget(d->labelWEBPcompression, 1, 0, 1, 2); 0091 d->WEBPGrid->addWidget(d->WEBPcompression, 2, 0, 1, 2); 0092 d->WEBPGrid->setColumnStretch(1, 10); 0093 d->WEBPGrid->setRowStretch(3, 10); 0094 d->WEBPGrid->setContentsMargins(spacing, spacing, spacing, spacing); 0095 d->WEBPGrid->setSpacing(spacing); 0096 0097 connect(d->WEBPLossLess, SIGNAL(toggled(bool)), 0098 this, SLOT(slotToggleWEBPLossLess(bool))); 0099 0100 connect(d->WEBPLossLess, SIGNAL(toggled(bool)), 0101 this, SIGNAL(signalSettingsChanged())); 0102 0103 connect(d->WEBPcompression, SIGNAL(valueChanged(int)), 0104 this, SIGNAL(signalSettingsChanged())); 0105 } 0106 0107 DImgWEBPExportSettings::~DImgWEBPExportSettings() 0108 { 0109 delete d; 0110 } 0111 0112 void DImgWEBPExportSettings::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->WEBPcompression->setValue(it.value().toInt()); 0119 } 0120 else if (it.key() == QLatin1String("lossless")) 0121 { 0122 d->WEBPLossLess->setChecked(it.value().toBool()); 0123 } 0124 } 0125 0126 slotToggleWEBPLossLess(d->WEBPLossLess->isChecked()); 0127 } 0128 0129 DImgLoaderPrms DImgWEBPExportSettings::settings() const 0130 { 0131 DImgLoaderPrms set; 0132 0133 // NOTE: if quality = 100 --> lossless compression. 0134 0135 set.insert(QLatin1String("quality"), d->WEBPLossLess->isChecked() ? 100 : d->WEBPcompression->value()); 0136 set.insert(QLatin1String("lossless"), d->WEBPLossLess->isChecked()); 0137 0138 return set; 0139 } 0140 0141 void DImgWEBPExportSettings::slotToggleWEBPLossLess(bool b) 0142 { 0143 d->WEBPcompression->setEnabled(!b); 0144 d->labelWEBPcompression->setEnabled(!b); 0145 } 0146 0147 } // namespace Digikam 0148 0149 #include "moc_dimgwebpexportsettings.cpp"