7#include "dkimmanageruleswidget.h"
8#include "dkimmanagerulescombobox.h"
9#include "dkimruledialog.h"
10#include "messageviewer_dkimcheckerdebug.h"
11#include <KLineEditEventHandler>
12#include <KLocalizedString>
14#include <KTreeWidgetSearchLine>
15#include <MessageViewer/DKIMManagerRules>
21using namespace MessageViewer;
22DKIMManageRulesWidgetItem::DKIMManageRulesWidgetItem(
QTreeWidget *parent)
24 , mRuleTypeCombobox(new DKIMManageRulesComboBox)
26 treeWidget()->setItemWidget(
this, ColumnType::RuleType, mRuleTypeCombobox);
29DKIMManageRulesWidgetItem::~DKIMManageRulesWidgetItem() =
default;
33 MessageViewer::DKIMRule rule;
35 rule.setDomain(
text(ColumnType::Domain));
36 rule.setFrom(
text(ColumnType::From));
37 rule.setListId(
text(ColumnType::ListId));
38 rule.setPriority(
text(ColumnType::Priority).toInt());
39 rule.setRuleType(mRuleTypeCombobox->ruleType());
40 rule.setSignedDomainIdentifier(
text(ColumnType::SDid).split(QLatin1Char(
' ')));
44void DKIMManageRulesWidgetItem::setRule(
const MessageViewer::DKIMRule &rule)
52void DKIMManageRulesWidgetItem::updateInfo()
55 setText(ColumnType::Domain, mRule.domain());
56 setText(ColumnType::ListId, mRule.listId());
57 setText(ColumnType::From, mRule.from());
58 setText(ColumnType::SDid, mRule.signedDomainIdentifier().join(QLatin1Char(
' ')));
60 mRuleTypeCombobox->setRuleType(mRule.ruleType());
63DKIMManageRulesWidget::DKIMManageRulesWidget(QWidget *parent)
65 , mTreeWidget(new QTreeWidget(this))
69 mainLayout->setContentsMargins({});
72 mTreeWidget->setRootIsDecorated(
false);
73 mTreeWidget->setHeaderLabels({
i18n(
"Active"),
i18n(
"Domain"),
i18n(
"List-ID"),
i18n(
"From"),
i18n(
"SDID"),
i18n(
"Rule type"),
i18n(
"Priority")});
75 mTreeWidget->setAlternatingRowColors(
true);
79 searchLineEdit->setClearButtonEnabled(
true);
80 mainLayout->addWidget(searchLineEdit);
83 mainLayout->addWidget(mTreeWidget);
88 modifyRule(rulesItem);
93DKIMManageRulesWidget::~DKIMManageRulesWidget() =
default;
95void DKIMManageRulesWidget::updateRules()
97 const QList<MessageViewer::DKIMRule> rules = MessageViewer::DKIMManagerRules::self()->rules();
99 for (
const MessageViewer::DKIMRule &rule : rules) {
100 auto item =
new DKIMManageRulesWidgetItem(mTreeWidget);
103 emitUpdateExportButton();
106void DKIMManageRulesWidget::loadSettings()
108 mTreeWidget->setSortingEnabled(
true);
109 mTreeWidget->header()->setSortIndicatorShown(
true);
110 mTreeWidget->header()->setSectionsClickable(
true);
115QList<MessageViewer::DKIMRule> DKIMManageRulesWidget::rules()
const
117 QList<MessageViewer::DKIMRule> rules;
118 const int total = mTreeWidget->topLevelItemCount();
119 rules.reserve(total);
120 for (
int i = 0; i < total; ++i) {
121 QTreeWidgetItem *item = mTreeWidget->topLevelItem(i);
122 auto ruleItem =
static_cast<DKIMManageRulesWidgetItem *
>(item);
123 rules.append(ruleItem->rule());
128void DKIMManageRulesWidget::saveSettings()
130 MessageViewer::DKIMManagerRules::self()->saveRules(rules());
133QByteArray DKIMManageRulesWidget::saveHeaders()
const
135 return mTreeWidget->header()->saveState();
138void DKIMManageRulesWidget::restoreHeaders(
const QByteArray &header)
140 mTreeWidget->header()->restoreState(header);
143void DKIMManageRulesWidget::addRule()
145 QPointer<DKIMRuleDialog> dlg =
new DKIMRuleDialog(
this);
147 const MessageViewer::DKIMRule rule = dlg->rule();
148 if (rule.isValid()) {
149 auto item =
new DKIMManageRulesWidgetItem(mTreeWidget);
151 emitUpdateExportButton();
153 qCDebug(MESSAGEVIEWER_DKIMCHECKER_LOG) <<
"Rule is not valid";
161 QPointer<DKIMRuleDialog> dlg =
new DKIMRuleDialog(
this);
162 dlg->loadRule(rulesItem->rule());
164 const MessageViewer::DKIMRule rule = dlg->rule();
165 if (rule.isValid()) {
166 auto item =
new DKIMManageRulesWidgetItem(mTreeWidget);
168 emitUpdateExportButton();
174void DKIMManageRulesWidget::emitUpdateExportButton()
176 Q_EMIT updateExportButton(mTreeWidget->topLevelItemCount() > 0);
181 QPointer<DKIMRuleDialog> dlg =
new DKIMRuleDialog(
this);
182 dlg->loadRule(rulesItem->rule());
184 const MessageViewer::DKIMRule rule = dlg->rule();
185 if (rule.isValid()) {
186 rulesItem->setRule(rule);
192void DKIMManageRulesWidget::slotCustomContextMenuRequested(
const QPoint &pos)
194 QTreeWidgetItem *item = mTreeWidget->itemAt(
pos);
199 auto rulesItem =
dynamic_cast<DKIMManageRulesWidgetItem *
>(item);
201 menu.addAction(
QIcon::fromTheme(QStringLiteral(
"document-edit")),
i18n(
"Modify..."),
this, [
this, rulesItem]() {
202 modifyRule(rulesItem);
205 menu.addAction(
QIcon::fromTheme(QStringLiteral(
"edit-duplicate")),
i18n(
"Duplicate Rule"),
this, [
this, rulesItem]() {
206 duplicateRule(rulesItem);
209 menu.addAction(
QIcon::fromTheme(QStringLiteral(
"edit-delete")),
i18n(
"Remove Rule"),
this, [
this, item]() {
211 i18n(
"Do you want to delete this rule?"),
212 i18nc(
"@title:window",
"Delete Rule"),
215 if (answer == KMessageBox::ButtonCode::PrimaryAction) {
217 emitUpdateExportButton();
221 if (mTreeWidget->topLevelItemCount() > 0) {
223 menu.addAction(
i18n(
"Delete All"),
this, [
this]() {
225 i18n(
"Do you want to delete all the rules?"),
226 i18nc(
"@title:window",
"Delete Rules"),
229 if (answer == KMessageBox::ButtonCode::PrimaryAction) {
230 mTreeWidget->clear();
231 emitUpdateExportButton();
238#include "moc_dkimmanageruleswidget.cpp"
QString i18nc(const char *context, const char *text, const TYPE &arg...)
QString i18n(const char *text, const TYPE &arg...)
void catchReturnKey(QObject *lineEdit)
ButtonCode warningTwoActions(QWidget *parent, const QString &text, const QString &title, const KGuiItem &primaryAction, const KGuiItem &secondaryAction, const QString &dontAskAgainName=QString(), Options options=Options(Notify|Dangerous))
QIcon fromTheme(const QString &name)
QString number(double n, char format, int precision)
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
void setText(int column, const QString &text)
QString text(int column) const const