From 6ffca842e636eb02c1007a8bbf9d49c00f50f8eb Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Tue, 13 Jun 2017 20:55:53 -0400 Subject: [PATCH] Add "Apply" button to entry and group edit windows (#624) --- src/gui/EditWidget.cpp | 6 +++++- src/gui/EditWidget.h | 1 + src/gui/EditWidget.ui | 2 +- src/gui/entry/EditEntryWidget.cpp | 8 ++++++-- src/gui/entry/EditEntryWidget.h | 1 + src/gui/group/EditGroupWidget.cpp | 11 ++++++++--- src/gui/group/EditGroupWidget.h | 1 + tests/gui/TestGui.cpp | 14 ++++++++++---- 8 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/gui/EditWidget.cpp b/src/gui/EditWidget.cpp index a0144c8cb..e2c157edf 100644 --- a/src/gui/EditWidget.cpp +++ b/src/gui/EditWidget.cpp @@ -18,6 +18,7 @@ #include "EditWidget.h" #include "ui_EditWidget.h" #include +#include #include "core/FilePath.h" @@ -102,7 +103,10 @@ void EditWidget::setReadOnly(bool readOnly) m_ui->buttonBox->setStandardButtons(QDialogButtonBox::Close); } else { - m_ui->buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + m_ui->buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Apply); + // Find and connect the apply button + QPushButton* applyButton = m_ui->buttonBox->button(QDialogButtonBox::Apply); + connect(applyButton, SIGNAL(clicked()), SIGNAL(apply())); } } diff --git a/src/gui/EditWidget.h b/src/gui/EditWidget.h index 46951de41..4ea376215 100644 --- a/src/gui/EditWidget.h +++ b/src/gui/EditWidget.h @@ -48,6 +48,7 @@ public: bool readOnly() const; signals: + void apply(); void accepted(); void rejected(); diff --git a/src/gui/EditWidget.ui b/src/gui/EditWidget.ui index 6afce9f3e..b8ac5f3eb 100644 --- a/src/gui/EditWidget.ui +++ b/src/gui/EditWidget.ui @@ -66,7 +66,7 @@ - QDialogButtonBox::Cancel|QDialogButtonBox::Ok + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp index 4581c91f0..c81214e45 100644 --- a/src/gui/entry/EditEntryWidget.cpp +++ b/src/gui/entry/EditEntryWidget.cpp @@ -75,8 +75,9 @@ EditEntryWidget::EditEntryWidget(QWidget* parent) setupProperties(); setupHistory(); - connect(this, SIGNAL(accepted()), SLOT(saveEntry())); + connect(this, SIGNAL(accepted()), SLOT(acceptEntry())); connect(this, SIGNAL(rejected()), SLOT(cancel())); + connect(this, SIGNAL(apply()), SLOT(saveEntry())); connect(m_iconsWidget, SIGNAL(messageEditEntry(QString, MessageWidget::MessageType)), SLOT(showMessage(QString, MessageWidget::MessageType))); connect(m_iconsWidget, SIGNAL(messageEditEntryDismiss()), SLOT(hideMessage())); @@ -439,9 +440,12 @@ void EditEntryWidget::saveEntry() if (!m_create) { m_entry->endUpdate(); } +} +void EditEntryWidget::acceptEntry() +{ + saveEntry(); clear(); - emit editFinished(true); } diff --git a/src/gui/entry/EditEntryWidget.h b/src/gui/entry/EditEntryWidget.h index 4027dd11a..9277997e8 100644 --- a/src/gui/entry/EditEntryWidget.h +++ b/src/gui/entry/EditEntryWidget.h @@ -68,6 +68,7 @@ signals: void historyEntryActivated(Entry* entry); private slots: + void acceptEntry(); void saveEntry(); void cancel(); void togglePasswordGeneratorButton(bool checked); diff --git a/src/gui/group/EditGroupWidget.cpp b/src/gui/group/EditGroupWidget.cpp index 4f2e9fec5..da9875fb4 100644 --- a/src/gui/group/EditGroupWidget.cpp +++ b/src/gui/group/EditGroupWidget.cpp @@ -42,6 +42,7 @@ EditGroupWidget::EditGroupWidget(QWidget* parent) connect(m_mainUi->autoTypeSequenceCustomRadio, SIGNAL(toggled(bool)), m_mainUi->autoTypeSequenceCustomEdit, SLOT(setEnabled(bool))); + connect(this, SIGNAL(apply()), SLOT(apply())); connect(this, SIGNAL(accepted()), SLOT(save())); connect(this, SIGNAL(rejected()), SLOT(cancel())); @@ -101,6 +102,13 @@ void EditGroupWidget::loadGroup(Group* group, bool create, Database* database) } void EditGroupWidget::save() +{ + apply(); + clear(); + emit editFinished(true); +} + +void EditGroupWidget::apply() { m_group->setName(m_mainUi->editName->text()); m_group->setNotes(m_mainUi->editNotes->toPlainText()); @@ -128,9 +136,6 @@ void EditGroupWidget::save() else { m_group->setIcon(iconStruct.uuid); } - - clear(); - emit editFinished(true); } void EditGroupWidget::cancel() diff --git a/src/gui/group/EditGroupWidget.h b/src/gui/group/EditGroupWidget.h index 39f2c09b0..2d1844934 100644 --- a/src/gui/group/EditGroupWidget.h +++ b/src/gui/group/EditGroupWidget.h @@ -49,6 +49,7 @@ signals: void messageEditEntryDismiss(); private slots: + void apply(); void save(); void cancel(); diff --git a/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp index b1cc02462..aed557a5e 100644 --- a/tests/gui/TestGui.cpp +++ b/tests/gui/TestGui.cpp @@ -230,6 +230,7 @@ void TestGui::testEditEntry() // Select the first entry in the database EntryView* entryView = m_dbWidget->findChild("entryView"); QModelIndex entryItem = entryView->model()->index(0, 1); + Entry* entry = entryView->entryFromIndex(entryItem); clickIndex(entryItem, entryView, Qt::LeftButton); // Confirm the edit action button is enabled @@ -246,6 +247,13 @@ void TestGui::testEditEntry() QLineEdit* titleEdit = editEntryWidget->findChild("titleEdit"); QTest::keyClicks(titleEdit, "_test"); + // Apply the edit + QDialogButtonBox* editEntryWidgetButtonBox = editEntryWidget->findChild("buttonBox"); + QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Apply), Qt::LeftButton); + QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::EditMode); + QCOMPARE(entry->title(), QString("Sample Entry_test")); + QCOMPARE(entry->historyItems().size(), 1); + // Test protected attributes editEntryWidget->setCurrentPage(1); QPlainTextEdit* attrTextEdit = editEntryWidget->findChild("attributesEdit"); @@ -259,15 +267,13 @@ void TestGui::testEditEntry() QCOMPARE(attrTextEdit->toPlainText(), attrText); editEntryWidget->setCurrentPage(0); - // Save the edit - QDialogButtonBox* editEntryWidgetButtonBox = editEntryWidget->findChild("buttonBox"); + // Save the edit (press OK) QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); // Confirm edit was made QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::ViewMode); - Entry* entry = entryView->entryFromIndex(entryItem); QCOMPARE(entry->title(), QString("Sample Entry_test")); - QCOMPARE(entry->historyItems().size(), 1); + QCOMPARE(entry->historyItems().size(), 2); // Confirm modified indicator is showing QTRY_COMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), QString("%1*").arg(m_dbFileName));