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"