File indexing completed on 2024-04-28 04:20:03

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 // KF
0010 #include <KLocalizedString>
0011 #include <KStandardAction>
0012 // Qt
0013 #include <QAction>
0014 #include <QDialogButtonBox>
0015 #include <QFile>
0016 #include <QFileDialog>
0017 #include <QMenu>
0018 #include <QToolButton>
0019 
0020 namespace Kodaskanna
0021 {
0022 namespace FileExport
0023 {
0024 
0025 Tool::Tool(QObject *parent)
0026     : AbstractExportTool(parent)
0027 {
0028 }
0029 
0030 Tool::~Tool() = default;
0031 
0032 void Tool::setupButtonBox(QDialogButtonBox *buttonBox)
0033 {
0034     m_saveAsMenu = new QMenu(buttonBox);
0035 
0036     m_saveTextAsAction = KStandardAction::saveAs(this, &Tool::saveTextAs, m_saveAsMenu);
0037     m_saveTextAsAction->setText(i18nc("@action", "Save Text As..."));
0038     m_saveTextAsAction->setEnabled(false);
0039 
0040     m_saveDataAsAction = new QAction(m_saveTextAsAction->icon(), i18nc("@action", "Save Data As..."), m_saveAsMenu);
0041     m_saveDataAsAction->setEnabled(false);
0042     connect(m_saveDataAsAction, &QAction::triggered, this, &Tool::saveDataAs);
0043     m_saveAsMenu->addAction(m_saveTextAsAction);
0044     m_saveAsMenu->addAction(m_saveDataAsAction);
0045 
0046     m_saveAsButton = new QToolButton(buttonBox);
0047     m_saveAsButton->setMenu(m_saveAsMenu);
0048     m_saveAsButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
0049     m_saveAsButton->setPopupMode(QToolButton::MenuButtonPopup);
0050     m_saveAsButton->setDefaultAction(m_saveTextAsAction);
0051     buttonBox->addButton(m_saveAsButton, QDialogButtonBox::ActionRole);
0052 }
0053 
0054 void Tool::setScanResult(const ScanResult &scanResult)
0055 {
0056     m_scanResult = scanResult;
0057 
0058     m_saveTextAsAction->setEnabled(m_scanResult.isSuccess());
0059     m_saveDataAsAction->setEnabled(m_scanResult.isSuccess());
0060 }
0061 
0062 void Tool::saveTextAs()
0063 {
0064     // TODO: allow select encoding
0065     const QString localFileName = QFileDialog::getSaveFileName(nullptr, i18nc("@title:window", "Save Text As"));
0066 
0067     if (localFileName.isEmpty()) {
0068         return;
0069     }
0070 
0071     QFile file(localFileName);
0072     if (!file.open(QIODevice::WriteOnly)) {
0073         // TODO: emit error
0074         return;
0075     }
0076 
0077     file.write(m_scanResult.text().toUtf8());
0078 }
0079 
0080 void Tool::saveDataAs()
0081 {
0082     const QString localFileName = QFileDialog::getSaveFileName(nullptr, i18nc("@title:window", "Save Data As"));
0083 
0084     if (localFileName.isEmpty()) {
0085         return;
0086     }
0087 
0088     QFile file(localFileName);
0089     if (!file.open(QIODevice::WriteOnly)) {
0090         // TODO: emit error
0091         return;
0092     }
0093 
0094     file.write(m_scanResult.bytes());
0095 }
0096 
0097 }
0098 }