File indexing completed on 2025-02-16 04:55:57
0001 /* 0002 SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 #include "sieveactionextracttext.h" 0007 #include "editor/sieveeditorutil.h" 0008 0009 #include <KLineEditEventHandler> 0010 #include <KLocalizedString> 0011 #include <QLineEdit> 0012 0013 #include "libksieveui_debug.h" 0014 #include <QGridLayout> 0015 #include <QLabel> 0016 #include <QSpinBox> 0017 #include <QXmlStreamReader> 0018 0019 using namespace KSieveUi; 0020 SieveActionExtractText::SieveActionExtractText(SieveEditorGraphicalModeWidget *sieveGraphicalModeWidget, QObject *parent) 0021 : SieveAction(sieveGraphicalModeWidget, QStringLiteral("extracttext"), i18n("Extract Text"), parent) 0022 { 0023 } 0024 0025 QWidget *SieveActionExtractText::createParamWidget(QWidget *parent) const 0026 { 0027 auto w = new QWidget(parent); 0028 auto grid = new QGridLayout; 0029 grid->setContentsMargins({}); 0030 w->setLayout(grid); 0031 0032 auto lab = new QLabel(i18n("Number of characters:")); 0033 grid->addWidget(lab, 0, 0); 0034 0035 auto nbCharacters = new QSpinBox; 0036 nbCharacters->setMinimum(1); 0037 nbCharacters->setMaximum(99999); 0038 nbCharacters->setObjectName(QLatin1StringView("numberOfCharacters")); 0039 grid->addWidget(nbCharacters, 0, 1); 0040 connect(nbCharacters, &QSpinBox::valueChanged, this, &SieveActionExtractText::valueChanged); 0041 0042 lab = new QLabel(i18n("Stored in variable name:")); 0043 grid->addWidget(lab, 1, 0); 0044 0045 auto variableName = new QLineEdit; 0046 KLineEditEventHandler::catchReturnKey(variableName); 0047 connect(variableName, &QLineEdit::textChanged, this, &SieveActionExtractText::valueChanged); 0048 variableName->setObjectName(QLatin1StringView("variablename")); 0049 grid->addWidget(variableName, 1, 1); 0050 0051 return w; 0052 } 0053 0054 void SieveActionExtractText::setParamWidgetValue(QXmlStreamReader &element, QWidget *w, QString &error) 0055 { 0056 while (element.readNextStartElement()) { 0057 const QStringView tagName = element.name(); 0058 0059 if (tagName == QLatin1StringView("tag")) { 0060 element.skipCurrentElement(); 0061 // TODO ? 0062 } else if (tagName == QLatin1StringView("num")) { 0063 auto numberOfCharacters = w->findChild<QSpinBox *>(QStringLiteral("numberOfCharacters")); 0064 numberOfCharacters->setValue(element.readElementText().toInt()); 0065 } else if (tagName == QLatin1StringView("str")) { 0066 auto variableName = w->findChild<QLineEdit *>(QStringLiteral("variablename")); 0067 variableName->setText(element.readElementText()); 0068 } else if (tagName == QLatin1StringView("crlf")) { 0069 element.skipCurrentElement(); 0070 // nothing 0071 } else if (tagName == QLatin1StringView("comment")) { 0072 element.skipCurrentElement(); 0073 // implement in the future ? 0074 } else { 0075 unknownTag(tagName, error); 0076 qCDebug(LIBKSIEVEUI_LOG) << " SieveActionExtractText::setParamWidgetValue unknown tagName " << tagName; 0077 } 0078 } 0079 } 0080 0081 QString SieveActionExtractText::code(QWidget *w) const 0082 { 0083 const QSpinBox *numberOfCharacters = w->findChild<QSpinBox *>(QStringLiteral("numberOfCharacters")); 0084 const QString numberOfCharactersStr = QString::number(numberOfCharacters->value()); 0085 0086 const QLineEdit *variableName = w->findChild<QLineEdit *>(QStringLiteral("variablename")); 0087 const QString variableNameStr = variableName->text(); 0088 0089 const QString result = QStringLiteral("extracttext :first %1 \"%2\";").arg(numberOfCharactersStr, variableNameStr); 0090 return result; 0091 } 0092 0093 QStringList SieveActionExtractText::needRequires(QWidget * /*parent*/) const 0094 { 0095 return QStringList() << QStringLiteral("extracttext"); 0096 } 0097 0098 bool SieveActionExtractText::needCheckIfServerHasCapability() const 0099 { 0100 return true; 0101 } 0102 0103 QString SieveActionExtractText::serverNeedsCapability() const 0104 { 0105 return QStringLiteral("extracttext"); 0106 } 0107 0108 QString SieveActionExtractText::help() const 0109 { 0110 return i18n("The \"extracttext\" action may be used within the context of a \"foreverypart\" loop and is used to store text into a variable"); 0111 } 0112 0113 QUrl SieveActionExtractText::href() const 0114 { 0115 return SieveEditorUtil::helpUrl(SieveEditorUtil::strToVariableName(name())); 0116 } 0117 0118 #include "moc_sieveactionextracttext.cpp"