Add "Restore Entries" feature
This commit is contained in:
@@ -475,6 +475,26 @@ void DatabaseWidget::deleteSelectedEntries()
|
||||
deleteEntries(std::move(selectedEntries));
|
||||
}
|
||||
|
||||
void DatabaseWidget::restoreSelectedEntries()
|
||||
{
|
||||
const QModelIndexList selected = m_entryView->selectionModel()->selectedRows();
|
||||
if (selected.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Resolve entries from the selection model
|
||||
QList<Entry*> selectedEntries;
|
||||
for (auto& index : selected) {
|
||||
selectedEntries.append(m_entryView->entryFromIndex(index));
|
||||
}
|
||||
|
||||
for (auto* entry : selectedEntries) {
|
||||
if (entry->previousParentGroup()) {
|
||||
entry->setGroup(entry->previousParentGroup());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DatabaseWidget::deleteEntries(QList<Entry*> selectedEntries, bool confirm)
|
||||
{
|
||||
if (selectedEntries.isEmpty()) {
|
||||
|
||||
@@ -164,6 +164,7 @@ public slots:
|
||||
void createEntry();
|
||||
void cloneEntry();
|
||||
void deleteSelectedEntries();
|
||||
void restoreSelectedEntries();
|
||||
void deleteEntries(QList<Entry*> entries, bool confirm = true);
|
||||
void focusOnEntries(bool editIfFocused = false);
|
||||
void focusOnGroups(bool editIfFocused = false);
|
||||
|
||||
@@ -129,6 +129,7 @@ MainWindow::MainWindow()
|
||||
m_countDefaultAttributes = m_ui->menuEntryCopyAttribute->actions().size();
|
||||
|
||||
m_entryContextMenu = new QMenu(this);
|
||||
m_entryContextMenu->setSeparatorsCollapsible(true);
|
||||
m_entryContextMenu->addAction(m_ui->actionEntryCopyUsername);
|
||||
m_entryContextMenu->addAction(m_ui->actionEntryCopyPassword);
|
||||
m_entryContextMenu->addAction(m_ui->menuEntryCopyAttribute->menuAction());
|
||||
@@ -146,6 +147,8 @@ MainWindow::MainWindow()
|
||||
m_entryContextMenu->addSeparator();
|
||||
m_entryContextMenu->addAction(m_ui->actionEntryOpenUrl);
|
||||
m_entryContextMenu->addAction(m_ui->actionEntryDownloadIcon);
|
||||
m_entryContextMenu->addSeparator();
|
||||
m_entryContextMenu->addAction(m_ui->actionEntryRestore);
|
||||
|
||||
m_entryNewContextMenu = new QMenu(this);
|
||||
m_entryNewContextMenu->addAction(m_ui->actionEntryNew);
|
||||
@@ -275,6 +278,7 @@ MainWindow::MainWindow()
|
||||
m_ui->actionEntryAutoTypeSequence->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_V);
|
||||
m_ui->actionEntryOpenUrl->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_U);
|
||||
m_ui->actionEntryCopyURL->setShortcut(Qt::CTRL + Qt::Key_U);
|
||||
m_ui->actionEntryRestore->setShortcut(Qt::CTRL + Qt::Key_R);
|
||||
|
||||
// Prevent conflicts with global Mac shortcuts (force Control on all platforms)
|
||||
#ifdef Q_OS_MAC
|
||||
@@ -291,6 +295,7 @@ MainWindow::MainWindow()
|
||||
m_ui->actionEntryNew->setShortcutVisibleInContextMenu(true);
|
||||
m_ui->actionEntryEdit->setShortcutVisibleInContextMenu(true);
|
||||
m_ui->actionEntryDelete->setShortcutVisibleInContextMenu(true);
|
||||
m_ui->actionEntryRestore->setShortcutVisibleInContextMenu(true);
|
||||
m_ui->actionEntryClone->setShortcutVisibleInContextMenu(true);
|
||||
m_ui->actionEntryTotp->setShortcutVisibleInContextMenu(true);
|
||||
m_ui->actionEntryDownloadIcon->setShortcutVisibleInContextMenu(true);
|
||||
@@ -374,6 +379,7 @@ MainWindow::MainWindow()
|
||||
m_ui->actionEntryClone->setIcon(icons()->icon("entry-clone"));
|
||||
m_ui->actionEntryEdit->setIcon(icons()->icon("entry-edit"));
|
||||
m_ui->actionEntryDelete->setIcon(icons()->icon("entry-delete"));
|
||||
m_ui->actionEntryRestore->setIcon(icons()->icon("entry-restore"));
|
||||
m_ui->actionEntryAutoType->setIcon(icons()->icon("auto-type"));
|
||||
m_ui->actionEntryAutoTypeSequence->setIcon(icons()->icon("auto-type"));
|
||||
m_ui->actionEntryAutoTypeUsername->setIcon(icons()->icon("auto-type"));
|
||||
@@ -461,6 +467,7 @@ MainWindow::MainWindow()
|
||||
m_actionMultiplexer.connect(m_ui->actionEntryClone, SIGNAL(triggered()), SLOT(cloneEntry()));
|
||||
m_actionMultiplexer.connect(m_ui->actionEntryEdit, SIGNAL(triggered()), SLOT(switchToEntryEdit()));
|
||||
m_actionMultiplexer.connect(m_ui->actionEntryDelete, SIGNAL(triggered()), SLOT(deleteSelectedEntries()));
|
||||
m_actionMultiplexer.connect(m_ui->actionEntryRestore, SIGNAL(triggered()), SLOT(restoreSelectedEntries()));
|
||||
|
||||
m_actionMultiplexer.connect(m_ui->actionEntryTotp, SIGNAL(triggered()), SLOT(showTotp()));
|
||||
m_actionMultiplexer.connect(m_ui->actionEntrySetupTotp, SIGNAL(triggered()), SLOT(setupTotp()));
|
||||
@@ -800,6 +807,9 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode)
|
||||
m_ui->actionEntryClone->setEnabled(singleEntrySelected);
|
||||
m_ui->actionEntryEdit->setEnabled(singleEntrySelected);
|
||||
m_ui->actionEntryDelete->setEnabled(entriesSelected);
|
||||
m_ui->actionEntryRestore->setVisible(entriesSelected && recycleBinSelected);
|
||||
m_ui->actionEntryRestore->setEnabled(entriesSelected && recycleBinSelected);
|
||||
m_ui->actionEntryRestore->setText(tr("Restore Entry(s)", "", dbWidget->numberOfSelectedEntries()));
|
||||
m_ui->actionEntryMoveUp->setVisible(!sorted);
|
||||
m_ui->actionEntryMoveDown->setVisible(!sorted);
|
||||
m_ui->actionEntryMoveUp->setEnabled(singleEntrySelected && !sorted && entryIndex > 0);
|
||||
|
||||
@@ -216,7 +216,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>22</height>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="contextMenuPolicy">
|
||||
@@ -283,6 +283,9 @@
|
||||
<property name="title">
|
||||
<string>&Entries</string>
|
||||
</property>
|
||||
<property name="separatorsCollapsible">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuEntryCopyAttribute">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
@@ -330,6 +333,8 @@
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionEntryAddToAgent"/>
|
||||
<addaction name="actionEntryRemoveFromAgent"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionEntryRestore"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuGroups">
|
||||
<property name="title">
|
||||
@@ -1068,6 +1073,17 @@
|
||||
<string>Clone Group...</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionEntryRestore">
|
||||
<property name="text">
|
||||
<string>Restore Entry(s)</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Restore Entry(s)</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string notr="true">Ctrl+R</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
|
||||
Reference in New Issue
Block a user