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 "addresslineedit.h"
0007 #include <KStatefulBrush>
0008 
0009 #include <KColorScheme>
0010 #include <KLineEditEventHandler>
0011 #include <KLocalizedString>
0012 #include <PimCommon/LineEditWithCompleterNg>
0013 #include <QHBoxLayout>
0014 #include <QLineEdit>
0015 
0016 using namespace KSieveUi;
0017 
0018 AddressLineEdit::AddressLineEdit(QWidget *parent)
0019     : AbstractSelectEmailLineEdit(parent)
0020     , mLineEdit(new QLineEdit(this))
0021 {
0022     auto mainLayout = new QHBoxLayout(this);
0023     mainLayout->setContentsMargins({});
0024     KLineEditEventHandler::catchReturnKey(mLineEdit);
0025     mainLayout->addWidget(mLineEdit);
0026     mLineEdit->setClearButtonEnabled(true);
0027     mLineEdit->setPlaceholderText(i18n("Define Email Address..."));
0028     connect(mLineEdit, &QLineEdit::textChanged, this, &AddressLineEdit::slotTextChanged);
0029     verifyAddress();
0030 }
0031 
0032 AddressLineEdit::~AddressLineEdit() = default;
0033 
0034 void AddressLineEdit::slotTextChanged()
0035 {
0036     verifyAddress();
0037     Q_EMIT valueChanged();
0038 }
0039 
0040 void AddressLineEdit::verifyAddress()
0041 {
0042 #ifndef QT_NO_STYLE_STYLESHEET
0043     QString styleSheet;
0044     const QString lineEditText = text();
0045     mEmailIsInvalid = !lineEditText.contains(QLatin1Char('@'));
0046     // Fix check multi address
0047     if (mNegativeBackground.isEmpty()) {
0048         KStatefulBrush bgBrush = KStatefulBrush(KColorScheme::View, KColorScheme::NegativeText);
0049         mNegativeBackground = QStringLiteral("QLineEdit{ background-color:%1 }").arg(bgBrush.brush(palette()).color().name());
0050     }
0051     if (mEmailIsInvalid) {
0052         styleSheet = mNegativeBackground;
0053     }
0054     mLineEdit->setStyleSheet(styleSheet);
0055 #endif
0056 }
0057 
0058 void AddressLineEdit::focusOutEvent(QFocusEvent *ev)
0059 {
0060     verifyAddress();
0061     AbstractSelectEmailLineEdit::focusOutEvent(ev);
0062 }
0063 
0064 void AddressLineEdit::setText(const QString &str)
0065 {
0066     mLineEdit->setText(str);
0067 }
0068 
0069 QString AddressLineEdit::text() const
0070 {
0071     return mLineEdit->text();
0072 }
0073 
0074 bool AddressLineEdit::isValid() const
0075 {
0076     return !mEmailIsInvalid;
0077 }
0078 
0079 #include "moc_addresslineedit.cpp"