File indexing completed on 2025-03-09 03:50:51
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2009-11-13 0007 * Description : a tool to blend bracketed images. 0008 * 0009 * SPDX-FileCopyrightText: 2009-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0010 * SPDX-FileCopyrightText: 2012-2015 by Benjamin Girault <benjamin dot girault at gmail dot com> 0011 * 0012 * SPDX-License-Identifier: GPL-2.0-or-later 0013 * 0014 * ============================================================ */ 0015 0016 #include "expoblendingmanager.h" 0017 0018 // Local includes 0019 0020 #include "expoblendingwizard.h" 0021 #include "expoblendingdlg.h" 0022 #include "expoblendingthread.h" 0023 #include "alignbinary.h" 0024 #include "enfusebinary.h" 0025 0026 namespace DigikamGenericExpoBlendingPlugin 0027 { 0028 0029 class Q_DECL_HIDDEN ExpoBlendingManager::Private 0030 { 0031 public: 0032 0033 explicit Private() 0034 : thread(nullptr), 0035 plugin(nullptr), 0036 wizard(nullptr), 0037 dlg(nullptr) 0038 { 0039 } 0040 0041 QList<QUrl> inputUrls; 0042 0043 ExpoBlendingItemUrlsMap preProcessedUrlsMap; 0044 0045 ExpoBlendingThread* thread; 0046 0047 DPlugin* plugin; 0048 0049 AlignBinary alignBinary; 0050 EnfuseBinary enfuseBinary; 0051 0052 ExpoBlendingWizard* wizard; 0053 ExpoBlendingDlg* dlg; 0054 }; 0055 0056 QPointer<ExpoBlendingManager> ExpoBlendingManager::internalPtr = QPointer<ExpoBlendingManager>(); 0057 0058 ExpoBlendingManager::ExpoBlendingManager(QObject* const parent) 0059 : QObject(parent), 0060 d(new Private) 0061 { 0062 d->thread = new ExpoBlendingThread(this); 0063 0064 connect(&d->enfuseBinary, SIGNAL(signalEnfuseVersion(double)), 0065 this, SLOT(slotSetEnfuseVersion(double))); 0066 0067 if (d->enfuseBinary.isValid()) 0068 { 0069 slotSetEnfuseVersion(d->enfuseBinary.getVersion()); 0070 } 0071 } 0072 0073 ExpoBlendingManager::~ExpoBlendingManager() 0074 { 0075 delete d->thread; 0076 delete d->wizard; 0077 delete d->dlg; 0078 delete d; 0079 } 0080 0081 ExpoBlendingManager* ExpoBlendingManager::instance() 0082 { 0083 if (ExpoBlendingManager::internalPtr.isNull()) 0084 { 0085 ExpoBlendingManager::internalPtr = new ExpoBlendingManager(); 0086 } 0087 0088 return ExpoBlendingManager::internalPtr; 0089 } 0090 0091 bool ExpoBlendingManager::isCreated() 0092 { 0093 return (!internalPtr.isNull()); 0094 } 0095 0096 bool ExpoBlendingManager::checkBinaries() 0097 { 0098 if (!d->alignBinary.recheckDirectories()) 0099 { 0100 return false; 0101 } 0102 0103 if (!d->enfuseBinary.recheckDirectories()) 0104 { 0105 return false; 0106 } 0107 0108 return true; 0109 } 0110 0111 AlignBinary& ExpoBlendingManager::alignBinary() const 0112 { 0113 return d->alignBinary; 0114 } 0115 0116 EnfuseBinary& ExpoBlendingManager::enfuseBinary() const 0117 { 0118 return d->enfuseBinary; 0119 } 0120 0121 void ExpoBlendingManager::setItemsList(const QList<QUrl>& urls) 0122 { 0123 d->inputUrls = urls; 0124 } 0125 0126 QList<QUrl>& ExpoBlendingManager::itemsList() const 0127 { 0128 return d->inputUrls; 0129 } 0130 0131 void ExpoBlendingManager::setPlugin(DPlugin* const plugin) 0132 { 0133 d->plugin = plugin; 0134 } 0135 0136 void ExpoBlendingManager::setPreProcessedMap(const ExpoBlendingItemUrlsMap& urls) 0137 { 0138 d->preProcessedUrlsMap = urls; 0139 } 0140 0141 ExpoBlendingItemUrlsMap& ExpoBlendingManager::preProcessedMap() const 0142 { 0143 return d->preProcessedUrlsMap; 0144 } 0145 0146 ExpoBlendingThread* ExpoBlendingManager::thread() const 0147 { 0148 return d->thread; 0149 } 0150 0151 void ExpoBlendingManager::run() 0152 { 0153 startWizard(); 0154 } 0155 0156 void ExpoBlendingManager::cleanUp() 0157 { 0158 d->thread->cleanUpResultFiles(); 0159 } 0160 0161 void ExpoBlendingManager::startWizard() 0162 { 0163 if (d->wizard && (d->wizard->isMinimized() || !d->wizard->isHidden())) 0164 { 0165 d->wizard->showNormal(); // krazy:exclude=qmethods 0166 d->wizard->activateWindow(); 0167 d->wizard->raise(); 0168 } 0169 else if (d->dlg && (d->dlg->isMinimized() || !d->dlg->isHidden())) 0170 { 0171 d->dlg->showNormal(); // krazy:exclude=qmethods 0172 d->dlg->activateWindow(); 0173 d->dlg->raise(); 0174 } 0175 else 0176 { 0177 delete d->wizard; 0178 delete d->dlg; 0179 d->dlg = nullptr; 0180 0181 d->wizard = new ExpoBlendingWizard(this); 0182 d->wizard->setPlugin(d->plugin); 0183 0184 connect(d->wizard, SIGNAL(accepted()), 0185 this, SLOT(slotStartDialog())); 0186 0187 d->wizard->show(); 0188 } 0189 } 0190 0191 void ExpoBlendingManager::slotStartDialog() 0192 { 0193 d->inputUrls = d->wizard->itemUrls(); 0194 0195 d->dlg = new ExpoBlendingDlg(this); 0196 d->dlg->show(); 0197 } 0198 0199 void ExpoBlendingManager::slotSetEnfuseVersion(double version) 0200 { 0201 d->thread->setEnfuseVersion(version); 0202 } 0203 0204 } // namespace DigikamGenericExpoBlendingPlugin 0205 0206 #include "moc_expoblendingmanager.cpp"