diff --git a/src/core/Database.cpp b/src/core/Database.cpp index 3177da53..b71f127f 100644 --- a/src/core/Database.cpp +++ b/src/core/Database.cpp @@ -181,3 +181,21 @@ bool Database::hasKey() { return m_hasKey; } + +void Database::recycleEntry(Entry* entry) +{ + if (m_metadata->recycleBinEnabled()) { + if (!m_metadata->recycleBin()) { + Group* recycleBin = new Group(); + recycleBin->setUuid(Uuid::random()); + recycleBin->setName("Recycle Bin"); + recycleBin->setIcon(43); + recycleBin->setParent(rootGroup()); + m_metadata->setRecycleBin(recycleBin); + } + m_metadata->addEntryToRecycleBin(entry); + } + else { + delete entry; + } +} diff --git a/src/core/Database.h b/src/core/Database.h index d886a856..2eb14a9c 100644 --- a/src/core/Database.h +++ b/src/core/Database.h @@ -82,6 +82,7 @@ public: */ void setKey(const CompositeKey& key); bool hasKey(); + void recycleEntry(Entry* entry); Q_SIGNALS: void groupDataChanged(Group* group); diff --git a/src/core/Metadata.cpp b/src/core/Metadata.cpp index 60938c39..4182d74f 100644 --- a/src/core/Metadata.cpp +++ b/src/core/Metadata.cpp @@ -18,6 +18,7 @@ #include "Metadata.h" #include "core/Database.h" +#include "core/Entry.h" Metadata::Metadata(Database* parent) : QObject(parent) @@ -371,3 +372,8 @@ void Metadata::removeCustomField(const QString& key) m_customFields.remove(key); Q_EMIT modified(); } + +void Metadata::addEntryToRecycleBin(Entry* entry) +{ + entry->setGroup(m_recycleBin); +} diff --git a/src/core/Metadata.h b/src/core/Metadata.h index 7ad762ff..1b93d7df 100644 --- a/src/core/Metadata.h +++ b/src/core/Metadata.h @@ -26,6 +26,7 @@ class Database; class Group; +class Entry; class Metadata : public QObject { @@ -92,6 +93,8 @@ public: void removeCustomField(const QString& key); void setUpdateDatetime(bool value); + void addEntryToRecycleBin(Entry* entry); + Q_SIGNALS: void nameTextChanged(Database* db); void modified(); diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index deccd437..7046eaad 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -20,13 +20,16 @@ #include #include #include +#include +#include "core/Metadata.h" #include "gui/ChangeMasterKeyWidget.h" #include "gui/EditEntryWidget.h" #include "gui/EditGroupWidget.h" #include "gui/EntryView.h" #include "gui/GroupView.h" + DatabaseWidget::DatabaseWidget(Database* db, QWidget* parent) : QStackedWidget(parent) , m_db(db) @@ -104,7 +107,20 @@ void DatabaseWidget::createEntry() void DatabaseWidget::deleteEntry() { - delete m_entryView->currentEntry(); + if (!m_db->metadata()->recycleBinEnabled()) { + QMessageBox::StandardButton result = QMessageBox::question( + this, tr("Question"), tr("Do you really want to delete this entry for good?"), + QMessageBox::Yes | QMessageBox::No); + if (result == QMessageBox::Yes) { + delete m_entryView->currentEntry(); + } + else { + return; + } + } + else { + m_db->recycleEntry(m_entryView->currentEntry()); + } } void DatabaseWidget::createGroup()