File indexing completed on 2025-02-16 04:55:56
0001 /* 0002 SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 #include "sieveactiondeleteheader.h" 0007 #include "autocreatescripts/autocreatescriptutil_p.h" 0008 #include "autocreatescripts/commonwidgets/selectmatchtypecombobox.h" 0009 #include "editor/sieveeditorutil.h" 0010 0011 #include <KLineEditEventHandler> 0012 #include <KLocalizedString> 0013 #include <QLineEdit> 0014 0015 #include "libksieveui_debug.h" 0016 #include <QGridLayout> 0017 #include <QLabel> 0018 #include <QWidget> 0019 #include <QXmlStreamReader> 0020 0021 using namespace KSieveUi; 0022 0023 SieveActionDeleteHeader::SieveActionDeleteHeader(SieveEditorGraphicalModeWidget *sieveGraphicalModeWidget, QObject *parent) 0024 : SieveActionAbstractEditHeader(sieveGraphicalModeWidget, QStringLiteral("deleteheader"), i18n("Delete header"), parent) 0025 { 0026 } 0027 0028 QWidget *SieveActionDeleteHeader::createParamWidget(QWidget *parent) const 0029 { 0030 auto w = new QWidget(parent); 0031 auto grid = new QGridLayout; 0032 grid->setContentsMargins({}); 0033 w->setLayout(grid); 0034 0035 auto matchType = new SelectMatchTypeComboBox(mSieveGraphicalModeWidget); 0036 matchType->setObjectName(QLatin1StringView("matchtype")); 0037 connect(matchType, &SelectMatchTypeComboBox::valueChanged, this, &SieveActionDeleteHeader::valueChanged); 0038 grid->addWidget(matchType, 0, 0); 0039 0040 auto lab = new QLabel(i18n("header:")); 0041 grid->addWidget(lab, 0, 1); 0042 0043 auto headerEdit = new QLineEdit; 0044 KLineEditEventHandler::catchReturnKey(headerEdit); 0045 headerEdit->setObjectName(QLatin1StringView("headeredit")); 0046 connect(headerEdit, &QLineEdit::textChanged, this, &SieveActionDeleteHeader::valueChanged); 0047 grid->addWidget(headerEdit, 0, 2); 0048 0049 lab = new QLabel(i18n("value:")); 0050 grid->addWidget(lab, 1, 1); 0051 0052 auto valueEdit = new QLineEdit; 0053 KLineEditEventHandler::catchReturnKey(valueEdit); 0054 valueEdit->setObjectName(QLatin1StringView("valueedit")); 0055 connect(valueEdit, &QLineEdit::textChanged, this, &SieveActionDeleteHeader::valueChanged); 0056 grid->addWidget(valueEdit, 1, 2); 0057 return w; 0058 } 0059 0060 void SieveActionDeleteHeader::parseValue(QXmlStreamReader &element, QWidget *w, QString &error, bool isNegative) 0061 { 0062 int index = 0; 0063 while (element.readNextStartElement()) { 0064 const QStringView tagName = element.name(); 0065 if (tagName == QLatin1StringView("test")) { 0066 QString nameValue; 0067 if (element.attributes().hasAttribute(QLatin1StringView("name"))) { 0068 nameValue = element.attributes().value(QLatin1StringView("name")).toString(); 0069 } 0070 const bool isNot = (nameValue == QLatin1StringView("not")); 0071 parseValue(element, w, error, isNot); 0072 element.skipCurrentElement(); 0073 return; 0074 } else if (tagName == QLatin1StringView("tag")) { 0075 auto combo = w->findChild<SelectMatchTypeComboBox *>(QStringLiteral("matchtype")); 0076 combo->setCode(AutoCreateScriptUtil::tagValueWithCondition(element.readElementText(), isNegative), name(), error); 0077 } else if (tagName == QLatin1StringView("str")) { 0078 if (index == 0) { 0079 auto edit = w->findChild<QLineEdit *>(QStringLiteral("headeredit")); 0080 edit->setText(element.readElementText()); 0081 } else if (index == 1) { 0082 auto value = w->findChild<QLineEdit *>(QStringLiteral("valueedit")); 0083 value->setText(element.readElementText()); 0084 } else { 0085 tooManyArguments(tagName, index, 2, error); 0086 qCDebug(LIBKSIEVEUI_LOG) << " SieveActionAddHeader::setParamWidgetValue too many argument :" << index; 0087 } 0088 ++index; 0089 } else if (tagName == QLatin1StringView("crlf")) { 0090 element.skipCurrentElement(); 0091 // nothing 0092 } else if (tagName == QLatin1StringView("comment")) { 0093 element.skipCurrentElement(); 0094 // implement in the future ? 0095 } else { 0096 unknownTag(tagName, error); 0097 qCDebug(LIBKSIEVEUI_LOG) << "SieveActionAddHeader::setParamWidgetValue unknown tag " << tagName; 0098 } 0099 } 0100 } 0101 0102 void SieveActionDeleteHeader::setParamWidgetValue(QXmlStreamReader &element, QWidget *w, QString &error) 0103 { 0104 parseValue(element, w, error, false); 0105 } 0106 0107 QString SieveActionDeleteHeader::code(QWidget *w) const 0108 { 0109 const SelectMatchTypeComboBox *combo = w->findChild<SelectMatchTypeComboBox *>(QStringLiteral("matchtype")); 0110 bool isNegative = false; 0111 const QString matchTypeStr = combo->code(isNegative); 0112 0113 const QLineEdit *edit = w->findChild<QLineEdit *>(QStringLiteral("headeredit")); 0114 const QString headerStr = edit->text(); 0115 0116 const QLineEdit *value = w->findChild<QLineEdit *>(QStringLiteral("valueedit")); 0117 const QString valueStr = value->text(); 0118 0119 return QStringLiteral("deleteheader %1 \"%2\" \"%3\";").arg((isNegative ? QLatin1StringView("not ") + matchTypeStr : matchTypeStr), headerStr, valueStr); 0120 } 0121 0122 QString SieveActionDeleteHeader::help() const 0123 { 0124 return i18n("By default, the deleteheader action deletes all occurrences of the named header field."); 0125 } 0126 0127 QUrl SieveActionDeleteHeader::href() const 0128 { 0129 return SieveEditorUtil::helpUrl(SieveEditorUtil::strToVariableName(name())); 0130 } 0131 0132 QStringList SieveActionDeleteHeader::needRequires(QWidget *w) const 0133 { 0134 const SelectMatchTypeComboBox *combo = w->findChild<SelectMatchTypeComboBox *>(QStringLiteral("matchtype")); 0135 return SieveActionAbstractEditHeader::needRequires(w) + combo->needRequires(); 0136 } 0137 0138 #include "moc_sieveactiondeleteheader.cpp"