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