mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-01-09 06:28:21 -05:00
98 lines
2.6 KiB
C++
98 lines
2.6 KiB
C++
/*
|
|
* Copyright (C) 2013 Michael Curtis <michael@moltenmercury.org>
|
|
* Copyright (C) 2014 Felix Geyer <debfx@fobos.de>
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 2 or (at your option)
|
|
* version 3 of the License.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "PasswordComboBox.h"
|
|
|
|
#include <QLineEdit>
|
|
|
|
#include "core/PasswordGenerator.h"
|
|
|
|
PasswordComboBox::PasswordComboBox(QWidget* parent)
|
|
: QComboBox(parent)
|
|
, m_generator(nullptr)
|
|
, m_alternatives(10)
|
|
{
|
|
setEditable(true);
|
|
setEcho(false);
|
|
}
|
|
|
|
PasswordComboBox::~PasswordComboBox()
|
|
{
|
|
}
|
|
|
|
void PasswordComboBox::setEcho(bool echo)
|
|
{
|
|
lineEdit()->setEchoMode(echo ? QLineEdit::Normal : QLineEdit::Password);
|
|
|
|
QString current = currentText();
|
|
|
|
if (echo) {
|
|
// add fake item to show visual indication that a popup is available
|
|
addItem("");
|
|
|
|
#ifdef Q_OS_MAC
|
|
// Qt on Mac OS doesn't seem to know the generic monospace family (tested with 4.8.6)
|
|
setStyleSheet("QComboBox { font-family: monospace,Menlo,Monaco; }");
|
|
#else
|
|
setStyleSheet("QComboBox { font-family: monospace,Courier New; }");
|
|
#endif
|
|
}
|
|
else {
|
|
// clear items so the combobox indicates that no popup menu is available
|
|
clear();
|
|
|
|
setStyleSheet("QComboBox { font-family: initial; }");
|
|
}
|
|
|
|
setEditText(current);
|
|
}
|
|
|
|
void PasswordComboBox::setGenerator(PasswordGenerator* generator)
|
|
{
|
|
m_generator = generator;
|
|
}
|
|
|
|
void PasswordComboBox::setNumberAlternatives(int alternatives)
|
|
{
|
|
m_alternatives = alternatives;
|
|
}
|
|
|
|
void PasswordComboBox::showPopup()
|
|
{
|
|
// no point in showing a bunch of hidden passwords
|
|
if (lineEdit()->echoMode() == QLineEdit::Password) {
|
|
hidePopup();
|
|
return;
|
|
}
|
|
|
|
// keep existing password as the first item in the popup
|
|
QString current = currentText();
|
|
clear();
|
|
addItem(current);
|
|
|
|
if (m_generator && m_generator->isValid()) {
|
|
for (int alternative = 0; alternative < m_alternatives; alternative++) {
|
|
QString password = m_generator->generatePassword();
|
|
|
|
addItem(password);
|
|
}
|
|
}
|
|
|
|
QComboBox::showPopup();
|
|
}
|