mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-11-30 03:16:42 -05:00
Merge branch 'develop' into feature/yubikey
This commit is contained in:
commit
15dd783d2c
119 changed files with 616 additions and 381 deletions
|
|
@ -101,7 +101,7 @@ bool Application::event(QEvent* event)
|
|||
{
|
||||
// Handle Apple QFileOpenEvent from finder (double click on .kdbx file)
|
||||
if (event->type() == QEvent::FileOpen) {
|
||||
Q_EMIT openFile(static_cast<QFileOpenEvent*>(event)->file());
|
||||
emit openFile(static_cast<QFileOpenEvent*>(event)->file());
|
||||
return true;
|
||||
}
|
||||
#ifdef Q_OS_MAC
|
||||
|
|
@ -153,7 +153,7 @@ void Application::handleUnixSignal(int sig)
|
|||
case SIGTERM:
|
||||
{
|
||||
char buf = 0;
|
||||
::write(unixSignalSocket[0], &buf, sizeof(buf));
|
||||
Q_UNUSED(::write(unixSignalSocket[0], &buf, sizeof(buf)));
|
||||
return;
|
||||
}
|
||||
case SIGHUP:
|
||||
|
|
@ -165,7 +165,7 @@ void Application::quitBySignal()
|
|||
{
|
||||
m_unixSignalNotifier->setEnabled(false);
|
||||
char buf;
|
||||
::read(unixSignalSocket[1], &buf, sizeof(buf));
|
||||
Q_UNUSED(::read(unixSignalSocket[1], &buf, sizeof(buf)));
|
||||
|
||||
if (nullptr != m_mainWindow)
|
||||
static_cast<MainWindow*>(m_mainWindow)->appExit();
|
||||
|
|
|
|||
|
|
@ -34,10 +34,10 @@ public:
|
|||
|
||||
bool event(QEvent* event) override;
|
||||
|
||||
Q_SIGNALS:
|
||||
signals:
|
||||
void openFile(const QString& filename);
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
#if defined(Q_OS_UNIX)
|
||||
void quitBySignal();
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -31,10 +31,10 @@ public:
|
|||
|
||||
static Clipboard* instance();
|
||||
|
||||
public Q_SLOTS:
|
||||
public slots:
|
||||
void clearCopiedText();
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void clearClipboard();
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ public:
|
|||
private:
|
||||
QScopedPointer<Ui::CloneDialog> m_ui;
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void cloneEntry();
|
||||
|
||||
protected:
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ void DatabaseRepairWidget::openDatabase()
|
|||
QString errorMsg;
|
||||
if (!key.load(keyFilename, &errorMsg)) {
|
||||
MessageBox::warning(this, tr("Error"), tr("Can't open key file").append(":\n").append(errorMsg));
|
||||
Q_EMIT editFinished(false);
|
||||
emit editFinished(false);
|
||||
return;
|
||||
}
|
||||
masterKey.addKey(key);
|
||||
|
|
@ -62,7 +62,7 @@ void DatabaseRepairWidget::openDatabase()
|
|||
if (!file.open(QIODevice::ReadOnly)) {
|
||||
MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n")
|
||||
.append(file.errorString()));
|
||||
Q_EMIT editFinished(false);
|
||||
emit editFinished(false);
|
||||
return;
|
||||
}
|
||||
if (m_db) {
|
||||
|
|
@ -75,21 +75,21 @@ void DatabaseRepairWidget::openDatabase()
|
|||
switch (repairResult) {
|
||||
case KeePass2Repair::NothingTodo:
|
||||
MessageBox::information(this, tr("Error"), tr("Database opened fine. Nothing to do."));
|
||||
Q_EMIT editFinished(false);
|
||||
emit editFinished(false);
|
||||
return;
|
||||
case KeePass2Repair::UnableToOpen:
|
||||
MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n")
|
||||
.append(repair.errorString()));
|
||||
Q_EMIT editFinished(false);
|
||||
emit editFinished(false);
|
||||
return;
|
||||
case KeePass2Repair::RepairSuccess:
|
||||
m_db = repair.database();
|
||||
MessageBox::warning(this, tr("Success"), tr("The database has been successfully repaired\nYou can now save it."));
|
||||
Q_EMIT editFinished(true);
|
||||
emit editFinished(true);
|
||||
return;
|
||||
case KeePass2Repair::RepairFailed:
|
||||
MessageBox::warning(this, tr("Error"), tr("Unable to repair the database."));
|
||||
Q_EMIT editFinished(false);
|
||||
emit editFinished(false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -97,9 +97,9 @@ void DatabaseRepairWidget::openDatabase()
|
|||
void DatabaseRepairWidget::processEditFinished(bool result)
|
||||
{
|
||||
if (result) {
|
||||
Q_EMIT success();
|
||||
emit success();
|
||||
}
|
||||
else {
|
||||
Q_EMIT error();
|
||||
emit error();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,14 +27,14 @@ class DatabaseRepairWidget : public DatabaseOpenWidget
|
|||
public:
|
||||
explicit DatabaseRepairWidget(QWidget* parent = nullptr);
|
||||
|
||||
Q_SIGNALS:
|
||||
signals:
|
||||
void success();
|
||||
void error();
|
||||
|
||||
protected:
|
||||
void openDatabase() override;
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void processEditFinished(bool result);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -124,12 +124,12 @@ void DatabaseSettingsWidget::save()
|
|||
truncateHistories();
|
||||
}
|
||||
|
||||
Q_EMIT editFinished(true);
|
||||
emit editFinished(true);
|
||||
}
|
||||
|
||||
void DatabaseSettingsWidget::reject()
|
||||
{
|
||||
Q_EMIT editFinished(false);
|
||||
emit editFinished(false);
|
||||
}
|
||||
|
||||
void DatabaseSettingsWidget::transformRoundsBenchmark()
|
||||
|
|
|
|||
|
|
@ -38,10 +38,10 @@ public:
|
|||
|
||||
void load(Database* db);
|
||||
|
||||
Q_SIGNALS:
|
||||
signals:
|
||||
void editFinished(bool accepted);
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void save();
|
||||
void reject();
|
||||
void transformRoundsBenchmark();
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ void DatabaseTabWidget::openDatabase(const QString& fileName, const QString& pw,
|
|||
QFileInfo fileInfo(fileName);
|
||||
QString canonicalFilePath = fileInfo.canonicalFilePath();
|
||||
if (canonicalFilePath.isEmpty()) {
|
||||
Q_EMIT messageGlobal(tr("File not found!"), MessageWidget::Error);
|
||||
emit messageGlobal(tr("File not found!"), MessageWidget::Error);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -141,7 +141,7 @@ void DatabaseTabWidget::openDatabase(const QString& fileName, const QString& pw,
|
|||
if (!file.open(QIODevice::ReadWrite)) {
|
||||
if (!file.open(QIODevice::ReadOnly)) {
|
||||
// can't open
|
||||
Q_EMIT messageGlobal(
|
||||
emit messageGlobal(
|
||||
tr("Unable to open the database.").append("\n").append(file.errorString()), MessageWidget::Error);
|
||||
return;
|
||||
}
|
||||
|
|
@ -198,7 +198,7 @@ void DatabaseTabWidget::openDatabase(const QString& fileName, const QString& pw,
|
|||
insertDatabase(db, dbStruct);
|
||||
|
||||
if (dbStruct.readOnly) {
|
||||
Q_EMIT messageTab(tr("File opened in read only mode."), MessageWidget::Warning);
|
||||
emit messageTab(tr("File opened in read only mode."), MessageWidget::Warning);
|
||||
}
|
||||
|
||||
updateLastDatabases(dbStruct.filePath);
|
||||
|
|
@ -209,7 +209,7 @@ void DatabaseTabWidget::openDatabase(const QString& fileName, const QString& pw,
|
|||
else {
|
||||
dbStruct.dbWidget->switchToOpenDatabase(dbStruct.filePath);
|
||||
}
|
||||
Q_EMIT messageDismissGlobal();
|
||||
emit messageDismissGlobal();
|
||||
}
|
||||
|
||||
void DatabaseTabWidget::mergeDatabase()
|
||||
|
|
@ -314,7 +314,7 @@ void DatabaseTabWidget::deleteDatabase(Database* db)
|
|||
delete db;
|
||||
|
||||
if (emitDatabaseWithFileClosed) {
|
||||
Q_EMIT databaseWithFileClosed(filePath);
|
||||
emit databaseWithFileClosed(filePath);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -501,7 +501,7 @@ void DatabaseTabWidget::exportToCsv()
|
|||
|
||||
CsvExporter csvExporter;
|
||||
if (!csvExporter.exportDatabase(fileName, db)) {
|
||||
Q_EMIT messageGlobal(
|
||||
emit messageGlobal(
|
||||
tr("Writing the CSV file failed.").append("\n")
|
||||
.append(csvExporter.errorString()), MessageWidget::Error);
|
||||
}
|
||||
|
|
@ -563,7 +563,7 @@ void DatabaseTabWidget::updateTabName(Database* db)
|
|||
}
|
||||
|
||||
setTabText(index, tabName);
|
||||
Q_EMIT tabNameChanged();
|
||||
emit tabNameChanged();
|
||||
}
|
||||
|
||||
void DatabaseTabWidget::updateTabNameFromDbSender()
|
||||
|
|
@ -743,7 +743,7 @@ void DatabaseTabWidget::lockDatabases()
|
|||
// database has changed so we can't use the db variable anymore
|
||||
updateTabName(dbWidget->database());
|
||||
|
||||
Q_EMIT databaseLocked(dbWidget);
|
||||
emit databaseLocked(dbWidget);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -801,12 +801,12 @@ void DatabaseTabWidget::changeDatabase(Database* newDb, bool unsavedChanges)
|
|||
|
||||
void DatabaseTabWidget::emitActivateDatabaseChanged()
|
||||
{
|
||||
Q_EMIT activateDatabaseChanged(currentDatabaseWidget());
|
||||
emit activateDatabaseChanged(currentDatabaseWidget());
|
||||
}
|
||||
|
||||
void DatabaseTabWidget::emitDatabaseUnlockedFromDbWidgetSender()
|
||||
{
|
||||
Q_EMIT databaseUnlocked(static_cast<DatabaseWidget*>(sender()));
|
||||
emit databaseUnlocked(static_cast<DatabaseWidget*>(sender()));
|
||||
}
|
||||
|
||||
void DatabaseTabWidget::connectDatabase(Database* newDb, Database* oldDb)
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ public:
|
|||
|
||||
static const int LastDatabasesCount;
|
||||
|
||||
public Q_SLOTS:
|
||||
public slots:
|
||||
void newDatabase();
|
||||
void openDatabase();
|
||||
void mergeDatabase();
|
||||
|
|
@ -80,7 +80,7 @@ public Q_SLOTS:
|
|||
void performGlobalAutoType();
|
||||
void lockDatabases();
|
||||
|
||||
Q_SIGNALS:
|
||||
signals:
|
||||
void tabNameChanged();
|
||||
void databaseWithFileClosed(QString filePath);
|
||||
void activateDatabaseChanged(DatabaseWidget* dbWidget);
|
||||
|
|
@ -91,7 +91,7 @@ Q_SIGNALS:
|
|||
void messageDismissGlobal();
|
||||
void messageDismissTab();
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void updateTabName(Database* db);
|
||||
void updateTabNameFromDbSender();
|
||||
void updateTabNameFromDbWidgetSender();
|
||||
|
|
|
|||
|
|
@ -263,7 +263,7 @@ void DatabaseWidget::clearAllWidgets()
|
|||
|
||||
void DatabaseWidget::emitCurrentModeChanged()
|
||||
{
|
||||
Q_EMIT currentModeChanged(currentMode());
|
||||
emit currentModeChanged(currentMode());
|
||||
}
|
||||
|
||||
Database* DatabaseWidget::database()
|
||||
|
|
@ -309,7 +309,7 @@ void DatabaseWidget::replaceDatabase(Database* db)
|
|||
Database* oldDb = m_db;
|
||||
m_db = db;
|
||||
m_groupView->changeDatabase(m_db);
|
||||
Q_EMIT databaseChanged(m_db, m_databaseModified);
|
||||
emit databaseChanged(m_db, m_databaseModified);
|
||||
delete oldDb;
|
||||
}
|
||||
|
||||
|
|
@ -700,7 +700,7 @@ void DatabaseWidget::updateMasterKey(bool accepted)
|
|||
}
|
||||
}
|
||||
else if (!m_db->hasKey()) {
|
||||
Q_EMIT closeRequest();
|
||||
emit closeRequest();
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -712,7 +712,7 @@ void DatabaseWidget::openDatabase(bool accepted)
|
|||
if (accepted) {
|
||||
replaceDatabase(static_cast<DatabaseOpenWidget*>(sender())->database());
|
||||
setCurrentWidget(m_mainWidget);
|
||||
Q_EMIT unlockedDatabase();
|
||||
emit unlockedDatabase();
|
||||
|
||||
// We won't need those anymore and KeePass1OpenWidget closes
|
||||
// the file in its dtor.
|
||||
|
|
@ -727,7 +727,7 @@ void DatabaseWidget::openDatabase(bool accepted)
|
|||
if (m_databaseOpenWidget->database()) {
|
||||
delete m_databaseOpenWidget->database();
|
||||
}
|
||||
Q_EMIT closeRequest();
|
||||
emit closeRequest();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -750,13 +750,13 @@ void DatabaseWidget::mergeDatabase(bool accepted)
|
|||
}
|
||||
|
||||
setCurrentWidget(m_mainWidget);
|
||||
Q_EMIT databaseMerged(m_db);
|
||||
emit databaseMerged(m_db);
|
||||
}
|
||||
|
||||
void DatabaseWidget::unlockDatabase(bool accepted)
|
||||
{
|
||||
if (!accepted) {
|
||||
Q_EMIT closeRequest();
|
||||
emit closeRequest();
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -775,7 +775,7 @@ void DatabaseWidget::unlockDatabase(bool accepted)
|
|||
|
||||
setCurrentWidget(m_mainWidget);
|
||||
m_unlockDatabaseWidget->clearForms();
|
||||
Q_EMIT unlockedDatabase();
|
||||
emit unlockedDatabase();
|
||||
|
||||
if (sender() == m_unlockDatabaseDialog) {
|
||||
QList<Database*> dbList;
|
||||
|
|
@ -888,7 +888,7 @@ void DatabaseWidget::search(const QString& searchtext)
|
|||
return;
|
||||
}
|
||||
|
||||
Q_EMIT searchModeAboutToActivate();
|
||||
emit searchModeAboutToActivate();
|
||||
|
||||
Qt::CaseSensitivity caseSensitive = m_searchCaseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive;
|
||||
|
||||
|
|
@ -907,7 +907,7 @@ void DatabaseWidget::search(const QString& searchtext)
|
|||
|
||||
m_searchingLabel->setVisible(true);
|
||||
|
||||
Q_EMIT searchModeActivated();
|
||||
emit searchModeActivated();
|
||||
}
|
||||
|
||||
void DatabaseWidget::setSearchCaseSensitive(bool state)
|
||||
|
|
@ -934,12 +934,12 @@ void DatabaseWidget::endSearch()
|
|||
{
|
||||
if (isInSearchMode())
|
||||
{
|
||||
Q_EMIT listModeAboutToActivate();
|
||||
emit listModeAboutToActivate();
|
||||
|
||||
// Show the normal entry view of the current group
|
||||
m_entryView->setGroup(currentGroup());
|
||||
|
||||
Q_EMIT listModeActivated();
|
||||
emit listModeActivated();
|
||||
}
|
||||
|
||||
m_searchingLabel->setVisible(false);
|
||||
|
|
@ -950,12 +950,12 @@ void DatabaseWidget::endSearch()
|
|||
|
||||
void DatabaseWidget::emitGroupContextMenuRequested(const QPoint& pos)
|
||||
{
|
||||
Q_EMIT groupContextMenuRequested(m_groupView->viewport()->mapToGlobal(pos));
|
||||
emit groupContextMenuRequested(m_groupView->viewport()->mapToGlobal(pos));
|
||||
}
|
||||
|
||||
void DatabaseWidget::emitEntryContextMenuRequested(const QPoint& pos)
|
||||
{
|
||||
Q_EMIT entryContextMenuRequested(m_entryView->viewport()->mapToGlobal(pos));
|
||||
emit entryContextMenuRequested(m_entryView->viewport()->mapToGlobal(pos));
|
||||
}
|
||||
|
||||
bool DatabaseWidget::dbHasKey() const
|
||||
|
|
|
|||
|
|
@ -29,12 +29,12 @@ public:
|
|||
explicit DatabaseWidgetStateSync(QObject* parent = nullptr);
|
||||
~DatabaseWidgetStateSync();
|
||||
|
||||
public Q_SLOTS:
|
||||
public slots:
|
||||
void setActive(DatabaseWidget* dbWidget);
|
||||
void restoreListView();
|
||||
void restoreSearchView();
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void blockUpdates();
|
||||
void updateSplitterSizes();
|
||||
void updateColumnSizes();
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ protected:
|
|||
void dropEvent(QDropEvent* event) override;
|
||||
void tabLayoutChange() override;
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void dragSwitchTab();
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -48,9 +48,9 @@ EditWidgetIcons::EditWidgetIcons(QWidget* parent)
|
|||
, m_defaultIconModel(new DefaultIconModel(this))
|
||||
, m_customIconModel(new CustomIconModel(this))
|
||||
#ifdef WITH_XC_HTTP
|
||||
, m_httpClient(nullptr)
|
||||
, m_fallbackToGoogle(true)
|
||||
, m_redirectCount(0)
|
||||
, m_httpClient(nullptr)
|
||||
#endif
|
||||
{
|
||||
m_ui->setupUi(this);
|
||||
|
|
@ -149,6 +149,7 @@ void EditWidgetIcons::setUrl(const QString& url)
|
|||
m_ui->faviconButton->setVisible(!url.isEmpty());
|
||||
resetFaviconDownload();
|
||||
#else
|
||||
Q_UNUSED(url);
|
||||
m_ui->faviconButton->setVisible(false);
|
||||
#endif
|
||||
}
|
||||
|
|
@ -275,7 +276,7 @@ void EditWidgetIcons::addCustomIcon()
|
|||
m_ui->customIconsView->setCurrentIndex(index);
|
||||
}
|
||||
else {
|
||||
Q_EMIT messageEditEntry(tr("Can't read icon"), MessageWidget::Error);
|
||||
emit messageEditEntry(tr("Can't read icon"), MessageWidget::Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,14 +63,14 @@ public:
|
|||
void reset();
|
||||
void load(const Uuid& currentUuid, Database* database, const IconStruct& iconStruct, const QString& url = "");
|
||||
|
||||
public Q_SLOTS:
|
||||
public slots:
|
||||
void setUrl(const QString& url);
|
||||
|
||||
Q_SIGNALS:
|
||||
signals:
|
||||
void messageEditEntry(QString, MessageWidget::MessageType);
|
||||
void messageEditEntryDismiss();
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void downloadFavicon();
|
||||
#ifdef WITH_XC_HTTP
|
||||
void fetchFavicon(const QUrl& url);
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
#include "KMessageWidget.h"
|
||||
|
||||
#include "core/FilePath.h"
|
||||
#include "core/Global.h"
|
||||
|
||||
#include <QAction>
|
||||
#include <QEvent>
|
||||
|
|
@ -117,7 +118,8 @@ void KMessageWidgetPrivate::createLayout()
|
|||
qDeleteAll(buttons);
|
||||
buttons.clear();
|
||||
|
||||
Q_FOREACH (QAction *action, q->actions()) {
|
||||
const auto actions = q->actions();
|
||||
for (QAction *action: actions) {
|
||||
QToolButton *button = new QToolButton(content);
|
||||
button->setDefaultAction(action);
|
||||
button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
|
||||
|
|
@ -137,7 +139,7 @@ void KMessageWidgetPrivate::createLayout()
|
|||
|
||||
QHBoxLayout *buttonLayout = new QHBoxLayout;
|
||||
buttonLayout->addStretch();
|
||||
Q_FOREACH (QToolButton *button, buttons) {
|
||||
for (QToolButton* button: asConst(buttons)) {
|
||||
// For some reason, calling show() is necessary if wordwrap is true,
|
||||
// otherwise the buttons do not show up. It is not needed if
|
||||
// wordwrap is false.
|
||||
|
|
@ -151,7 +153,7 @@ void KMessageWidgetPrivate::createLayout()
|
|||
layout->addWidget(iconLabel);
|
||||
layout->addWidget(textLabel);
|
||||
|
||||
Q_FOREACH (QToolButton *button, buttons) {
|
||||
for (QToolButton* button: asConst(buttons)) {
|
||||
layout->addWidget(button);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -224,7 +224,7 @@ public:
|
|||
*/
|
||||
bool isShowAnimationRunning() const;
|
||||
|
||||
public Q_SLOTS:
|
||||
public slots:
|
||||
/**
|
||||
* Set the text of the message widget to @p text.
|
||||
* If the message widget is already visible, the text changes on the fly.
|
||||
|
|
@ -277,7 +277,7 @@ public Q_SLOTS:
|
|||
*/
|
||||
void setIcon(const QIcon &icon);
|
||||
|
||||
Q_SIGNALS:
|
||||
signals:
|
||||
/**
|
||||
* This signal is emitted when the user clicks a link in the text label.
|
||||
* The URL referred to by the href anchor is passed in contents.
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ void KeePass1OpenWidget::openDatabase()
|
|||
|
||||
if (m_db) {
|
||||
m_db->metadata()->setName(QFileInfo(m_filename).completeBaseName());
|
||||
Q_EMIT editFinished(true);
|
||||
emit editFinished(true);
|
||||
}
|
||||
else {
|
||||
m_ui->messageWidget->showMessage(tr("Unable to open the database.").append("\n")
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ public:
|
|||
protected:
|
||||
void resizeEvent(QResizeEvent* event) override;
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void updateCloseButton(const QString& text);
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ public:
|
|||
MainWindow();
|
||||
~MainWindow();
|
||||
|
||||
public Q_SLOTS:
|
||||
public slots:
|
||||
void openDatabase(const QString& fileName, const QString& pw = QString(),
|
||||
const QString& keyFile = QString());
|
||||
void appExit();
|
||||
|
|
@ -54,7 +54,7 @@ protected:
|
|||
void closeEvent(QCloseEvent* event) override;
|
||||
void changeEvent(QEvent* event) override;
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void setMenuActionState(DatabaseWidget::Mode mode = DatabaseWidget::None);
|
||||
void updateWindowTitle();
|
||||
void showAboutDialog();
|
||||
|
|
|
|||
|
|
@ -123,9 +123,7 @@
|
|||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="WelcomeWidget" name="welcomeWidget" native="true">
|
||||
<zorder>horizontalSpacer_2</zorder>
|
||||
</widget>
|
||||
<widget class="WelcomeWidget" name="welcomeWidget" native="true"/>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ class MessageWidget : public KMessageWidget
|
|||
public:
|
||||
explicit MessageWidget(QWidget* parent = 0);
|
||||
|
||||
public Q_SLOTS:
|
||||
public slots:
|
||||
void showMessage(const QString& text, MessageWidget::MessageType type);
|
||||
void hideMessage();
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ public:
|
|||
void setNumberAlternatives(int alternatives);
|
||||
void showPopup();
|
||||
|
||||
public Q_SLOTS:
|
||||
public slots:
|
||||
void setEcho(bool echo);
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ void PasswordEdit::setShowPassword(bool show)
|
|||
}
|
||||
}
|
||||
updateStylesheet();
|
||||
Q_EMIT showPasswordChanged(show);
|
||||
emit showPasswordChanged(show);
|
||||
}
|
||||
|
||||
bool PasswordEdit::passwordsEqual() const
|
||||
|
|
|
|||
|
|
@ -31,13 +31,13 @@ public:
|
|||
explicit PasswordEdit(QWidget* parent = nullptr);
|
||||
void enableVerifyMode(PasswordEdit* baseEdit);
|
||||
|
||||
public Q_SLOTS:
|
||||
public slots:
|
||||
void setShowPassword(bool show);
|
||||
|
||||
Q_SIGNALS:
|
||||
signals:
|
||||
void showPasswordChanged(bool show);
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void updateStylesheet();
|
||||
void autocompletePassword(QString password);
|
||||
|
||||
|
|
|
|||
|
|
@ -145,8 +145,8 @@ void PasswordGeneratorWidget::generatePassword()
|
|||
void PasswordGeneratorWidget::applyPassword()
|
||||
{
|
||||
saveSettings();
|
||||
Q_EMIT appliedPassword(m_ui->editNewPassword->text());
|
||||
Q_EMIT dialogTerminated();
|
||||
emit appliedPassword(m_ui->editNewPassword->text());
|
||||
emit dialogTerminated();
|
||||
}
|
||||
|
||||
void PasswordGeneratorWidget::sliderMoved()
|
||||
|
|
|
|||
|
|
@ -43,11 +43,11 @@ public:
|
|||
void setStandaloneMode(bool standalone);
|
||||
void regeneratePassword();
|
||||
|
||||
Q_SIGNALS:
|
||||
signals:
|
||||
void appliedPassword(const QString& password);
|
||||
void dialogTerminated();
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void applyPassword();
|
||||
void generatePassword();
|
||||
void updateApplyEnabled(const QString& password);
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
#include "core/Config.h"
|
||||
#include "core/Translator.h"
|
||||
#include "core/FilePath.h"
|
||||
#include "core/Global.h"
|
||||
|
||||
class SettingsWidget::ExtraPage
|
||||
{
|
||||
|
|
@ -144,8 +145,9 @@ void SettingsWidget::loadSettings()
|
|||
m_secUi->passwordRepeatCheckBox->setChecked(config()->get("security/passwordsrepeat").toBool());
|
||||
|
||||
|
||||
Q_FOREACH (const ExtraPage& page, m_extraPages)
|
||||
for (const ExtraPage& page: asConst(m_extraPages)) {
|
||||
page.loadSettings();
|
||||
}
|
||||
|
||||
setCurrentPage(0);
|
||||
}
|
||||
|
|
@ -190,10 +192,11 @@ void SettingsWidget::saveSettings()
|
|||
config()->set("security/passwordscleartext", m_secUi->passwordCleartextCheckBox->isChecked());
|
||||
config()->set("security/passwordsrepeat", m_secUi->passwordRepeatCheckBox->isChecked());
|
||||
|
||||
Q_FOREACH (const ExtraPage& page, m_extraPages)
|
||||
for (const ExtraPage& page: asConst(m_extraPages)) {
|
||||
page.saveSettings();
|
||||
}
|
||||
|
||||
Q_EMIT editFinished(true);
|
||||
emit editFinished(true);
|
||||
}
|
||||
|
||||
void SettingsWidget::reject()
|
||||
|
|
@ -203,7 +206,7 @@ void SettingsWidget::reject()
|
|||
autoType()->registerGlobalShortcut(m_globalAutoTypeKey, m_globalAutoTypeModifiers);
|
||||
}
|
||||
|
||||
Q_EMIT editFinished(false);
|
||||
emit editFinished(false);
|
||||
}
|
||||
|
||||
void SettingsWidget::enableAutoSaveOnExit(bool checked)
|
||||
|
|
|
|||
|
|
@ -45,10 +45,10 @@ public:
|
|||
void addSettingsPage(ISettingsPage * page);
|
||||
void loadSettings();
|
||||
|
||||
Q_SIGNALS:
|
||||
signals:
|
||||
void editFinished(bool accepted);
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void saveSettings();
|
||||
void reject();
|
||||
void enableAutoSaveOnExit(bool checked);
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ void UnlockDatabaseDialog::complete(bool r)
|
|||
{
|
||||
if (r) {
|
||||
accept();
|
||||
Q_EMIT unlockDone(true);
|
||||
emit unlockDone(true);
|
||||
} else {
|
||||
reject();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,10 +36,10 @@ public:
|
|||
void clearForms();
|
||||
Database* database();
|
||||
|
||||
Q_SIGNALS:
|
||||
signals:
|
||||
void unlockDone(bool);
|
||||
|
||||
public Q_SLOTS:
|
||||
public slots:
|
||||
void complete(bool r);
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -64,5 +64,5 @@ void WelcomeWidget::openDatabaseFromFile(QListWidgetItem* item)
|
|||
if (item->text().isEmpty()) {
|
||||
return;
|
||||
}
|
||||
Q_EMIT openDatabaseFile(item->text());
|
||||
emit openDatabaseFile(item->text());
|
||||
}
|
||||
|
|
@ -33,13 +33,13 @@ public:
|
|||
explicit WelcomeWidget(QWidget* parent = nullptr);
|
||||
~WelcomeWidget();
|
||||
|
||||
Q_SIGNALS:
|
||||
signals:
|
||||
void newDatabase();
|
||||
void openDatabase();
|
||||
void openDatabaseFile(QString);
|
||||
void importKeePass1Database();
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void openDatabaseFromFile(QListWidgetItem* item);
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ QVariant AutoTypeAssociationsModel::data(const QModelIndex& index, int role) con
|
|||
|
||||
void AutoTypeAssociationsModel::associationChange(int i)
|
||||
{
|
||||
Q_EMIT dataChanged(index(i, 0), index(i, columnCount() - 1));
|
||||
emit dataChanged(index(i, 0), index(i, columnCount() - 1));
|
||||
}
|
||||
|
||||
void AutoTypeAssociationsModel::associationAboutToAdd(int i)
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ public:
|
|||
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
|
||||
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
|
||||
|
||||
public Q_SLOTS:
|
||||
public slots:
|
||||
void associationChange(int i);
|
||||
void associationAboutToAdd(int i);
|
||||
void associationAdd();
|
||||
|
|
|
|||
|
|
@ -132,6 +132,8 @@ void EditEntryWidget::setupAdvanced()
|
|||
connect(m_advancedUi->addAttributeButton, SIGNAL(clicked()), SLOT(insertAttribute()));
|
||||
connect(m_advancedUi->editAttributeButton, SIGNAL(clicked()), SLOT(editCurrentAttribute()));
|
||||
connect(m_advancedUi->removeAttributeButton, SIGNAL(clicked()), SLOT(removeCurrentAttribute()));
|
||||
connect(m_advancedUi->protectAttributeButton, SIGNAL(toggled(bool)), SLOT(protectCurrentAttribute(bool)));
|
||||
connect(m_advancedUi->revealAttributeButton, SIGNAL(clicked(bool)), SLOT(revealCurrentAttribute()));
|
||||
connect(m_advancedUi->attributesView->selectionModel(),
|
||||
SIGNAL(currentChanged(QModelIndex,QModelIndex)),
|
||||
SLOT(updateCurrentAttribute()));
|
||||
|
|
@ -210,7 +212,7 @@ void EditEntryWidget::emitHistoryEntryActivated(const QModelIndex& index)
|
|||
Q_ASSERT(!m_history);
|
||||
|
||||
Entry* entry = m_historyModel->entryFromIndex(index);
|
||||
Q_EMIT historyEntryActivated(entry);
|
||||
emit historyEntryActivated(entry);
|
||||
}
|
||||
|
||||
void EditEntryWidget::histEntryActivated(const QModelIndex& index)
|
||||
|
|
@ -351,6 +353,11 @@ void EditEntryWidget::setForms(const Entry* entry, bool restore)
|
|||
m_advancedUi->attributesEdit->setEnabled(false);
|
||||
}
|
||||
|
||||
QList<int> sizes = m_advancedUi->attributesSplitter->sizes();
|
||||
sizes.replace(0, m_advancedUi->attributesSplitter->width() * 0.3);
|
||||
sizes.replace(1, m_advancedUi->attributesSplitter->width() * 0.7);
|
||||
m_advancedUi->attributesSplitter->setSizes(sizes);
|
||||
|
||||
IconStruct iconStruct;
|
||||
iconStruct.uuid = entry->iconUuid();
|
||||
iconStruct.number = entry->iconNumber();
|
||||
|
|
@ -400,7 +407,7 @@ void EditEntryWidget::saveEntry()
|
|||
if (m_history) {
|
||||
clear();
|
||||
hideMessage();
|
||||
Q_EMIT editFinished(false);
|
||||
emit editFinished(false);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -409,7 +416,7 @@ void EditEntryWidget::saveEntry()
|
|||
return;
|
||||
}
|
||||
|
||||
if (m_advancedUi->attributesView->currentIndex().isValid()) {
|
||||
if (m_advancedUi->attributesView->currentIndex().isValid() && m_advancedUi->attributesEdit->isEnabled()) {
|
||||
QString key = m_attributesModel->keyByIndex(m_advancedUi->attributesView->currentIndex());
|
||||
m_entryAttributes->set(key, m_advancedUi->attributesEdit->toPlainText(),
|
||||
m_entryAttributes->isProtected(key));
|
||||
|
|
@ -435,7 +442,7 @@ void EditEntryWidget::saveEntry()
|
|||
|
||||
clear();
|
||||
|
||||
Q_EMIT editFinished(true);
|
||||
emit editFinished(true);
|
||||
}
|
||||
|
||||
void EditEntryWidget::updateEntryData(Entry* entry) const
|
||||
|
|
@ -480,7 +487,7 @@ void EditEntryWidget::cancel()
|
|||
if (m_history) {
|
||||
clear();
|
||||
hideMessage();
|
||||
Q_EMIT editFinished(false);
|
||||
emit editFinished(false);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -491,7 +498,7 @@ void EditEntryWidget::cancel()
|
|||
|
||||
clear();
|
||||
|
||||
Q_EMIT editFinished(false);
|
||||
emit editFinished(false);
|
||||
}
|
||||
|
||||
void EditEntryWidget::clear()
|
||||
|
|
@ -578,46 +585,96 @@ void EditEntryWidget::removeCurrentAttribute()
|
|||
QModelIndex index = m_advancedUi->attributesView->currentIndex();
|
||||
|
||||
if (index.isValid()) {
|
||||
m_entryAttributes->remove(m_attributesModel->keyByIndex(index));
|
||||
if (MessageBox::question(this, tr("Confirm Remove"), tr("Are you sure you want to remove this attribute?"),
|
||||
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
|
||||
m_entryAttributes->remove(m_attributesModel->keyByIndex(index));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EditEntryWidget::updateCurrentAttribute()
|
||||
{
|
||||
QModelIndex newIndex = m_advancedUi->attributesView->currentIndex();
|
||||
QString newKey = m_attributesModel->keyByIndex(newIndex);
|
||||
|
||||
if (m_history) {
|
||||
if (newIndex.isValid()) {
|
||||
QString key = m_attributesModel->keyByIndex(newIndex);
|
||||
m_advancedUi->attributesEdit->setPlainText(m_entryAttributes->value(key));
|
||||
m_advancedUi->attributesEdit->setEnabled(true);
|
||||
if (!m_history && m_currentAttribute != newIndex) {
|
||||
// Save changes to the currently selected attribute if editing is enabled
|
||||
if (m_currentAttribute.isValid() && m_advancedUi->attributesEdit->isEnabled()) {
|
||||
QString currKey = m_attributesModel->keyByIndex(m_currentAttribute);
|
||||
m_entryAttributes->set(currKey, m_advancedUi->attributesEdit->toPlainText(),
|
||||
m_entryAttributes->isProtected(currKey));
|
||||
}
|
||||
}
|
||||
|
||||
displayAttribute(newIndex, m_entryAttributes->isProtected(newKey));
|
||||
|
||||
m_currentAttribute = newIndex;
|
||||
}
|
||||
|
||||
void EditEntryWidget::displayAttribute(QModelIndex index, bool showProtected)
|
||||
{
|
||||
// Block signals to prevent extra calls
|
||||
m_advancedUi->protectAttributeButton->blockSignals(true);
|
||||
|
||||
if (index.isValid()) {
|
||||
QString key = m_attributesModel->keyByIndex(index);
|
||||
if (showProtected) {
|
||||
m_advancedUi->attributesEdit->setPlainText(tr("[PROTECTED] Press reveal to view or edit"));
|
||||
m_advancedUi->attributesEdit->setEnabled(false);
|
||||
m_advancedUi->revealAttributeButton->setEnabled(true);
|
||||
m_advancedUi->protectAttributeButton->setChecked(true);
|
||||
}
|
||||
else {
|
||||
m_advancedUi->attributesEdit->setPlainText("");
|
||||
m_advancedUi->attributesEdit->setEnabled(false);
|
||||
m_advancedUi->attributesEdit->setPlainText(m_entryAttributes->value(key));
|
||||
m_advancedUi->attributesEdit->setEnabled(true);
|
||||
m_advancedUi->revealAttributeButton->setEnabled(false);
|
||||
m_advancedUi->protectAttributeButton->setChecked(false);
|
||||
}
|
||||
|
||||
// Don't allow editing in history view
|
||||
m_advancedUi->protectAttributeButton->setEnabled(!m_history);
|
||||
m_advancedUi->editAttributeButton->setEnabled(!m_history);
|
||||
m_advancedUi->removeAttributeButton->setEnabled(!m_history);
|
||||
}
|
||||
else {
|
||||
if (m_currentAttribute != newIndex) {
|
||||
if (m_currentAttribute.isValid()) {
|
||||
QString key = m_attributesModel->keyByIndex(m_currentAttribute);
|
||||
m_entryAttributes->set(key, m_advancedUi->attributesEdit->toPlainText(),
|
||||
m_entryAttributes->isProtected(key));
|
||||
}
|
||||
m_advancedUi->attributesEdit->setPlainText("");
|
||||
m_advancedUi->attributesEdit->setEnabled(false);
|
||||
m_advancedUi->revealAttributeButton->setEnabled(false);
|
||||
m_advancedUi->protectAttributeButton->setChecked(false);
|
||||
m_advancedUi->protectAttributeButton->setEnabled(false);
|
||||
m_advancedUi->editAttributeButton->setEnabled(false);
|
||||
m_advancedUi->removeAttributeButton->setEnabled(false);
|
||||
}
|
||||
|
||||
if (newIndex.isValid()) {
|
||||
QString key = m_attributesModel->keyByIndex(newIndex);
|
||||
m_advancedUi->attributesEdit->setPlainText(m_entryAttributes->value(key));
|
||||
m_advancedUi->attributesEdit->setEnabled(true);
|
||||
}
|
||||
else {
|
||||
m_advancedUi->attributesEdit->setPlainText("");
|
||||
m_advancedUi->attributesEdit->setEnabled(false);
|
||||
}
|
||||
m_advancedUi->protectAttributeButton->blockSignals(false);
|
||||
}
|
||||
|
||||
m_advancedUi->editAttributeButton->setEnabled(newIndex.isValid());
|
||||
m_advancedUi->removeAttributeButton->setEnabled(newIndex.isValid());
|
||||
m_currentAttribute = newIndex;
|
||||
void EditEntryWidget::protectCurrentAttribute(bool state)
|
||||
{
|
||||
QModelIndex index = m_advancedUi->attributesView->currentIndex();
|
||||
if (!m_history && index.isValid()) {
|
||||
QString key = m_attributesModel->keyByIndex(index);
|
||||
if (state) {
|
||||
// Save the current text and protect the attribute
|
||||
m_entryAttributes->set(key, m_advancedUi->attributesEdit->toPlainText(), true);
|
||||
} else {
|
||||
// Unprotect the current attribute value (don't save text as it is obscured)
|
||||
m_entryAttributes->set(key, m_entryAttributes->value(key), false);
|
||||
}
|
||||
|
||||
// Display the attribute
|
||||
displayAttribute(index, state);
|
||||
}
|
||||
}
|
||||
|
||||
void EditEntryWidget::revealCurrentAttribute()
|
||||
{
|
||||
if (! m_advancedUi->attributesEdit->isEnabled()) {
|
||||
QModelIndex index = m_advancedUi->attributesView->currentIndex();
|
||||
if (index.isValid()) {
|
||||
QString key = m_attributesModel->keyByIndex(index);
|
||||
m_advancedUi->attributesEdit->setPlainText(m_entryAttributes->value(key));
|
||||
m_advancedUi->attributesEdit->setEnabled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -730,8 +787,13 @@ void EditEntryWidget::removeCurrentAttachment()
|
|||
return;
|
||||
}
|
||||
|
||||
QString key = m_attachmentsModel->keyByIndex(index);
|
||||
m_entryAttachments->remove(key);
|
||||
QMessageBox::StandardButton ans = MessageBox::question(this, tr("Confirm Remove"),
|
||||
tr("Are you sure you want to remove this attachment?"),
|
||||
QMessageBox::Yes | QMessageBox::No);
|
||||
if (ans == QMessageBox::Yes) {
|
||||
QString key = m_attachmentsModel->keyByIndex(index);
|
||||
m_entryAttachments->remove(key);
|
||||
}
|
||||
}
|
||||
|
||||
void EditEntryWidget::updateAutoTypeEnabled()
|
||||
|
|
|
|||
|
|
@ -63,11 +63,11 @@ public:
|
|||
void clear();
|
||||
bool hasBeenModified() const;
|
||||
|
||||
Q_SIGNALS:
|
||||
signals:
|
||||
void editFinished(bool accepted);
|
||||
void historyEntryActivated(Entry* entry);
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void saveEntry();
|
||||
void cancel();
|
||||
void togglePasswordGeneratorButton(bool checked);
|
||||
|
|
@ -76,6 +76,8 @@ private Q_SLOTS:
|
|||
void editCurrentAttribute();
|
||||
void removeCurrentAttribute();
|
||||
void updateCurrentAttribute();
|
||||
void protectCurrentAttribute(bool state);
|
||||
void revealCurrentAttribute();
|
||||
void insertAttachment();
|
||||
void saveCurrentAttachment();
|
||||
void openAttachment(const QModelIndex& index);
|
||||
|
|
@ -110,6 +112,8 @@ private:
|
|||
QMenu* createPresetsMenu();
|
||||
void updateEntryData(Entry* entry) const;
|
||||
|
||||
void displayAttribute(QModelIndex index, bool showProtected);
|
||||
|
||||
Entry* m_entry;
|
||||
Database* m_database;
|
||||
|
||||
|
|
|
|||
|
|
@ -28,19 +28,50 @@
|
|||
<property name="title">
|
||||
<string>Additional attributes</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="AttributesListView" name="attributesView"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPlainTextEdit" name="attributesEdit">
|
||||
<property name="enabled">
|
||||
<widget class="QSplitter" name="attributesSplitter">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="childrenCollapsible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<widget class="AttributesListView" name="attributesView">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="sizeAdjustPolicy">
|
||||
<enum>QAbstractScrollArea::AdjustToContents</enum>
|
||||
</property>
|
||||
<property name="resizeMode">
|
||||
<enum>QListView::Adjust</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPlainTextEdit" name="attributesEdit">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>170</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<layout class="QVBoxLayout" name="attributesButtonLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" name="addAttributeButton">
|
||||
<property name="text">
|
||||
|
|
@ -48,16 +79,6 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="editAttributeButton">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Edit</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="removeAttributeButton">
|
||||
<property name="enabled">
|
||||
|
|
@ -68,6 +89,16 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="editAttributeButton">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Edit Name</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
|
|
@ -81,6 +112,35 @@
|
|||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="protectAttributeButton">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">margin-left:50%;margin-right:50%</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Protect</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="revealAttributeButton">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Reveal</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
|
|
@ -103,7 +163,7 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<layout class="QVBoxLayout" name="attachmentsButtonLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" name="addAttachmentButton">
|
||||
<property name="text">
|
||||
|
|
@ -172,11 +232,12 @@
|
|||
<tabstop>attributesView</tabstop>
|
||||
<tabstop>attributesEdit</tabstop>
|
||||
<tabstop>addAttributeButton</tabstop>
|
||||
<tabstop>editAttributeButton</tabstop>
|
||||
<tabstop>removeAttributeButton</tabstop>
|
||||
<tabstop>editAttributeButton</tabstop>
|
||||
<tabstop>attachmentsView</tabstop>
|
||||
<tabstop>addAttachmentButton</tabstop>
|
||||
<tabstop>removeAttachmentButton</tabstop>
|
||||
<tabstop>openAttachmentButton</tabstop>
|
||||
<tabstop>saveAttachmentButton</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
|
|
|
|||
|
|
@ -259,11 +259,6 @@
|
|||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
<zorder></zorder>
|
||||
<zorder></zorder>
|
||||
<zorder></zorder>
|
||||
<zorder></zorder>
|
||||
<zorder></zorder>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ QString EntryAttachmentsModel::keyByIndex(const QModelIndex& index) const
|
|||
void EntryAttachmentsModel::attachmentChange(const QString& key)
|
||||
{
|
||||
int row = m_entryAttachments->keys().indexOf(key);
|
||||
Q_EMIT dataChanged(index(row, 0), index(row, columnCount()-1));
|
||||
emit dataChanged(index(row, 0), index(row, columnCount()-1));
|
||||
}
|
||||
|
||||
void EntryAttachmentsModel::attachmentAboutToAdd(const QString& key)
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ public:
|
|||
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
|
||||
QString keyByIndex(const QModelIndex& index) const;
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void attachmentChange(const QString& key);
|
||||
void attachmentAboutToAdd(const QString& key);
|
||||
void attachmentAdd();
|
||||
|
|
|
|||
|
|
@ -147,7 +147,7 @@ void EntryAttributesModel::attributeChange(const QString& key)
|
|||
{
|
||||
int row = m_attributes.indexOf(key);
|
||||
Q_ASSERT(row != -1);
|
||||
Q_EMIT dataChanged(index(row, 0), index(row, columnCount()-1));
|
||||
emit dataChanged(index(row, 0), index(row, columnCount()-1));
|
||||
}
|
||||
|
||||
void EntryAttributesModel::attributeAboutToAdd(const QString& key)
|
||||
|
|
@ -213,7 +213,7 @@ void EntryAttributesModel::attributeRename(const QString& oldKey, const QString&
|
|||
m_nextRenameDataChange = false;
|
||||
|
||||
QModelIndex keyIndex = index(m_attributes.indexOf(newKey), 0);
|
||||
Q_EMIT dataChanged(keyIndex, keyIndex);
|
||||
emit dataChanged(keyIndex, keyIndex);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ public:
|
|||
QModelIndex indexByKey(const QString& key) const;
|
||||
QString keyByIndex(const QModelIndex& index) const;
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void attributeChange(const QString& key);
|
||||
void attributeAboutToAdd(const QString& key);
|
||||
void attributeAdd();
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
#include <QFont>
|
||||
#include <QMimeData>
|
||||
#include <QPalette>
|
||||
|
||||
#include "core/DatabaseIcons.h"
|
||||
#include "core/Entry.h"
|
||||
|
|
@ -63,7 +64,7 @@ void EntryModel::setGroup(Group* group)
|
|||
makeConnections(group);
|
||||
|
||||
endResetModel();
|
||||
Q_EMIT switchedToGroupMode();
|
||||
emit switchedToGroupMode();
|
||||
}
|
||||
|
||||
void EntryModel::setEntryList(const QList<Entry*>& entries)
|
||||
|
|
@ -100,7 +101,7 @@ void EntryModel::setEntryList(const QList<Entry*>& entries)
|
|||
}
|
||||
|
||||
endResetModel();
|
||||
Q_EMIT switchedToEntryListMode();
|
||||
emit switchedToEntryListMode();
|
||||
}
|
||||
|
||||
int EntryModel::rowCount(const QModelIndex& parent) const
|
||||
|
|
@ -127,8 +128,10 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const
|
|||
}
|
||||
|
||||
Entry* entry = entryFromIndex(index);
|
||||
EntryAttributes* attr = entry->attributes();
|
||||
|
||||
if (role == Qt::DisplayRole) {
|
||||
QString result;
|
||||
switch (index.column()) {
|
||||
case ParentGroup:
|
||||
if (entry->group()) {
|
||||
|
|
@ -136,11 +139,23 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const
|
|||
}
|
||||
break;
|
||||
case Title:
|
||||
return entry->title();
|
||||
result = entry->resolvePlaceholder(entry->title());
|
||||
if (attr->isReference(EntryAttributes::TitleKey)) {
|
||||
result.prepend(tr("Ref: ","Reference abbreviation"));
|
||||
}
|
||||
return result;
|
||||
case Username:
|
||||
return entry->username();
|
||||
result = entry->resolvePlaceholder(entry->username());
|
||||
if (attr->isReference(EntryAttributes::UserNameKey)) {
|
||||
result.prepend(tr("Ref: ","Reference abbreviation"));
|
||||
}
|
||||
return result;
|
||||
case Url:
|
||||
return entry->url();
|
||||
result = entry->resolvePlaceholder(entry->url());
|
||||
if (attr->isReference(EntryAttributes::URLKey)) {
|
||||
result.prepend(tr("Ref: ","Reference abbreviation"));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
else if (role == Qt::DecorationRole) {
|
||||
|
|
@ -166,6 +181,12 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const
|
|||
}
|
||||
return font;
|
||||
}
|
||||
else if (role == Qt::TextColorRole) {
|
||||
if (entry->hasReferences()) {
|
||||
QPalette p;
|
||||
return QVariant(p.color(QPalette::Active, QPalette::Mid));
|
||||
}
|
||||
}
|
||||
|
||||
return QVariant();
|
||||
}
|
||||
|
|
@ -294,7 +315,7 @@ void EntryModel::entryRemoved()
|
|||
void EntryModel::entryDataChanged(Entry* entry)
|
||||
{
|
||||
int row = m_entries.indexOf(entry);
|
||||
Q_EMIT dataChanged(index(row, 0), index(row, columnCount()-1));
|
||||
emit dataChanged(index(row, 0), index(row, columnCount()-1));
|
||||
}
|
||||
|
||||
void EntryModel::severConnections()
|
||||
|
|
|
|||
|
|
@ -52,14 +52,14 @@ public:
|
|||
|
||||
void setEntryList(const QList<Entry*>& entries);
|
||||
|
||||
Q_SIGNALS:
|
||||
signals:
|
||||
void switchedToEntryListMode();
|
||||
void switchedToGroupMode();
|
||||
|
||||
public Q_SLOTS:
|
||||
public slots:
|
||||
void setGroup(Group* group);
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void entryAboutToAdd(Entry* entry);
|
||||
void entryAdded(Entry* entry);
|
||||
void entryAboutToRemove(Entry* entry);
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ void EntryView::keyPressEvent(QKeyEvent* event)
|
|||
emitEntryActivated(currentIndex());
|
||||
#ifdef Q_OS_MAC
|
||||
// Pressing return does not emit the QTreeView::activated signal on mac os
|
||||
Q_EMIT activated(currentIndex());
|
||||
emit activated(currentIndex());
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -83,7 +83,7 @@ void EntryView::setFirstEntryActive()
|
|||
setCurrentEntry(m_model->entryFromIndex(index));
|
||||
}
|
||||
else {
|
||||
Q_EMIT entrySelectionChanged();
|
||||
emit entrySelectionChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -96,7 +96,7 @@ void EntryView::emitEntryActivated(const QModelIndex& index)
|
|||
{
|
||||
Entry* entry = entryFromIndex(index);
|
||||
|
||||
Q_EMIT entryActivated(entry, static_cast<EntryModel::ModelColumn>(m_sortModel->mapToSource(index).column()));
|
||||
emit entryActivated(entry, static_cast<EntryModel::ModelColumn>(m_sortModel->mapToSource(index).column()));
|
||||
}
|
||||
|
||||
void EntryView::setModel(QAbstractItemModel* model)
|
||||
|
|
|
|||
|
|
@ -42,17 +42,17 @@ public:
|
|||
int numberOfSelectedEntries();
|
||||
void setFirstEntryActive();
|
||||
|
||||
public Q_SLOTS:
|
||||
public slots:
|
||||
void setGroup(Group* group);
|
||||
|
||||
Q_SIGNALS:
|
||||
signals:
|
||||
void entryActivated(Entry* entry, EntryModel::ModelColumn column);
|
||||
void entrySelectionChanged();
|
||||
|
||||
protected:
|
||||
void keyPressEvent(QKeyEvent* event) override;
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void emitEntryActivated(const QModelIndex& index);
|
||||
void switchToEntryListMode();
|
||||
void switchToGroupMode();
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ void EditGroupWidget::save()
|
|||
}
|
||||
|
||||
clear();
|
||||
Q_EMIT editFinished(true);
|
||||
emit editFinished(true);
|
||||
}
|
||||
|
||||
void EditGroupWidget::cancel()
|
||||
|
|
@ -141,7 +141,7 @@ void EditGroupWidget::cancel()
|
|||
}
|
||||
|
||||
clear();
|
||||
Q_EMIT editFinished(false);
|
||||
emit editFinished(false);
|
||||
}
|
||||
|
||||
void EditGroupWidget::clear()
|
||||
|
|
|
|||
|
|
@ -43,12 +43,12 @@ public:
|
|||
void loadGroup(Group* group, bool create, Database* database);
|
||||
void clear();
|
||||
|
||||
Q_SIGNALS:
|
||||
signals:
|
||||
void editFinished(bool accepted);
|
||||
void messageEditEntry(QString, MessageWidget::MessageType);
|
||||
void messageEditEntryDismiss();
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void save();
|
||||
void cancel();
|
||||
|
||||
|
|
|
|||
|
|
@ -365,7 +365,7 @@ QMimeData* GroupModel::mimeData(const QModelIndexList& indexes) const
|
|||
void GroupModel::groupDataChanged(Group* group)
|
||||
{
|
||||
QModelIndex ix = index(group);
|
||||
Q_EMIT dataChanged(ix, ix);
|
||||
emit dataChanged(ix, ix);
|
||||
}
|
||||
|
||||
void GroupModel::groupAboutToRemove(Group* group)
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ public:
|
|||
private:
|
||||
QModelIndex parent(Group* group) const;
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void groupDataChanged(Group* group);
|
||||
void groupAboutToRemove(Group* group);
|
||||
void groupRemoved();
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ void GroupView::expandGroup(Group* group, bool expand)
|
|||
|
||||
void GroupView::emitGroupChanged(const QModelIndex& index)
|
||||
{
|
||||
Q_EMIT groupChanged(m_model->groupFromIndex(index));
|
||||
emit groupChanged(m_model->groupFromIndex(index));
|
||||
}
|
||||
|
||||
void GroupView::setModel(QAbstractItemModel* model)
|
||||
|
|
@ -123,7 +123,7 @@ void GroupView::setModel(QAbstractItemModel* model)
|
|||
|
||||
void GroupView::emitGroupChanged()
|
||||
{
|
||||
Q_EMIT groupChanged(currentGroup());
|
||||
emit groupChanged(currentGroup());
|
||||
}
|
||||
|
||||
void GroupView::syncExpandedState(const QModelIndex& parent, int start, int end)
|
||||
|
|
|
|||
|
|
@ -36,10 +36,10 @@ public:
|
|||
void setCurrentGroup(Group* group);
|
||||
void expandGroup(Group* group, bool expand = true);
|
||||
|
||||
Q_SIGNALS:
|
||||
signals:
|
||||
void groupChanged(Group* group);
|
||||
|
||||
private Q_SLOTS:
|
||||
private slots:
|
||||
void expandedChanged(const QModelIndex& index);
|
||||
void emitGroupChanged(const QModelIndex& index);
|
||||
void emitGroupChanged();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue