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

0001 /*
0002     SPDX-FileCopyrightText: 2019 Thomas Baumgart <tbaumgart@kde.org>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "passwordtoggle.h"
0007 
0008 // ----------------------------------------------------------------------------
0009 // QT Includes
0010 
0011 #include <QLineEdit>
0012 #include <QAction>
0013 
0014 // ----------------------------------------------------------------------------
0015 // KDE Includes
0016 
0017 #include <KLocalizedString>
0018 
0019 
0020 // ----------------------------------------------------------------------------
0021 // Project Includes
0022 
0023 #include "icons/icons.h"
0024 
0025 using namespace Icons;
0026 
0027 PasswordToggle::PasswordToggle(QLineEdit* parent)
0028     : QObject(parent)
0029     , m_lineEdit(parent)
0030 {
0031     m_toggleAction = m_lineEdit->addAction(Icons::get(Icon::Visibility), QLineEdit::TrailingPosition);
0032     m_toggleAction->setVisible(false);
0033     m_toggleAction->setToolTip(i18n("Change the visibility of the password"));
0034     connect(m_lineEdit, &QLineEdit::textChanged, this, &PasswordToggle::toggleEchoModeAction);
0035     connect(m_toggleAction, &QAction::triggered, this, &PasswordToggle::toggleEchoMode);
0036 }
0037 
0038 void PasswordToggle::toggleEchoModeAction(const QString& text)
0039 {
0040     m_toggleAction->setVisible(!text.isEmpty());
0041 }
0042 
0043 void PasswordToggle::toggleEchoMode()
0044 {
0045     if (m_lineEdit->echoMode() == QLineEdit::Password) {
0046         m_lineEdit->setEchoMode(QLineEdit::Normal);
0047         m_toggleAction->setIcon(Icons::get(Icon::NoVisibility));
0048     } else if (m_lineEdit->echoMode() == QLineEdit::Normal) {
0049         m_lineEdit->setEchoMode(QLineEdit::Password);
0050         m_toggleAction->setIcon(Icons::get(Icon::Visibility));
0051     }
0052 }
0053