Mailcommon

filteractionaddtag.cpp
1/*
2 * SPDX-FileCopyrightText: 1996-1998 Stefan Taferner <taferner@kde.org>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 *
6 */
7
8#include "filteractionaddtag.h"
9#include "filter/dialog/filteractionmissingtagdialog.h"
10#include "filter/filtermanager.h"
11
12#include <QComboBox>
13
14#include <Akonadi/Tag>
15
16using namespace MailCommon;
17
18FilterAction *FilterActionAddTag::newAction()
19{
20 return new FilterActionAddTag;
21}
22
23FilterActionAddTag::FilterActionAddTag(QObject *parent)
24 : FilterAction(QStringLiteral("add tag"), i18n("Add Tag"), parent)
25{
26 mList = FilterManager::instance()->tagList();
27 connect(FilterManager::instance(), &FilterManager::tagListingFinished, this, &FilterActionAddTag::slotTagListingFinished);
28}
29
30QWidget *FilterActionAddTag::createParamWidget(QWidget *parent) const
31{
32 mComboBox = new QComboBox(parent);
33 mComboBox->setMinimumWidth(50);
34 mComboBox->setEditable(false);
35 QMapIterator<QUrl, QString> i(mList);
36 while (i.hasNext()) {
37 i.next();
38 mComboBox->addItem(i.value(), i.key());
39 }
40
41 setParamWidgetValue(mComboBox);
43
44 return mComboBox;
45}
46
47void FilterActionAddTag::applyParamWidgetValue(QWidget *paramWidget)
48{
49 auto combo = static_cast<QComboBox *>(paramWidget);
50 mParameter = combo->itemData(combo->currentIndex()).toString();
51}
52
53void FilterActionAddTag::setParamWidgetValue(QWidget *paramWidget) const
54{
55 const int index = static_cast<QComboBox *>(paramWidget)->findData(QUrl(mParameter));
56 static_cast<QComboBox *>(paramWidget)->setCurrentIndex(index < 0 ? 0 : index);
57}
58
59void FilterActionAddTag::clearParamWidget(QWidget *paramWidget) const
60{
61 static_cast<QComboBox *>(paramWidget)->setCurrentIndex(0);
62}
63
64bool FilterActionAddTag::isEmpty() const
65{
66 return mParameter.isEmpty();
67}
68
69void FilterActionAddTag::slotTagListingFinished()
70{
71 if (mComboBox) {
72 mList = FilterManager::instance()->tagList();
73 mComboBox->clear();
74 fillComboBox();
75 }
76}
77
78void FilterActionAddTag::fillComboBox()
79{
80 QMapIterator<QUrl, QString> i(mList);
81 while (i.hasNext()) {
82 i.next();
83 mComboBox->addItem(i.value(), i.key());
84 }
85}
86
87bool FilterActionAddTag::argsFromStringInteractive(const QString &argsStr, const QString &filterName)
88{
89 bool needUpdate = false;
90 argsFromString(argsStr);
91 if (mList.isEmpty()) {
92 return needUpdate;
93 }
94 const bool index = mList.contains(QUrl(mParameter));
95 if (!index) {
96 QPointer<MailCommon::FilterActionMissingTagDialog> dlg = new MailCommon::FilterActionMissingTagDialog(mList, filterName, argsStr);
97 if (dlg->exec()) {
98 mParameter = dlg->selectedTag();
99 needUpdate = true;
100 }
101 delete dlg;
102 }
103 return needUpdate;
104}
105
106FilterAction::ReturnCode FilterActionAddTag::process(ItemContext &context, bool) const
107{
108 if (!mList.contains(QUrl(mParameter))) {
109 return ErrorButGoOn;
110 }
111 context.item().setTag(Akonadi::Tag::fromUrl(QUrl(mParameter)));
112 context.setNeedsFlagStore();
113
114 return GoOn;
115}
116
117SearchRule::RequiredPart FilterActionAddTag::requiredPart() const
118{
120}
121
122void FilterActionAddTag::argsFromString(const QString &argsStr)
123{
124 if (mList.isEmpty()) {
125 mParameter = argsStr;
126 return;
127 }
128 if (mList.contains(QUrl(argsStr))) {
129 mParameter = argsStr;
130 return;
131 }
132 if (!mList.isEmpty()) {
133 mParameter = mList.cbegin().value();
134 }
135}
136
137QString FilterActionAddTag::argsAsString() const
138{
139 return mParameter;
140}
141
142QString FilterActionAddTag::displayString() const
143{
144 return label() + QLatin1StringView(" \"") + argsAsString().toHtmlEscaped() + QLatin1StringView("\"");
145}
146
147QString FilterActionAddTag::informationAboutNotValidAction() const
148{
149 const QString info = name() + QLatin1Char('\n') + i18n("No tag selected.");
150 return info;
151}
152
153#include "moc_filteractionaddtag.cpp"
Abstract base class for mail filter actions.
QString name() const
Returns identifier name, ie.
ReturnCode
Describes the possible return codes of filter processing:
@ ErrorButGoOn
A non-critical error occurred.
@ GoOn
Go on with applying filter actions.
void filterActionModified()
Called to notify that the current FilterAction has had some value modification.
QString label() const
Returns i18n'd label, ie.
static FilterManager * instance()
Returns the global filter manager object.
A helper class for the filtering process.
Definition itemcontext.h:27
Akonadi::Item & item()
Returns the item of the context.
void setNeedsFlagStore()
Marks that the item's flags has been changed and needs to be written back.
RequiredPart
Possible required parts.
Definition searchrule.h:70
QString i18n(const char *text, const TYPE &arg...)
The filter dialog.
void currentIndexChanged(int index)
void clear()
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
QObject * parent() const const
QString toHtmlEscaped() const const
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri May 2 2025 11:53:46 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.