File indexing completed on 2024-05-12 16:27:12

0001 /*
0002    SPDX-FileCopyrightText: 2022-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "channelnamevalidlinewidget.h"
0008 #include "rocketchataccount.h"
0009 
0010 #include <KColorScheme>
0011 #include <KLocalizedString>
0012 #include <KStatefulBrush>
0013 #include <QLabel>
0014 #include <QVBoxLayout>
0015 
0016 ChannelNameValidLineWidget::ChannelNameValidLineWidget(RocketChatAccount *account, QWidget *parent)
0017     : QWidget{parent}
0018     , mChannelNameValidLineEdit(new ChannelNameValidLineEdit(account, this))
0019     , mChannelNameLabel(new QLabel(this))
0020 {
0021     auto mainLayout = new QVBoxLayout(this);
0022     mainLayout->setObjectName(QStringLiteral("mainLayout"));
0023     mainLayout->setContentsMargins(QMargins{});
0024 
0025     mChannelNameValidLineEdit->setObjectName(QStringLiteral("mChannelNameValidLineEdit"));
0026     mainLayout->addWidget(mChannelNameValidLineEdit);
0027 
0028     mChannelNameLabel->setObjectName(QStringLiteral("mChannelNameLabel"));
0029     mChannelNameLabel->setTextFormat(Qt::PlainText);
0030 
0031     const KStatefulBrush bgBrush(KColorScheme::View, KColorScheme::NegativeText);
0032     const QColor color = bgBrush.brush(palette()).color();
0033 
0034     QPalette pal = mChannelNameLabel->palette();
0035     pal.setColor(QPalette::WindowText, color);
0036     mChannelNameLabel->setPalette(pal);
0037     mChannelNameLabel->setAutoFillBackground(true);
0038 
0039     mChannelNameLabel->hide();
0040     mainLayout->addWidget(mChannelNameLabel);
0041     connect(mChannelNameValidLineEdit, &ChannelNameValidLineEdit::channelIsValid, this, &ChannelNameValidLineWidget::slotChannelIsValid);
0042     if (account) {
0043         mValidCharacters = account->ruqolaServerConfig()->channelNameValidation();
0044     }
0045 }
0046 
0047 ChannelNameValidLineWidget::~ChannelNameValidLineWidget() = default;
0048 
0049 void ChannelNameValidLineWidget::slotChannelIsValid(ChannelNameValidLineEdit::ChannelNameStatus status)
0050 {
0051     bool isValid = false;
0052     switch (status) {
0053     case ChannelNameValidLineEdit::ChannelNameStatus::Unknown:
0054         isValid = false;
0055         mChannelNameLabel->setHidden(true);
0056         break;
0057     case ChannelNameValidLineEdit::ChannelNameStatus::Valid:
0058         isValid = true;
0059         mChannelNameLabel->setHidden(true);
0060         break;
0061     case ChannelNameValidLineEdit::ChannelNameStatus::AlreadyExistingName:
0062         mChannelNameLabel->setText(i18n("%1 name is already used.", mChannelNameValidLineEdit->text()));
0063         mChannelNameLabel->setHidden(false);
0064         isValid = false;
0065         break;
0066     case ChannelNameValidLineEdit::ChannelNameStatus::InvalidCharacters:
0067         isValid = false;
0068         mChannelNameLabel->setText(mValidCharacters.isEmpty() ? i18n("Invalid characters found.")
0069                                                               : i18n("Invalid characters found. (Valid characters: %1)", mValidCharacters));
0070         mChannelNameLabel->setHidden(false);
0071         break;
0072     }
0073     Q_EMIT channelIsValid(isValid);
0074 }
0075 
0076 QString ChannelNameValidLineWidget::text() const
0077 {
0078     return mChannelNameValidLineEdit->text();
0079 }
0080 
0081 #include "moc_channelnamevalidlinewidget.cpp"