File indexing completed on 2024-04-28 15:39:19
0001 /* 0002 SPDX-FileCopyrightText: 2022 Friedrich W. H. Kossebau <kossebau@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.1-or-later 0005 */ 0006 0007 #include "tool.hpp" 0008 0009 // own 0010 #include "loadimagejob.hpp" 0011 #include "imageselecttool.hpp" 0012 #include "widget.hpp" 0013 // core 0014 #include <scanimagerunner.hpp> 0015 #include <scanresult.hpp> 0016 // Qt 0017 #include <QImage> 0018 #include <QThreadPool> 0019 0020 namespace Kodaskanna 0021 { 0022 namespace ImageSource 0023 { 0024 0025 Tool::Tool(QObject *parent) 0026 : AbstractSourceTool(parent) 0027 , m_widget(new Widget) 0028 { 0029 } 0030 0031 Tool::~Tool() = default; 0032 0033 QWidget *Tool::widget() 0034 { 0035 return m_widget; 0036 } 0037 0038 void Tool::setOrigin(const QUrl &origin) 0039 { 0040 if (origin.isEmpty()) { 0041 if (!m_imageSelectTool) { 0042 m_imageSelectTool.reset(new ImageSelectTool(this)); 0043 m_widget->showImageSelect(m_imageSelectTool.get()); 0044 } 0045 return; 0046 } 0047 0048 m_widget->setEnabled(false); 0049 0050 auto *loadImageJob = new LoadImageJob(origin); 0051 connect(loadImageJob, &LoadImageJob::result, this, &Tool::handleImageLoadResult); 0052 0053 loadImageJob->start(); 0054 } 0055 0056 void Tool::setImage(const QImage &image) 0057 { 0058 m_widget->setImage(image); 0059 0060 auto *scanImageRunner = new ScanImageRunner(image); 0061 qRegisterMetaType<Kodaskanna::ScanResult>(); 0062 connect(scanImageRunner, &ScanImageRunner::scanFinished, this, &Tool::handleScanFinished); 0063 0064 QThreadPool::globalInstance()->start(scanImageRunner); 0065 } 0066 0067 void Tool::handleImageLoadResult(KJob *job) 0068 { 0069 m_widget->setEnabled(true); 0070 0071 auto *loadImageJob = static_cast<LoadImageJob*>(job); 0072 if (loadImageJob->error() != 0) { 0073 m_widget->showError(loadImageJob->errorString()); 0074 return; 0075 } 0076 0077 setImage(loadImageJob->image()); 0078 } 0079 0080 void Tool::handleScanFinished(const ScanResult &scanResult) 0081 { 0082 if (!scanResult.isSuccess()) { 0083 m_widget->showError(i18n("Could not scan code in the image.")); 0084 } else { 0085 m_widget->showSuccess(i18n("Code in the image successfully scanned.")); 0086 } 0087 0088 Q_EMIT scanFinished(scanResult); 0089 } 0090 0091 } 0092 }