File indexing completed on 2025-03-09 03:58:52

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2009-02-21
0007  * Description : a view to show Queue Settings.
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 "queuesettingsview.h"
0016 
0017 // Qt includes
0018 
0019 #include <QButtonGroup>
0020 #include <QGroupBox>
0021 #include <QLabel>
0022 #include <QRadioButton>
0023 #include <QCheckBox>
0024 #include <QTimer>
0025 #include <QTreeWidget>
0026 #include <QVBoxLayout>
0027 #include <QApplication>
0028 #include <QStyle>
0029 #include <QIcon>
0030 
0031 // KDE includes
0032 
0033 #include <klocalizedstring.h>
0034 
0035 // Local includes
0036 
0037 #include "dlayoutbox.h"
0038 #include "advancedrenamewidget.h"
0039 #include "defaultrenameparser.h"
0040 #include "album.h"
0041 #include "albumselectwidget.h"
0042 #include "batchtool.h"
0043 #include "queuesettings.h"
0044 #include "dpluginloader.h"
0045 #include "drawdecoderwidget.h"
0046 #include "filesaveconflictbox.h"
0047 
0048 namespace Digikam
0049 {
0050 
0051 class Q_DECL_HIDDEN QueueSettingsView::Private
0052 {
0053 public:
0054 
0055     enum SettingsTabs
0056     {
0057         TARGET = 0,
0058         RENAMING,
0059         BEHAVIOR,
0060         RAW,
0061         SAVE
0062     };
0063 
0064 public:
0065 
0066     explicit Private()
0067       : rawLoadingLabel         (nullptr),
0068         renamingButtonGroup     (nullptr),
0069         rawLoadingButtonGroup   (nullptr),
0070         renameOriginal          (nullptr),
0071         renameManual            (nullptr),
0072         extractJPEGButton       (nullptr),
0073         demosaicingButton       (nullptr),
0074         useOrgAlbum             (nullptr),
0075         asNewVersion            (nullptr),
0076         useMutiCoreCPU          (nullptr),
0077         conflictBox             (nullptr),
0078         albumSel                (nullptr),
0079         advancedRenameManager   (nullptr),
0080         advancedRenameWidget    (nullptr),
0081         rawSettings             (nullptr),
0082         jpgSettings             (nullptr),
0083         pngSettings             (nullptr),
0084         tifSettings             (nullptr),
0085 
0086 #ifdef HAVE_JASPER
0087 
0088         j2kSettings             (nullptr),
0089 
0090 #endif // HAVE_JASPER
0091 
0092 #ifdef HAVE_X265
0093 
0094         heifSettings            (nullptr),
0095 
0096 #endif // HAVE_X265
0097 
0098         pgfSettings             (nullptr),
0099         jxlSettings             (nullptr),
0100         webpSettings            (nullptr),
0101         avifSettings            (nullptr)
0102     {
0103     }
0104 
0105     QLabel*                rawLoadingLabel;
0106 
0107     QButtonGroup*          renamingButtonGroup;
0108     QButtonGroup*          rawLoadingButtonGroup;
0109 
0110     QRadioButton*          renameOriginal;
0111     QRadioButton*          renameManual;
0112     QRadioButton*          extractJPEGButton;
0113     QRadioButton*          demosaicingButton;
0114 
0115     QCheckBox*             useOrgAlbum;
0116     QCheckBox*             asNewVersion;
0117     QCheckBox*             useMutiCoreCPU;
0118 
0119     FileSaveConflictBox*   conflictBox;
0120     AlbumSelectWidget*     albumSel;
0121 
0122     AdvancedRenameManager* advancedRenameManager;
0123     AdvancedRenameWidget*  advancedRenameWidget;
0124 
0125     DRawDecoderWidget*     rawSettings;
0126 
0127     DImgLoaderSettings*    jpgSettings;
0128     DImgLoaderSettings*    pngSettings;
0129     DImgLoaderSettings*    tifSettings;
0130 
0131 #ifdef HAVE_JASPER
0132 
0133     DImgLoaderSettings*    j2kSettings;
0134 
0135 #endif // HAVE_JASPER
0136 
0137 #ifdef HAVE_X265
0138 
0139     DImgLoaderSettings*    heifSettings;
0140 
0141 #endif // HAVE_X265
0142 
0143     DImgLoaderSettings*    pgfSettings;
0144     DImgLoaderSettings*    jxlSettings;
0145     DImgLoaderSettings*    webpSettings;
0146     DImgLoaderSettings*    avifSettings;
0147 };
0148 
0149 QueueSettingsView::QueueSettingsView(QWidget* const parent)
0150     : QTabWidget(parent),
0151       d         (new Private)
0152 {
0153     setTabsClosable(false);
0154 
0155     // --------------------------------------------------------
0156 
0157     const int spacing = qMin(QApplication::style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing),
0158                              QApplication::style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing));
0159 
0160     QScrollArea* const sv3   = new QScrollArea(this);
0161     DVBox* const vbox3       = new DVBox(sv3->viewport());
0162     sv3->setWidget(vbox3);
0163     sv3->setWidgetResizable(true);
0164     vbox3->setContentsMargins(spacing, spacing, spacing, spacing);
0165     vbox3->setSpacing(spacing);
0166 
0167     d->useOrgAlbum           = new QCheckBox(i18n("Use original Album"), vbox3);
0168     d->albumSel              = new AlbumSelectWidget(vbox3);
0169     insertTab(Private::TARGET, sv3, QIcon::fromTheme(QLatin1String("folder-pictures")), i18n("Target"));
0170 
0171     // --------------------------------------------------------
0172 
0173     QScrollArea* const sv2   = new QScrollArea(this);
0174     DVBox* const vbox2       = new DVBox(sv2->viewport());
0175     sv2->setWidget(vbox2);
0176     sv2->setWidgetResizable(true);
0177 
0178     d->renamingButtonGroup   = new QButtonGroup(vbox2);
0179     d->renameOriginal        = new QRadioButton(i18n("Use original filenames"), vbox2);
0180     d->renameOriginal->setWhatsThis(i18n("Turn on this option to use original "
0181                                          "filenames without modifications."));
0182 
0183     d->renameManual          = new QRadioButton(i18n("Customize filenames:"), vbox2);
0184 
0185     d->advancedRenameWidget  = new AdvancedRenameWidget(vbox2);
0186     d->advancedRenameManager = new AdvancedRenameManager();
0187     d->advancedRenameManager->setWidget(d->advancedRenameWidget);
0188 
0189     QWidget* const space     = new QWidget(vbox2);
0190 
0191     d->renamingButtonGroup->setExclusive(true);
0192     d->renamingButtonGroup->addButton(d->renameOriginal, QueueSettings::USEORIGINAL);
0193     d->renamingButtonGroup->addButton(d->renameManual,   QueueSettings::CUSTOMIZE);
0194 
0195     vbox2->setStretchFactor(space, 10);
0196     vbox2->setContentsMargins(spacing, spacing, spacing, spacing);
0197     vbox2->setSpacing(spacing);
0198 
0199     insertTab(Private::RENAMING, sv2, QIcon::fromTheme(QLatin1String("insert-image")), i18n("File Renaming"));
0200 
0201     // --------------------------------------------------------
0202 
0203     QScrollArea* const sv     = new QScrollArea(this);
0204     QWidget* const panel      = new QWidget(sv->viewport());
0205     QVBoxLayout* const layout = new QVBoxLayout(panel);
0206     sv->setWidget(panel);
0207     sv->setWidgetResizable(true);
0208 
0209     // --------------------------------------------------------
0210 
0211     d->rawLoadingLabel           = new QLabel(i18n("Raw Files Loading:"), panel);
0212     QWidget* const rawLoadingBox = new QWidget(panel);
0213     QVBoxLayout* const vlay2     = new QVBoxLayout(rawLoadingBox);
0214     d->rawLoadingButtonGroup     = new QButtonGroup(rawLoadingBox);
0215     d->demosaicingButton         = new QRadioButton(i18n("Perform RAW demosaicing"),           rawLoadingBox);
0216     d->extractJPEGButton         = new QRadioButton(i18n("Extract embedded preview (faster)"), rawLoadingBox);
0217     d->rawLoadingButtonGroup->addButton(d->extractJPEGButton, QueueSettings::USEEMBEDEDJPEG);
0218     d->rawLoadingButtonGroup->addButton(d->demosaicingButton, QueueSettings::DEMOSAICING);
0219     d->rawLoadingButtonGroup->setExclusive(true);
0220     d->demosaicingButton->setChecked(true);
0221 
0222     vlay2->addWidget(d->demosaicingButton);
0223     vlay2->addWidget(d->extractJPEGButton);
0224     vlay2->setContentsMargins(QMargins());
0225     vlay2->setSpacing(0);
0226 
0227     // -------------
0228 
0229     d->conflictBox    = new FileSaveConflictBox(panel, true);
0230 
0231     d->asNewVersion   = new QCheckBox(i18nc("@option:check", "Save image as a newly created branch"), panel);
0232     d->asNewVersion->setWhatsThis(i18n("Turn on this option to save the current modifications "
0233                                        "to a new version of the file"));
0234 
0235     d->useMutiCoreCPU = new QCheckBox(i18nc("@option:check", "Work on all processor cores"), panel);
0236     d->useMutiCoreCPU->setWhatsThis(i18n("Turn on this option to use all CPU core from your computer "
0237                                          "to process more than one item from a queue at the same time."));
0238     // -------------
0239 
0240     layout->addWidget(d->rawLoadingLabel);
0241     layout->addWidget(rawLoadingBox);
0242     layout->addWidget(d->conflictBox);
0243     layout->addWidget(d->asNewVersion);
0244     layout->addWidget(d->useMutiCoreCPU);
0245     layout->setContentsMargins(spacing, spacing, spacing, spacing);
0246     layout->setSpacing(spacing);
0247     layout->addStretch();
0248 
0249     insertTab(Private::BEHAVIOR, sv, QIcon::fromTheme(QLatin1String("dialog-information")), i18n("Behavior"));
0250 
0251     // --------------------------------------------------------
0252 
0253     d->rawSettings = new DRawDecoderWidget(panel, DRawDecoderWidget::SIXTEENBITS | DRawDecoderWidget::COLORSPACE);
0254     d->rawSettings->setItemIcon(0, QIcon::fromTheme(QLatin1String("image-x-adobe-dng")));
0255     d->rawSettings->setItemIcon(1, QIcon::fromTheme(QLatin1String("bordertool")));
0256     d->rawSettings->setItemIcon(2, QIcon::fromTheme(QLatin1String("zoom-draw")));
0257 
0258     insertTab(Private::RAW, d->rawSettings, QIcon::fromTheme(QLatin1String("image-x-adobe-dng")), i18n("Raw Decoding"));
0259 
0260     // --------------------------------------------------------
0261 
0262     QScrollArea* const sv4       = new QScrollArea(this);
0263     QWidget* const spanel        = new QWidget(sv4->viewport());
0264     QVBoxLayout* const slay      = new QVBoxLayout(spanel);
0265     sv4->setWidget(spanel);
0266     sv4->setWidgetResizable(true);
0267     DPluginLoader* const ploader = DPluginLoader::instance();
0268 
0269     d->jpgSettings               = ploader->exportWidget(QLatin1String("JPEG"));
0270 
0271     if (d->jpgSettings)
0272     {
0273         QGroupBox* const  box1   = new QGroupBox;
0274         QVBoxLayout* const lbox1 = new QVBoxLayout;
0275         d->jpgSettings->setParent(this);
0276         lbox1->addWidget(d->jpgSettings);
0277         box1->setLayout(lbox1);
0278         slay->addWidget(box1);
0279     }
0280 
0281     d->pngSettings               = ploader->exportWidget(QLatin1String("PNG"));
0282 
0283     if (d->pngSettings)
0284     {
0285         QGroupBox* const  box2   = new QGroupBox;
0286         QVBoxLayout* const lbox2 = new QVBoxLayout;
0287         d->pngSettings->setParent(this);;
0288         lbox2->addWidget(d->pngSettings);
0289         box2->setLayout(lbox2);
0290         slay->addWidget(box2);
0291     }
0292 
0293     d->tifSettings               = ploader->exportWidget(QLatin1String("TIFF"));
0294 
0295     if (d->tifSettings)
0296     {
0297         QGroupBox* const  box3   = new QGroupBox;
0298         QVBoxLayout* const lbox3 = new QVBoxLayout;
0299         d->tifSettings->setParent(this);
0300         lbox3->addWidget(d->tifSettings);
0301         box3->setLayout(lbox3);
0302         slay->addWidget(box3);
0303     }
0304 
0305 #ifdef HAVE_JASPER
0306 
0307     d->j2kSettings               = ploader->exportWidget(QLatin1String("JP2"));
0308 
0309     if (d->j2kSettings)
0310     {
0311         QGroupBox* const  box4   = new QGroupBox;
0312         QVBoxLayout* const lbox4 = new QVBoxLayout;
0313         d->j2kSettings->setParent(this);
0314         lbox4->addWidget(d->j2kSettings);
0315         box4->setLayout(lbox4);
0316         slay->addWidget(box4);
0317     }
0318 
0319 #endif // HAVE_JASPER
0320 
0321     d->pgfSettings               = ploader->exportWidget(QLatin1String("PGF"));
0322 
0323     if (d->pgfSettings)
0324     {
0325         QGroupBox* const  box5   = new QGroupBox;
0326         QVBoxLayout* const lbox5 = new QVBoxLayout;
0327         d->pgfSettings->setParent(this);
0328         lbox5->addWidget(d->pgfSettings);
0329         box5->setLayout(lbox5);
0330         slay->addWidget(box5);
0331     }
0332 
0333 #ifdef HAVE_X265
0334 
0335     d->heifSettings              = ploader->exportWidget(QLatin1String("HEIF"));
0336 
0337     if (d->heifSettings)
0338     {
0339         QGroupBox* const  box6   = new QGroupBox;
0340         QVBoxLayout* const lbox6 = new QVBoxLayout;
0341         d->heifSettings->setParent(this);
0342         lbox6->addWidget(d->heifSettings);
0343         box6->setLayout(lbox6);
0344         slay->addWidget(box6);
0345     }
0346 
0347 #endif // HAVE_X265
0348 
0349     d->jxlSettings               = ploader->exportWidget(QLatin1String("JXL"));
0350 
0351     if (d->jxlSettings)
0352     {
0353         QGroupBox* const  box7   = new QGroupBox;
0354         QVBoxLayout* const lbox7 = new QVBoxLayout;
0355         d->jxlSettings->setParent(this);
0356         lbox7->addWidget(d->jxlSettings);
0357         box7->setLayout(lbox7);
0358         slay->addWidget(box7);
0359     }
0360 
0361     d->webpSettings              = ploader->exportWidget(QLatin1String("WEBP"));
0362 
0363     if (d->webpSettings)
0364     {
0365         QGroupBox* const  box8   = new QGroupBox;
0366         QVBoxLayout* const lbox8 = new QVBoxLayout;
0367         d->webpSettings->setParent(this);
0368         lbox8->addWidget(d->webpSettings);
0369         box8->setLayout(lbox8);
0370         slay->addWidget(box8);
0371     }
0372 
0373     d->avifSettings              = ploader->exportWidget(QLatin1String("AVIF"));
0374 
0375     if (d->avifSettings)
0376     {
0377         QGroupBox* const  box9   = new QGroupBox;
0378         QVBoxLayout* const lbox9 = new QVBoxLayout;
0379         d->avifSettings->setParent(this);
0380         lbox9->addWidget(d->avifSettings);
0381         box9->setLayout(lbox9);
0382         slay->addWidget(box9);
0383     }
0384 
0385     slay->setContentsMargins(spacing, spacing, spacing, spacing);
0386     slay->setSpacing(spacing);
0387     slay->addStretch();
0388 
0389     insertTab(Private::SAVE, sv4, QIcon::fromTheme(QLatin1String("document-save-all")), i18n("Saving Images"));
0390 
0391     // --------------------------------------------------------
0392 
0393     connect(d->useOrgAlbum, SIGNAL(toggled(bool)),
0394             this, SLOT(slotUseOrgAlbum()));
0395 
0396     connect(d->asNewVersion, SIGNAL(toggled(bool)),
0397             this, SLOT(slotSettingsChanged()));
0398 
0399     connect(d->useMutiCoreCPU, SIGNAL(toggled(bool)),
0400             this, SLOT(slotSettingsChanged()));
0401 
0402     connect(d->albumSel, SIGNAL(itemSelectionChanged()),
0403             this, SLOT(slotSettingsChanged()));
0404 
0405 #if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
0406 
0407     connect(d->renamingButtonGroup, SIGNAL(idClicked(int)),
0408             this, SLOT(slotSettingsChanged()));
0409 
0410     connect(d->rawLoadingButtonGroup, SIGNAL(idClicked(int)),
0411             this, SLOT(slotSettingsChanged()));
0412 
0413 #else
0414 
0415     connect(d->renamingButtonGroup, SIGNAL(buttonClicked(int)),
0416             this, SLOT(slotSettingsChanged()));
0417 
0418     connect(d->rawLoadingButtonGroup, SIGNAL(buttonClicked(int)),
0419             this, SLOT(slotSettingsChanged()));
0420 
0421 #endif
0422 
0423     connect(d->conflictBox, SIGNAL(signalConflictButtonChanged(int)),
0424             this, SLOT(slotSettingsChanged()));
0425 
0426 
0427     connect(d->advancedRenameWidget, SIGNAL(signalTextChanged(QString)),
0428             this, SLOT(slotSettingsChanged()));
0429 
0430     connect(d->rawSettings, SIGNAL(signalSettingsChanged()),
0431             this, SLOT(slotSettingsChanged()));
0432 
0433     connect(d->jpgSettings, SIGNAL(signalSettingsChanged()),
0434             this, SLOT(slotSettingsChanged()));
0435 
0436     connect(d->pngSettings, SIGNAL(signalSettingsChanged()),
0437             this, SLOT(slotSettingsChanged()));
0438 
0439     connect(d->tifSettings, SIGNAL(signalSettingsChanged()),
0440             this, SLOT(slotSettingsChanged()));
0441 
0442 #ifdef HAVE_JASPER
0443 
0444     connect(d->j2kSettings, SIGNAL(signalSettingsChanged()),
0445             this, SLOT(slotSettingsChanged()));
0446 
0447 #endif // HAVE_JASPER
0448 
0449 #ifdef HAVE_X265
0450 
0451     connect(d->heifSettings, SIGNAL(signalSettingsChanged()),
0452             this, SLOT(slotSettingsChanged()));
0453 
0454 #endif // HAVE_X265
0455 
0456     connect(d->pgfSettings, SIGNAL(signalSettingsChanged()),
0457             this, SLOT(slotSettingsChanged()));
0458 
0459     connect(d->jxlSettings, SIGNAL(signalSettingsChanged()),
0460             this, SLOT(slotSettingsChanged()));
0461 
0462     connect(d->webpSettings, SIGNAL(signalSettingsChanged()),
0463             this, SLOT(slotSettingsChanged()));
0464 
0465     connect(d->avifSettings, SIGNAL(signalSettingsChanged()),
0466             this, SLOT(slotSettingsChanged()));
0467 
0468     // --------------------------------------------------------
0469 
0470     QTimer::singleShot(0, this, SLOT(slotResetSettings()));
0471 }
0472 
0473 QueueSettingsView::~QueueSettingsView()
0474 {
0475     delete d->advancedRenameManager;
0476     delete d;
0477 }
0478 
0479 void QueueSettingsView::setBusy(bool b)
0480 {
0481     for (int i = 0 ; i < count() ; ++i)
0482     {
0483         widget(i)->setEnabled(!b);
0484     }
0485 }
0486 
0487 void QueueSettingsView::slotUseOrgAlbum()
0488 {
0489     if (!d->useOrgAlbum->isChecked())
0490     {
0491         PAlbum* const album = AlbumManager::instance()->currentPAlbum();
0492 
0493         if (album)
0494         {
0495             blockSignals(true);
0496             d->albumSel->setCurrentAlbum(album);
0497             blockSignals(false);
0498         }
0499     }
0500 
0501     slotSettingsChanged();
0502 }
0503 
0504 void QueueSettingsView::slotResetSettings()
0505 {
0506     DImgLoaderPrms set;
0507 
0508     blockSignals(true);
0509     d->useOrgAlbum->setChecked(true);
0510     d->asNewVersion->setChecked(true);
0511     d->useMutiCoreCPU->setChecked(false);
0512 
0513     // TODO: reset d->albumSel
0514 
0515     d->renamingButtonGroup->button(QueueSettings::USEORIGINAL)->setChecked(true);
0516     d->conflictBox->setConflictRule(FileSaveConflictBox::DIFFNAME);
0517     d->rawLoadingButtonGroup->button(QueueSettings::DEMOSAICING)->setChecked(true);
0518     d->advancedRenameWidget->clearParseString();
0519     d->rawSettings->resetToDefault();
0520 
0521     QueueSettings settings;
0522 
0523     if (d->jpgSettings)
0524     {
0525         set.clear();
0526         set.insert(QLatin1String("quality"),     settings.ioFileSettings.JPEGCompression);
0527         set.insert(QLatin1String("subsampling"), settings.ioFileSettings.JPEGSubSampling);
0528         d->jpgSettings->setSettings(set);
0529     }
0530 
0531     // ---
0532 
0533     if (d->pngSettings)
0534     {
0535         set.clear();
0536         set.insert(QLatin1String("quality"),  settings.ioFileSettings.PNGCompression);
0537         d->pngSettings->setSettings(set);
0538     }
0539 
0540     // ---
0541 
0542     if (d->tifSettings)
0543     {
0544         set.clear();
0545         set.insert(QLatin1String("compress"),  settings.ioFileSettings.TIFFCompression);
0546         d->tifSettings->setSettings(set);
0547     }
0548 
0549 #ifdef HAVE_JASPER
0550 
0551     if (d->j2kSettings)
0552     {
0553         set.clear();
0554         set.insert(QLatin1String("quality"),  settings.ioFileSettings.JPEG2000Compression);
0555         set.insert(QLatin1String("lossless"), settings.ioFileSettings.JPEG2000LossLess);
0556         d->j2kSettings->setSettings(set);
0557     }
0558 
0559 #endif // HAVE_JASPER
0560 
0561     if (d->pgfSettings)
0562     {
0563         set.clear();
0564         set.insert(QLatin1String("quality"),  settings.ioFileSettings.PGFCompression);
0565         set.insert(QLatin1String("lossless"), settings.ioFileSettings.PGFLossLess);
0566         d->pgfSettings->setSettings(set);
0567     }
0568 
0569 #ifdef HAVE_X265
0570 
0571     if (d->heifSettings)
0572     {
0573         set.clear();
0574         set.insert(QLatin1String("quality"),  settings.ioFileSettings.HEIFCompression);
0575         set.insert(QLatin1String("lossless"), settings.ioFileSettings.HEIFLossLess);
0576         d->heifSettings->setSettings(set);
0577     }
0578 
0579 #endif // HAVE_X265
0580 
0581     if (d->jxlSettings)
0582     {
0583         set.clear();
0584         set.insert(QLatin1String("quality"),  settings.ioFileSettings.JXLCompression);
0585         set.insert(QLatin1String("lossless"), settings.ioFileSettings.JXLLossLess);
0586         d->jxlSettings->setSettings(set);
0587     }
0588 
0589     if (d->webpSettings)
0590     {
0591         set.clear();
0592         set.insert(QLatin1String("quality"),  settings.ioFileSettings.WEBPCompression);
0593         set.insert(QLatin1String("lossless"), settings.ioFileSettings.WEBPLossLess);
0594         d->webpSettings->setSettings(set);
0595     }
0596 
0597     if (d->avifSettings)
0598     {
0599         set.clear();
0600         set.insert(QLatin1String("quality"),  settings.ioFileSettings.AVIFCompression);
0601         set.insert(QLatin1String("lossless"), settings.ioFileSettings.AVIFLossLess);
0602         d->avifSettings->setSettings(set);
0603     }
0604 
0605     blockSignals(false);
0606     slotSettingsChanged();
0607 }
0608 
0609 void QueueSettingsView::slotQueueSelected(int, const QueueSettings& settings, const AssignedBatchTools&)
0610 {
0611     DImgLoaderPrms set;
0612 
0613     d->useOrgAlbum->setChecked(settings.useOrgAlbum);
0614     d->asNewVersion->setChecked(settings.saveAsNewVersion);
0615     d->useMutiCoreCPU->setChecked(settings.useMultiCoreCPU);
0616     d->albumSel->setEnabled(!settings.useOrgAlbum);
0617     d->albumSel->setCurrentAlbumUrl(settings.workingUrl);
0618 
0619     int btn = (int)settings.renamingRule;
0620     d->renamingButtonGroup->button(btn)->setChecked(true);
0621 
0622     d->conflictBox->setConflictRule(settings.conflictRule);
0623 
0624     btn     = (int)settings.rawLoadingRule;
0625     d->rawLoadingButtonGroup->button(btn)->setChecked(true);
0626 
0627     d->advancedRenameWidget->setParseString(settings.renamingParser);
0628 
0629     d->rawSettings->setSettings(settings.rawDecodingSettings);
0630 
0631     // ---
0632 
0633     set.clear();
0634     set.insert(QLatin1String("quality"),     settings.ioFileSettings.JPEGCompression);
0635     set.insert(QLatin1String("subsampling"), settings.ioFileSettings.JPEGSubSampling);
0636     d->jpgSettings->setSettings(set);
0637 
0638     // ---
0639 
0640     set.clear();
0641     set.insert(QLatin1String("quality"),  settings.ioFileSettings.PNGCompression);
0642     d->pngSettings->setSettings(set);
0643 
0644     // ---
0645 
0646     set.clear();
0647     set.insert(QLatin1String("compress"),  settings.ioFileSettings.TIFFCompression);
0648     d->tifSettings->setSettings(set);
0649 
0650 #ifdef HAVE_JASPER
0651 
0652     set.clear();
0653     set.insert(QLatin1String("quality"),  settings.ioFileSettings.JPEG2000Compression);
0654     set.insert(QLatin1String("lossless"), settings.ioFileSettings.JPEG2000LossLess);
0655     d->j2kSettings->setSettings(set);
0656 
0657 #endif // HAVE_JASPER
0658 
0659     set.clear();
0660     set.insert(QLatin1String("quality"),  settings.ioFileSettings.PGFCompression);
0661     set.insert(QLatin1String("lossless"), settings.ioFileSettings.PGFLossLess);
0662     d->pgfSettings->setSettings(set);
0663 
0664 #ifdef HAVE_X265
0665 
0666     set.clear();
0667     set.insert(QLatin1String("quality"),  settings.ioFileSettings.HEIFCompression);
0668     set.insert(QLatin1String("lossless"), settings.ioFileSettings.HEIFLossLess);
0669     d->heifSettings->setSettings(set);
0670 
0671 #endif // HAVE_X265
0672 
0673     if (d->jxlSettings)
0674     {
0675         set.clear();
0676         set.insert(QLatin1String("quality"),  settings.ioFileSettings.JXLCompression);
0677         set.insert(QLatin1String("lossless"), settings.ioFileSettings.JXLLossLess);
0678         d->jxlSettings->setSettings(set);
0679     }
0680 
0681     if (d->webpSettings)
0682     {
0683         set.clear();
0684         set.insert(QLatin1String("quality"),  settings.ioFileSettings.WEBPCompression);
0685         set.insert(QLatin1String("lossless"), settings.ioFileSettings.WEBPLossLess);
0686         d->webpSettings->setSettings(set);
0687     }
0688 
0689     if (d->avifSettings)
0690     {
0691         set.clear();
0692         set.insert(QLatin1String("quality"),  settings.ioFileSettings.AVIFCompression);
0693         set.insert(QLatin1String("lossless"), settings.ioFileSettings.AVIFLossLess);
0694         d->avifSettings->setSettings(set);
0695     }
0696 }
0697 
0698 void QueueSettingsView::slotSettingsChanged()
0699 {
0700     QueueSettings settings;
0701 
0702     d->albumSel->setEnabled(!d->useOrgAlbum->isChecked());
0703     settings.useOrgAlbum         = d->useOrgAlbum->isChecked();
0704     settings.saveAsNewVersion    = d->asNewVersion->isChecked();
0705     settings.useMultiCoreCPU     = d->useMutiCoreCPU->isChecked();
0706     settings.workingUrl          = d->albumSel->currentAlbumUrl();
0707 
0708     settings.renamingRule        = (QueueSettings::RenamingRule)d->renamingButtonGroup->checkedId();
0709     settings.renamingParser      = d->advancedRenameWidget->parseString();
0710     d->advancedRenameWidget->setEnabled(settings.renamingRule == QueueSettings::CUSTOMIZE);
0711 
0712     settings.conflictRule        = d->conflictBox->conflictRule();
0713 
0714     settings.rawLoadingRule      = (QueueSettings::RawLoadingRule)d->rawLoadingButtonGroup->checkedId();
0715     setTabEnabled(Private::RAW, (settings.rawLoadingRule == QueueSettings::DEMOSAICING));
0716 
0717     settings.rawDecodingSettings = d->rawSettings->settings();
0718 
0719     // ---
0720 
0721     if (d->jpgSettings)
0722     {
0723         settings.ioFileSettings.JPEGCompression     = d->jpgSettings->settings()[QLatin1String("quality")].toInt();
0724         settings.ioFileSettings.JPEGSubSampling     = d->jpgSettings->settings()[QLatin1String("subsampling")].toInt();
0725     }
0726 
0727     // ---
0728 
0729     if (d->pngSettings)
0730     {
0731         settings.ioFileSettings.PNGCompression      = d->pngSettings->settings()[QLatin1String("quality")].toInt();
0732     }
0733 
0734     // ---
0735 
0736     if (d->tifSettings)
0737     {
0738         settings.ioFileSettings.TIFFCompression     = d->tifSettings->settings()[QLatin1String("compress")].toBool();
0739     }
0740 
0741 #ifdef HAVE_JASPER
0742 
0743     if (d->j2kSettings)
0744     {
0745         settings.ioFileSettings.JPEG2000Compression = d->j2kSettings->settings()[QLatin1String("quality")].toInt();
0746         settings.ioFileSettings.JPEG2000LossLess    = d->j2kSettings->settings()[QLatin1String("lossless")].toBool();
0747     }
0748 
0749 #endif // HAVE_JASPER
0750 
0751     if (d->pgfSettings)
0752     {
0753         settings.ioFileSettings.PGFCompression      = d->pgfSettings->settings()[QLatin1String("quality")].toInt();
0754         settings.ioFileSettings.PGFLossLess         = d->pgfSettings->settings()[QLatin1String("lossless")].toBool();
0755     }
0756 
0757 #ifdef HAVE_X265
0758 
0759     if (d->heifSettings)
0760     {
0761         settings.ioFileSettings.HEIFCompression     = d->heifSettings->settings()[QLatin1String("quality")].toInt();
0762         settings.ioFileSettings.HEIFLossLess        = d->heifSettings->settings()[QLatin1String("lossless")].toBool();
0763     }
0764 
0765 #endif // HAVE_X265
0766 
0767     if (d->jxlSettings)
0768     {
0769         settings.ioFileSettings.JXLCompression  = d->jxlSettings->settings()[QLatin1String("quality")].toInt();
0770         settings.ioFileSettings.JXLLossLess     = d->jxlSettings->settings()[QLatin1String("lossless")].toBool();
0771     }
0772 
0773     if (d->webpSettings)
0774     {
0775         settings.ioFileSettings.WEBPCompression  = d->webpSettings->settings()[QLatin1String("quality")].toInt();
0776         settings.ioFileSettings.WEBPLossLess     = d->webpSettings->settings()[QLatin1String("lossless")].toBool();
0777     }
0778 
0779     if (d->avifSettings)
0780     {
0781         settings.ioFileSettings.AVIFCompression = d->avifSettings->settings()[QLatin1String("quality")].toInt();
0782         settings.ioFileSettings.AVIFLossLess    = d->avifSettings->settings()[QLatin1String("lossless")].toBool();
0783     }
0784 
0785     Q_EMIT signalSettingsChanged(settings);
0786 }
0787 
0788 } // namespace Digikam
0789 
0790 #include "moc_queuesettingsview.cpp"