7#include "vacationeditwidget.h"
8#include "vacationmailactionwidget.h"
9#include "vacationmaillineedit.h"
11#include <KDateComboBox>
12#include <KLocalizedString>
13#include <KTimeComboBox>
15#include <QRegularExpressionValidator>
18#include "libksieveui_debug.h"
19#include <KLineEditEventHandler>
20#include <TextCustomEditor/PlainTextEditor>
21#include <TextCustomEditor/PlainTextEditorWidget>
23#include <KMime/HeaderParsing>
25#include <PimCommon/SpellCheckLineEdit>
30using KMime::HeaderParsing::parseAddressList;
31using KMime::Types::AddressList;
33using KMime::Types::MailboxList;
35using namespace KSieveUi;
36VacationEditWidget::VacationEditWidget(
QWidget *parent)
42 glay->setContentsMargins({});
43 glay->setColumnStretch(1, 1);
47 auto configureVacationLabel =
new QLabel(
i18n(
"Configure vacation "
48 "notifications to be sent:"),
50 configureVacationLabel->setObjectName(
QLatin1StringView(
"configureVacationLabel"));
51 glay->addWidget(configureVacationLabel, row, 0, 1, 2);
55 mActiveCheck =
new QCheckBox(
i18n(
"&Activate vacation notifications"),
this);
57 glay->addWidget(mActiveCheck, row, 0, 1, 2);
62 glay->setRowStretch(row, 1);
63 mTextEdit =
new TextCustomEditor::PlainTextEditorWidget(
this);
65 glay->addWidget(mTextEdit, row, 0, 1, 2);
66 connect(mTextEdit->editor(), &TextCustomEditor::PlainTextEditor::textChanged,
this, &VacationEditWidget::setWasChanged);
73 connect(mSubject, &PimCommon::SpellCheckLineEdit::textChanged,
this, &VacationEditWidget::setWasChanged);
75 auto subjectOfVacationLabel =
new QLabel(
i18n(
"&Subject of the vacation mail:"),
this);
76 subjectOfVacationLabel->setObjectName(
QLatin1StringView(
"subjectOfVacationLabel"));
77 subjectOfVacationLabel->setBuddy(mSubject);
78 glay->addWidget(subjectOfVacationLabel, row, 0);
79 glay->addWidget(mSubject, row, 1);
95 mStartTime->setEnabled(
false);
103 timeLayout->addWidget(mStartDate);
104 timeLayout->addWidget(mStartTimeActive);
105 timeLayout->addWidget(mStartTime);
107 mStartDateLabel =
new QLabel(
i18n(
"Start date:"),
this);
109 mStartDateLabel->setBuddy(mStartDate);
110 glay->addWidget(mStartDateLabel, row, 0);
111 glay->addLayout(timeLayout, row, 1);
128 mEndTime->setEnabled(
false);
137 mEndDateLabel =
new QLabel(
i18n(
"End date:"),
this);
139 mEndDateLabel->setBuddy(mEndDate);
140 glay->addWidget(mEndDateLabel, row, 0);
142 timeLayout->addWidget(mEndDate);
143 timeLayout->addWidget(mEndTimeActive);
144 timeLayout->addWidget(mEndTime);
145 glay->addLayout(timeLayout, row, 1);
153 int defDayInterval = 7;
155 mIntervalSpin->setMaximum(356);
156 mIntervalSpin->setMinimum(1);
157 mIntervalSpin->setSingleStep(1);
158 mIntervalSpin->setValue(defDayInterval);
160 mIntervalSpin->setSuffix(
i18np(
" day",
" days", defDayInterval));
162 auto resendNotificationLabel =
new QLabel(
i18n(
"&Resend notification only after:"),
this);
163 resendNotificationLabel->setObjectName(
QLatin1StringView(
"resendNotificationLabel"));
164 resendNotificationLabel->setBuddy(mIntervalSpin);
165 glay->addWidget(resendNotificationLabel, row, 0);
166 glay->addWidget(mIntervalSpin, row, 1);
170 mMailAliasesEdit =
new KSieveUi::VacationMailLineEdit(
this);
172 mMailAliasesEdit->setClearButtonEnabled(
true);
175 auto sendResponseLabel =
new QLabel(
i18n(
"&Send responses for these addresses:"),
this);
177 sendResponseLabel->setBuddy(mMailAliasesEdit);
178 glay->addWidget(sendResponseLabel, row, 0);
179 glay->addWidget(mMailAliasesEdit, row, 1);
183 for (
int i = 0; i < 4; ++i) {
184 mMailAction->addItem(KSieveCore::VacationUtils::mailAction(
static_cast<KSieveCore::VacationUtils::MailAction
>(i)));
190 mMailActionRecipient =
new VacationMailActionWidget(
this);
192 connect(mMailActionRecipient, &VacationMailActionWidget::wasChanged,
this, &VacationEditWidget::setWasChanged);
198 hLayout->addWidget(mMailActionRecipient);
201 auto actionIncomingMailsLabel =
new QLabel(
i18n(
"&Action for incoming mails:"),
this);
202 actionIncomingMailsLabel->setBuddy(mMailAction);
203 actionIncomingMailsLabel->setObjectName(
QLatin1StringView(
"actionIncomingMailsLabel"));
204 glay->addWidget(actionIncomingMailsLabel, row, 0);
205 glay->addLayout(hLayout, row, 1);
209 mSpamCheck =
new QCheckBox(
i18n(
"Do not send vacation replies to spam messages"),
this);
211 mSpamCheck->setChecked(
true);
212 glay->addWidget(mSpamCheck, row, 0, 1, 2);
217 mDomainCheck =
new QCheckBox(
i18n(
"Only react to mail coming from domain:"),
this);
219 mDomainCheck->setChecked(
false);
225 mDomainEdit->setClearButtonEnabled(
true);
226 mDomainEdit->setEnabled(
false);
228 glay->addWidget(mDomainCheck, row, 0);
229 glay->addWidget(mDomainEdit, row, 1);
234VacationEditWidget::~VacationEditWidget() =
default;
236bool VacationEditWidget::activateVacation()
const
241void VacationEditWidget::setActivateVacation(
bool activate)
246QString VacationEditWidget::messageText()
const
248 return mTextEdit->toPlainText().trimmed();
251void VacationEditWidget::setMessageText(
const QString &text)
253 mTextEdit->setPlainText(text);
254 const int height = (mTextEdit->fontMetrics().lineSpacing() + 1) * 11;
255 mTextEdit->setMinimumHeight(
height);
258int VacationEditWidget::notificationInterval()
const
260 return mIntervalSpin->
value();
263void VacationEditWidget::setNotificationInterval(
int days)
268AddrSpecList VacationEditWidget::mailAliases(
bool &ok)
const
272 const char *s = text.
cbegin();
274 if (parseAddressList(s, text.
cend(), al)) {
275 AddressList::const_iterator
end(al.constEnd());
276 for (AddressList::const_iterator it = al.constBegin(); it !=
end; ++it) {
277 const MailboxList &mbl = (*it).mailboxList;
278 MailboxList::const_iterator endJt = mbl.constEnd();
279 for (MailboxList::const_iterator jt = mbl.constBegin(); jt != endJt; ++jt) {
280 asl.push_back((*jt).addrSpec());
285 qCWarning(LIBKSIEVEUI_LOG) <<
"Impossible to parse email!" << text;
288 mMailAliasesEdit->setInvalidEmail(!ok);
292void VacationEditWidget::setMailAliases(
const AddrSpecList &aliases)
296 for (
const auto &str : aliases) {
302void VacationEditWidget::setMailAliases(
const QString &aliases)
304 mMailAliasesEdit->
setText(aliases);
307void VacationEditWidget::slotIntervalSpinChanged(
int value)
313QString VacationEditWidget::domainName()
const
318void VacationEditWidget::setDomainName(
const QString &domain)
326bool VacationEditWidget::domainCheck()
const
331void VacationEditWidget::setDomainCheck(
bool check)
336bool VacationEditWidget::sendForSpam()
const
341void VacationEditWidget::setSendForSpam(
bool enable)
346QDate VacationEditWidget::endDate()
const
349 return mEndDate->
date();
355void VacationEditWidget::setEndDate(
QDate endDate)
360QTime VacationEditWidget::endTime()
const
363 return mEndTime->
time();
369void VacationEditWidget::setEndTime(
QTime endTime)
376QDate VacationEditWidget::startDate()
const
379 return mStartDate->
date();
385void VacationEditWidget::setStartDate(
QDate startDate)
387 mStartDate->
setDate(startDate);
390QTime VacationEditWidget::startTime()
const
393 return mStartTime->
time();
399void VacationEditWidget::setStartTime(
QTime startTime)
403 mStartTime->
setTime(startTime);
406void VacationEditWidget::setSubject(
const QString &subject)
408 mSubject->setText(subject);
411QString VacationEditWidget::subject()
const
413 if (mSubject->isEnabled()) {
414 return mSubject->toPlainText();
420void VacationEditWidget::enableDates(
bool enable)
432void VacationEditWidget::mailActionChanged(
int action)
434 mMailActionRecipient->mailActionChanged(
static_cast<KSieveCore::VacationUtils::MailAction
>(action));
438void VacationEditWidget::setWasChanged()
443bool VacationEditWidget::changed()
const
448void VacationEditWidget::setChanged(
bool changed)
453void VacationEditWidget::setMailAction(KSieveCore::VacationUtils::MailAction action,
const QString &recipient)
456 mMailActionRecipient->setMailAction(action, recipient);
461 mMailActionRecipient->setSieveImapAccountSettings(account);
464KSieveCore::VacationUtils::MailAction VacationEditWidget::mailAction()
const
466 return static_cast<KSieveCore::VacationUtils::MailAction
>(mMailAction->
currentIndex());
469QString VacationEditWidget::mailActionRecipient(
bool &valid)
const
471 return mMailActionRecipient->mailActionRecipient(valid);
474void VacationEditWidget::enableDomainAndSendForSpam(
bool enable)
481void VacationEditWidget::setDefault()
483 setActivateVacation(
true);
484 setMessageText(KSieveCore::VacationUtils::defaultMessageText());
485 setSubject(KSieveCore::VacationUtils::defaultSubject());
486 setNotificationInterval(KSieveCore::VacationUtils::defaultNotificationInterval());
487 setMailAliases(KSieveCore::VacationUtils::defaultMailAliases());
488 setSendForSpam(KSieveCore::VacationUtils::defaultSendForSpam());
489 setDomainName(KSieveCore::VacationUtils::defaultDomainName());
490 setMailAction(KSieveCore::VacationUtils::defaultMailAction(),
QString());
497 setDomainCheck(
false);
498 mDomainEdit->
clear();
501#include "moc_vacationeditwidget.cpp"
void dateEdited(const QDate &date)
void setDate(const QDate &date)
void dateChanged(const QDate &date)
The SieveImapAccountSettings class.
void setTime(const QTime &time)
void timeChanged(const QTime &time)
void timeEdited(const QTime &time)
QString i18np(const char *singular, const char *plural, const TYPE &arg...)
QString i18n(const char *text, const TYPE &arg...)
void catchReturnKey(QObject *lineEdit)
const QList< QKeySequence > & end()
const_iterator cbegin() const const
const_iterator cend() const const
void setCurrentIndex(int index)
void currentIndexChanged(int index)
void textChanged(const QString &text)
void push_back(parameter_type value)
void reserve(qsizetype size)
void setSuffix(const QString &suffix)
bool isEmpty() const const
QString join(QChar separator) const const
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
bool isValid(int h, int m, int s, int ms)