1 /*
2    SPDX-FileCopyrightText: 2013-2021 Laurent Montel <montel@kde.org>
3 
4    SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #include "imagescalingselectformat.h"
8 
9 #include <KLocalizedString>
10 #include <QLineEdit>
11 #include <QPushButton>
12 
13 #include <QDialogButtonBox>
14 #include <QHBoxLayout>
15 #include <QListWidget>
16 #include <QPointer>
17 #include <QVBoxLayout>
18 
19 using namespace MessageComposer;
20 
ImageScalingSelectFormatDialog(QWidget * parent)21 ImageScalingSelectFormatDialog::ImageScalingSelectFormatDialog(QWidget *parent)
22     : QDialog(parent)
23 {
24     setWindowTitle(i18nc("@title:window", "Select Image Format"));
25     auto mainLayout = new QVBoxLayout(this);
26     auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
27     QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok);
28     okButton->setDefault(true);
29     okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
30     connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
31     connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
32     mListWidget = new QListWidget(this);
33     mainLayout->addWidget(mListWidget);
34     mainLayout->addWidget(buttonBox);
35 
36     initialize();
37 }
38 
~ImageScalingSelectFormatDialog()39 ImageScalingSelectFormatDialog::~ImageScalingSelectFormatDialog()
40 {
41 }
42 
addImageFormat(const QString & format,const QString & mimetype)43 void ImageScalingSelectFormatDialog::addImageFormat(const QString &format, const QString &mimetype)
44 {
45     auto item = new QListWidgetItem(format);
46     item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
47     item->setData(ImageScalingSelectFormatDialog::ImageRole, mimetype);
48     item->setCheckState(Qt::Unchecked);
49     mListWidget->addItem(item);
50 }
51 
initialize()52 void ImageScalingSelectFormatDialog::initialize()
53 {
54     addImageFormat(QStringLiteral("PNG"), QStringLiteral("image/png"));
55     addImageFormat(QStringLiteral("JPEG"), QStringLiteral("image/jpeg"));
56     addImageFormat(QStringLiteral("GIF"), QStringLiteral("image/gif"));
57     addImageFormat(QStringLiteral("BMP"), QStringLiteral("image/bmp"));
58 }
59 
format() const60 QString ImageScalingSelectFormatDialog::format() const
61 {
62     const int numberOfElement(mListWidget->count());
63     QString formatStr;
64     for (int i = 0; i < numberOfElement; ++i) {
65         if (mListWidget->item(i)->checkState() == Qt::Checked) {
66             if (!formatStr.isEmpty()) {
67                 formatStr += QLatin1Char(';');
68             }
69             formatStr += mListWidget->item(i)->data(ImageScalingSelectFormatDialog::ImageRole).toString();
70         }
71     }
72     return formatStr;
73 }
74 
setFormat(const QString & format)75 void ImageScalingSelectFormatDialog::setFormat(const QString &format)
76 {
77     const QStringList listFormat = format.split(QLatin1Char(';'));
78     const int numberOfElement(mListWidget->count());
79     for (int i = 0; i < numberOfElement; ++i) {
80         QListWidgetItem *item = mListWidget->item(i);
81         if (listFormat.contains(item->data(ImageScalingSelectFormatDialog::ImageRole).toString())) {
82             item->setCheckState(Qt::Checked);
83         }
84     }
85 }
86 
ImageScalingSelectFormat(QWidget * parent)87 ImageScalingSelectFormat::ImageScalingSelectFormat(QWidget *parent)
88     : QWidget(parent)
89 {
90     auto lay = new QHBoxLayout(this);
91     lay->setContentsMargins({});
92     mFormat = new QLineEdit;
93     connect(mFormat, &QLineEdit::textChanged, this, &ImageScalingSelectFormat::textChanged);
94     mFormat->setReadOnly(true);
95     lay->addWidget(mFormat);
96     mSelectFormat = new QPushButton(i18n("Select Format..."));
97     connect(mSelectFormat, &QPushButton::clicked, this, &ImageScalingSelectFormat::slotSelectFormat);
98     lay->addWidget(mSelectFormat);
99 }
100 
~ImageScalingSelectFormat()101 ImageScalingSelectFormat::~ImageScalingSelectFormat()
102 {
103 }
104 
slotSelectFormat()105 void ImageScalingSelectFormat::slotSelectFormat()
106 {
107     QPointer<ImageScalingSelectFormatDialog> dialog = new ImageScalingSelectFormatDialog(this);
108     dialog->setFormat(mFormat->text());
109     if (dialog->exec()) {
110         mFormat->setText(dialog->format());
111     }
112     delete dialog;
113 }
114 
setFormat(const QString & format)115 void ImageScalingSelectFormat::setFormat(const QString &format)
116 {
117     mFormat->setText(format);
118 }
119 
format() const120 QString ImageScalingSelectFormat::format() const
121 {
122     return mFormat->text();
123 }
124