File indexing completed on 2024-12-01 11:20:34

0001 /***************************************************************************
0002  *   Copyright (C) 2020 by Friedrich W. H. Kossebau - kossebau@kde.org     *
0003  *                                                                         *
0004  *   This program is free software; you can redistribute it and/or modify  *
0005  *   it under the terms of the GNU General Public License as published by  *
0006  *   the Free Software Foundation; either version 2 of the License, or     *
0007  *   (at your option) any later version.                                   *
0008  ***************************************************************************/
0009 
0010 #include "imageexportdlg.h"
0011 
0012 #include <KComboBox>
0013 #include <KLocalizedString>
0014 #include <KUrlRequester>
0015 
0016 #include <QCheckBox>
0017 #include <QDialogButtonBox>
0018 #include <QFormLayout>
0019 #include <QMimeDatabase>
0020 #include <QPushButton>
0021 #include <QString>
0022 #include <QVBoxLayout>
0023 
0024 ImageExportDialog::ImageExportDialog(QWidget *parent)
0025     : QDialog(parent)
0026     , m_mimeTypeNames({
0027           QStringLiteral("image/png"),
0028           QStringLiteral("image/bmp"),
0029           QStringLiteral("image/svg+xml"),
0030       })
0031 {
0032     setWindowTitle(i18n("Export As Image"));
0033     setModal(true);
0034 
0035     QVBoxLayout *layout = new QVBoxLayout;
0036     setLayout(layout);
0037 
0038     QFormLayout *formLayout = new QFormLayout;
0039 
0040     m_formatSelect = new KComboBox(this);
0041     QMimeDatabase mimeDb;
0042     for (auto &mimeTypeName : qAsConst(m_mimeTypeNames)) {
0043         m_formatSelect->addItem(mimeDb.mimeTypeForName(mimeTypeName).comment());
0044     }
0045     formLayout->addRow(i18n("Format:"), m_formatSelect);
0046 
0047     m_filePathEdit = new KUrlRequester(QUrl(), this);
0048     m_filePathEdit->setAcceptMode(QFileDialog::AcceptSave);
0049     m_filePathEdit->setMode(KFile::File | KFile::LocalOnly);
0050 
0051     formLayout->addRow(i18n("File name:"), m_filePathEdit);
0052 
0053     m_cropCheck = new QCheckBox(this);
0054     m_cropCheck->setObjectName("cropCheck");
0055     m_cropCheck->setChecked(true); // yes by default?
0056 
0057     formLayout->addRow(i18n("Crop image:"), m_cropCheck);
0058     layout->addLayout(formLayout);
0059 
0060     layout->addStretch();
0061 
0062     m_buttonBox = new QDialogButtonBox(this);
0063     m_buttonBox->setStandardButtons(QDialogButtonBox::Cancel);
0064     m_exportButton = m_buttonBox->addButton(i18n("Export"), QDialogButtonBox::AcceptRole);
0065     connect(m_buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
0066     connect(m_buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
0067     layout->addWidget(m_buttonBox);
0068 
0069     connect(m_formatSelect, QOverload<int>::of(&KComboBox::currentIndexChanged), this, &ImageExportDialog::handleFormatIndexChanged);
0070     connect(m_filePathEdit, &KUrlRequester::textChanged, this, &ImageExportDialog::updateExportButton);
0071 
0072     handleFormatIndexChanged(m_formatSelect->currentIndex());
0073 }
0074 
0075 QString ImageExportDialog::filePath() const
0076 {
0077     return m_filePathEdit->text();
0078 }
0079 
0080 QString ImageExportDialog::formatType() const
0081 {
0082     const int formatIndex = m_formatSelect->currentIndex();
0083     return (formatIndex == 0) ? QStringLiteral("PNG") : (formatIndex == 1) ? QStringLiteral("BMP") : (formatIndex == 2) ? QStringLiteral("SVG") : QString();
0084 }
0085 
0086 bool ImageExportDialog::isCropSelected() const
0087 {
0088     return m_cropCheck->isChecked();
0089 }
0090 
0091 void ImageExportDialog::handleFormatIndexChanged(int index)
0092 {
0093     m_filePathEdit->setMimeTypeFilters((index != -1) ? QStringList {m_mimeTypeNames.at(index)} : QStringList());
0094 
0095     updateExportButton();
0096 }
0097 
0098 void ImageExportDialog::updateExportButton()
0099 {
0100     const bool acceptable = !m_filePathEdit->text().isEmpty() && (m_formatSelect->currentIndex() != -1);
0101 
0102     m_exportButton->setEnabled(acceptable);
0103 }
0104 
0105 #include "moc_imageexportdlg.cpp"