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 "libksieve_debug.h" 19 #include <KPIMTextEdit/PlainTextEditor> 20 #include <KPIMTextEdit/PlainTextEditorWidget> 21 #include <Libkdepim/LineEditCatchReturnKey> 23 #include <kmime/kmime_header_parsing.h> 25 #include <PimCommon/SpellCheckLineEdit> 27 #include <QGridLayout> 30 using KMime::HeaderParsing::parseAddressList;
31 using KMime::Types::AddressList;
33 using KMime::Types::MailboxList;
36 VacationEditWidget::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(QStringLiteral(
"configureVacationLabel"));
51 glay->addWidget(configureVacationLabel, row, 0, 1, 2);
55 mActiveCheck =
new QCheckBox(
i18n(
"&Activate vacation notifications"),
this);
56 mActiveCheck->setObjectName(QStringLiteral(
"mActiveCheck"));
57 glay->addWidget(mActiveCheck, row, 0, 1, 2);
62 glay->setRowStretch(row, 1);
64 mTextEdit->setObjectName(QStringLiteral(
"mTextEdit"));
65 glay->addWidget(mTextEdit, row, 0, 1, 2);
71 mSubject->setObjectName(QStringLiteral(
"mSubject"));
74 auto subjectOfVacationLabel =
new QLabel(
i18n(
"&Subject of the vacation mail:"),
this);
75 subjectOfVacationLabel->setObjectName(QStringLiteral(
"subjectOfVacationLabel"));
76 subjectOfVacationLabel->setBuddy(mSubject);
77 glay->addWidget(subjectOfVacationLabel, row, 0);
78 glay->addWidget(mSubject, row, 1);
84 mStartDate->setObjectName(QStringLiteral(
"mStartDate"));
90 mStartTime->setObjectName(QStringLiteral(
"mStartTime"));
92 mStartTime->setEnabled(
false);
97 mStartTimeActive->setObjectName(QStringLiteral(
"mStartTimeActive"));
100 timeLayout->addWidget(mStartDate);
101 timeLayout->addWidget(mStartTimeActive);
102 timeLayout->addWidget(mStartTime);
104 mStartDateLabel =
new QLabel(
i18n(
"Start date:"),
this);
105 mStartDateLabel->setObjectName(QStringLiteral(
"mStartDateLabel"));
106 mStartDateLabel->setBuddy(mStartDate);
107 glay->addWidget(mStartDateLabel, row, 0);
108 glay->addLayout(timeLayout, row, 1);
115 mEndDate->setObjectName(QStringLiteral(
"mEndDate"));
121 mEndTime->setObjectName(QStringLiteral(
"mEndTime"));
123 mEndTime->setEnabled(
false);
128 mEndTimeActive->setObjectName(QStringLiteral(
"mEndTimeActive"));
130 connect(mEndTimeActive, &
QCheckBox::toggled,
this, &VacationEditWidget::setWasChanged);
132 mEndDateLabel =
new QLabel(
i18n(
"End date:"),
this);
133 mEndDateLabel->setObjectName(QStringLiteral(
"mEndDateLabel"));
134 mEndDateLabel->setBuddy(mEndDate);
135 glay->addWidget(mEndDateLabel, row, 0);
137 timeLayout->addWidget(mEndDate);
138 timeLayout->addWidget(mEndTimeActive);
139 timeLayout->addWidget(mEndTime);
140 glay->addLayout(timeLayout, row, 1);
148 int defDayInterval = 7;
150 mIntervalSpin->setMaximum(356);
151 mIntervalSpin->setMinimum(1);
152 mIntervalSpin->setSingleStep(1);
153 mIntervalSpin->setValue(defDayInterval);
154 mIntervalSpin->setObjectName(QStringLiteral(
"mIntervalSpin"));
155 mIntervalSpin->setSuffix(
i18np(
" day",
" days", defDayInterval));
156 connect(mIntervalSpin, QOverload<int>::of(&
QSpinBox::valueChanged),
this, &VacationEditWidget::slotIntervalSpinChanged);
157 auto resendNotificationLabel =
new QLabel(
i18n(
"&Resend notification only after:"),
this);
158 resendNotificationLabel->setObjectName(QStringLiteral(
"resendNotificationLabel"));
159 resendNotificationLabel->setBuddy(mIntervalSpin);
160 glay->addWidget(resendNotificationLabel, row, 0);
161 glay->addWidget(mIntervalSpin, row, 1);
165 mMailAliasesEdit =
new KSieveUi::VacationMailLineEdit(
this);
166 mMailAliasesEdit->setObjectName(QStringLiteral(
"mMailAliasesEdit"));
167 mMailAliasesEdit->setClearButtonEnabled(
true);
168 connect(mMailAliasesEdit, &KSieveUi::VacationMailLineEdit::textChanged,
this, &VacationEditWidget::setWasChanged);
169 auto sendResponseLabel =
new QLabel(
i18n(
"&Send responses for these addresses:"),
this);
170 sendResponseLabel->setObjectName(QStringLiteral(
"sendResponseLabel"));
171 sendResponseLabel->setBuddy(mMailAliasesEdit);
172 glay->addWidget(sendResponseLabel, row, 0);
173 glay->addWidget(mMailAliasesEdit, row, 1);
177 for (
int i = 0; i < 4; ++i) {
178 mMailAction->addItem(VacationUtils::mailAction(static_cast<VacationUtils::MailAction>(i)));
180 mMailAction->setObjectName(QStringLiteral(
"mMailAction"));
184 mMailActionRecipient =
new VacationMailActionWidget(
this);
185 mMailActionRecipient->setObjectName(QStringLiteral(
"mMailActionRecipient"));
186 connect(mMailActionRecipient, &VacationMailActionWidget::wasChanged,
this, &VacationEditWidget::setWasChanged);
192 hLayout->addWidget(mMailActionRecipient);
195 auto actionIncomingMailsLabel =
new QLabel(
i18n(
"&Action for incoming mails:"),
this);
196 actionIncomingMailsLabel->setBuddy(mMailAction);
197 actionIncomingMailsLabel->setObjectName(QStringLiteral(
"actionIncomingMailsLabel"));
198 glay->addWidget(actionIncomingMailsLabel, row, 0);
199 glay->addLayout(hLayout, row, 1);
203 mSpamCheck =
new QCheckBox(
i18n(
"Do not send vacation replies to spam messages"),
this);
204 mSpamCheck->setObjectName(QStringLiteral(
"mSpamCheck"));
205 mSpamCheck->setChecked(
true);
206 glay->addWidget(mSpamCheck, row, 0, 1, 2);
211 mDomainCheck =
new QCheckBox(
i18n(
"Only react to mail coming from domain"),
this);
212 mDomainCheck->setObjectName(QStringLiteral(
"mDomainCheck"));
213 mDomainCheck->setChecked(
false);
218 mDomainEdit->setObjectName(QStringLiteral(
"mDomainEdit"));
219 mDomainEdit->setClearButtonEnabled(
true);
220 mDomainEdit->setEnabled(
false);
222 glay->addWidget(mDomainCheck, row, 0);
223 glay->addWidget(mDomainEdit, row, 1);
228 VacationEditWidget::~VacationEditWidget()
232 bool VacationEditWidget::activateVacation()
const 234 return mActiveCheck->isChecked();
237 void VacationEditWidget::setActivateVacation(
bool activate)
239 mActiveCheck->setChecked(activate);
242 QString VacationEditWidget::messageText()
const 244 return mTextEdit->toPlainText().
trimmed();
247 void VacationEditWidget::setMessageText(
const QString &text)
249 mTextEdit->setPlainText(text);
250 const int height = (mTextEdit->fontMetrics().lineSpacing() + 1) * 11;
251 mTextEdit->setMinimumHeight(height);
254 int VacationEditWidget::notificationInterval()
const 256 return mIntervalSpin->value();
259 void VacationEditWidget::setNotificationInterval(
int days)
261 mIntervalSpin->setValue(days);
264 AddrSpecList VacationEditWidget::mailAliases(
bool &ok)
const 268 const char *s = text.
cbegin();
270 if (parseAddressList(s, text.
cend(), al)) {
271 AddressList::const_iterator
end(al.constEnd());
272 for (AddressList::const_iterator it = al.constBegin(); it !=
end; ++it) {
273 const MailboxList &mbl = (*it).mailboxList;
274 MailboxList::const_iterator endJt = mbl.constEnd();
275 for (MailboxList::const_iterator jt = mbl.constBegin(); jt != endJt; ++jt) {
276 asl.push_back((*jt).addrSpec());
281 qCWarning(LIBKSIEVE_LOG) <<
"Impossible to parse email!" << text;
284 mMailAliasesEdit->setInvalidEmail(!ok);
288 void VacationEditWidget::setMailAliases(
const AddrSpecList &aliases)
291 AddrSpecList::const_iterator
end(aliases.constEnd());
293 for (AddrSpecList::const_iterator it = aliases.constBegin(); it !=
end; ++it) {
299 void VacationEditWidget::setMailAliases(
const QString &aliases)
301 mMailAliasesEdit->setText(aliases);
304 void VacationEditWidget::slotIntervalSpinChanged(
int value)
306 mIntervalSpin->setSuffix(
i18np(
" day",
" days", value));
310 QString VacationEditWidget::domainName()
const 312 return mDomainCheck->isChecked() ? mDomainEdit->text() :
QString();
315 void VacationEditWidget::setDomainName(
const QString &domain)
318 mDomainEdit->setText(domain);
319 mDomainCheck->setChecked(
true);
323 bool VacationEditWidget::domainCheck()
const 325 return mDomainCheck->isChecked();
328 void VacationEditWidget::setDomainCheck(
bool check)
330 mDomainCheck->setChecked(check);
333 bool VacationEditWidget::sendForSpam()
const 335 return !mSpamCheck->isChecked();
338 void VacationEditWidget::setSendForSpam(
bool enable)
340 mSpamCheck->setChecked(!enable);
343 QDate VacationEditWidget::endDate()
const 345 if (mEndDate->isEnabled()) {
346 return mEndDate->date();
352 void VacationEditWidget::setEndDate(
QDate endDate)
357 QTime VacationEditWidget::endTime()
const 359 if (mEndTime->isEnabled()) {
360 return mEndTime->time();
366 void VacationEditWidget::setEndTime(
QTime endTime)
368 mEndTimeActive->setChecked(endTime.
isValid());
369 mEndTime->setEnabled(endTime.
isValid());
370 mEndTime->setTime(endTime);
373 QDate VacationEditWidget::startDate()
const 375 if (mStartDate->isEnabled()) {
376 return mStartDate->date();
382 void VacationEditWidget::setStartDate(
QDate startDate)
384 mStartDate->
setDate(startDate);
387 QTime VacationEditWidget::startTime()
const 389 if (mStartTime->isEnabled()) {
390 return mStartTime->time();
396 void VacationEditWidget::setStartTime(
QTime startTime)
398 mStartTimeActive->setChecked(startTime.
isValid());
399 mStartTime->setEnabled(startTime.
isValid());
400 mStartTime->setTime(startTime);
403 void VacationEditWidget::setSubject(
const QString &subject)
405 mSubject->setText(subject);
408 QString VacationEditWidget::subject()
const 410 if (mSubject->isEnabled()) {
411 return mSubject->toPlainText();
417 void VacationEditWidget::enableDates(
bool enable)
419 mStartDate->setVisible(enable);
420 mStartDateLabel->setVisible(enable);
421 mEndDate->setVisible(enable);
422 mEndDateLabel->setVisible(enable);
423 mStartTime->setVisible(enable);
424 mStartTimeActive->setVisible(enable);
425 mEndTime->setVisible(enable);
426 mEndTimeActive->setVisible(enable);
429 void VacationEditWidget::mailActionChanged(
int action)
431 mMailActionRecipient->mailActionChanged(static_cast<KSieveUi::VacationUtils::MailAction>(action));
435 void VacationEditWidget::setWasChanged()
440 bool VacationEditWidget::changed()
const 445 void VacationEditWidget::setChanged(
bool changed)
450 void VacationEditWidget::setMailAction(VacationUtils::MailAction action,
const QString &recipient)
452 mMailAction->setCurrentIndex(action);
453 mMailActionRecipient->setMailAction(action, recipient);
458 mMailActionRecipient->setSieveImapAccountSettings(account);
461 VacationUtils::MailAction VacationEditWidget::mailAction()
const 463 return static_cast<VacationUtils::MailAction
>(mMailAction->currentIndex());
466 QString VacationEditWidget::mailActionRecipient(
bool &valid)
const 468 return mMailActionRecipient->mailActionRecipient(valid);
471 void VacationEditWidget::enableDomainAndSendForSpam(
bool enable)
473 mDomainCheck->setEnabled(enable);
474 mDomainEdit->setEnabled(enable && mDomainCheck->isChecked());
475 mSpamCheck->setEnabled(enable);
478 void VacationEditWidget::setDefault()
480 setActivateVacation(
true);
481 setMessageText(VacationUtils::defaultMessageText());
482 setSubject(VacationUtils::defaultSubject());
483 setNotificationInterval(VacationUtils::defaultNotificationInterval());
484 setMailAliases(VacationUtils::defaultMailAliases());
485 setSendForSpam(VacationUtils::defaultSendForSpam());
486 setDomainName(VacationUtils::defaultDomainName());
487 setMailAction(VacationUtils::defaultMailAction(),
QString());
488 mStartTimeActive->setChecked(
false);
489 mEndTimeActive->setChecked(
false);
490 mStartTime->setTime(
QTime());
491 mEndTime->setTime(
QTime());
492 mStartDate->setDate(
QDate());
493 mEndDate->setDate(
QDate());
494 setDomainCheck(
false);
495 mDomainEdit->clear();
QByteArray::const_iterator cbegin() const const
QByteArray::const_iterator cend() const const
void push_back(const T &value)
void dateEdited(const QDate &date)
bool isValid() const const
void textChanged(const QString &text)
QString i18np(const char *singular, const char *plural, const TYPE &arg...)
QString join(const QString &separator) const const
bool isEmpty() const const
QString trimmed() const const
void dateChanged(const QDate &date)
void timeChanged(const QTime &time)
QString i18n(const char *text, const TYPE &arg...)
bool setDate(int year, int month, int day)
const QList< QKeySequence > & end()
QByteArray toLatin1() const const
The SieveImapAccountSettings class.
void timeEdited(const QTime &time)
void currentIndexChanged(int index)