diff --git a/src/core/Entry.cpp b/src/core/Entry.cpp index 41616cb82..8d2fac461 100644 --- a/src/core/Entry.cpp +++ b/src/core/Entry.cpp @@ -185,27 +185,27 @@ const AutoTypeAssociations* Entry::autoTypeAssociations() const QString Entry::title() const { - return m_attributes->value("Title"); + return m_attributes->value(EntryAttributes::TitleKey); } QString Entry::url() const { - return m_attributes->value("URL"); + return m_attributes->value(EntryAttributes::URLNameKey); } QString Entry::username() const { - return m_attributes->value("UserName"); + return m_attributes->value(EntryAttributes::UserNameKey); } QString Entry::password() const { - return m_attributes->value("Password"); + return m_attributes->value(EntryAttributes::PasswordKey); } QString Entry::notes() const { - return m_attributes->value("Notes"); + return m_attributes->value(EntryAttributes::NotesKey); } bool Entry::isExpired() const @@ -311,27 +311,27 @@ void Entry::setDefaultAutoTypeSequence(const QString& sequence) void Entry::setTitle(const QString& title) { - m_attributes->set("Title", title, m_attributes->isProtected("Title")); + m_attributes->set(EntryAttributes::TitleKey, title, m_attributes->isProtected(EntryAttributes::TitleKey)); } void Entry::setUrl(const QString& url) { - m_attributes->set("URL", url, m_attributes->isProtected("URL")); + m_attributes->set(EntryAttributes::URLNameKey, url, m_attributes->isProtected(EntryAttributes::URLNameKey)); } void Entry::setUsername(const QString& username) { - m_attributes->set("UserName", username, m_attributes->isProtected("UserName")); + m_attributes->set(EntryAttributes::UserNameKey, username, m_attributes->isProtected(EntryAttributes::UserNameKey)); } void Entry::setPassword(const QString& password) { - m_attributes->set("Password", password, m_attributes->isProtected("Password")); + m_attributes->set(EntryAttributes::PasswordKey, password, m_attributes->isProtected(EntryAttributes::PasswordKey)); } void Entry::setNotes(const QString& notes) { - m_attributes->set("Notes", notes, m_attributes->isProtected("Notes")); + m_attributes->set(EntryAttributes::NotesKey, notes, m_attributes->isProtected(EntryAttributes::NotesKey)); } void Entry::setExpires(const bool& value) diff --git a/src/core/EntryAttributes.cpp b/src/core/EntryAttributes.cpp index becf0ecae..115855e22 100644 --- a/src/core/EntryAttributes.cpp +++ b/src/core/EntryAttributes.cpp @@ -17,10 +17,13 @@ #include "EntryAttributes.h" +const QString EntryAttributes::TitleKey = "Title"; const QString EntryAttributes::UserNameKey = "UserName"; const QString EntryAttributes::PasswordKey = "Password"; -const QStringList EntryAttributes::DefaultAttributes(QStringList() << "Title" << UserNameKey - << PasswordKey << "URL" << "Notes"); +const QString EntryAttributes::URLNameKey = "URL"; +const QString EntryAttributes::NotesKey = "Notes"; +const QStringList EntryAttributes::DefaultAttributes(QStringList() << TitleKey << UserNameKey + << PasswordKey << URLNameKey << NotesKey); EntryAttributes::EntryAttributes(QObject* parent) : QObject(parent) diff --git a/src/core/EntryAttributes.h b/src/core/EntryAttributes.h index a7bdcad45..4518cca8c 100644 --- a/src/core/EntryAttributes.h +++ b/src/core/EntryAttributes.h @@ -46,8 +46,11 @@ public: bool operator==(const EntryAttributes& other) const; bool operator!=(const EntryAttributes& other) const; + static const QString TitleKey; static const QString UserNameKey; static const QString PasswordKey; + static const QString URLNameKey; + static const QString NotesKey; static const QStringList DefaultAttributes; static bool isDefaultAttribute(const QString& key); diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index 8c635a70f..ead7f6330 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -288,6 +288,21 @@ void DatabaseWidget::deleteEntries() } } +void DatabaseWidget::copyTitle() +{ + Entry* currentEntry = m_entryView->currentEntry(); + if (!currentEntry) { + Q_ASSERT(false); + return; + } + + clipboard()->setText(currentEntry->title()); + + if (config()->get("MinimizeOnCopy").toBool()) { + window()->showMinimized(); + } +} + void DatabaseWidget::copyUsername() { Entry* currentEntry = m_entryView->currentEntry(); @@ -318,6 +333,36 @@ void DatabaseWidget::copyPassword() } } +void DatabaseWidget::copyURL() +{ + Entry* currentEntry = m_entryView->currentEntry(); + if (!currentEntry) { + Q_ASSERT(false); + return; + } + + clipboard()->setText(currentEntry->url()); + + if (config()->get("MinimizeOnCopy").toBool()) { + window()->showMinimized(); + } +} + +void DatabaseWidget::copyNotes() +{ + Entry* currentEntry = m_entryView->currentEntry(); + if (!currentEntry) { + Q_ASSERT(false); + return; + } + + clipboard()->setText(currentEntry->notes()); + + if (config()->get("MinimizeOnCopy").toBool()) { + window()->showMinimized(); + } +} + void DatabaseWidget::copyAttribute(QAction* action) { Entry* currentEntry = m_entryView->currentEntry(); diff --git a/src/gui/DatabaseWidget.h b/src/gui/DatabaseWidget.h index e5bacd5da..eb597c2e6 100644 --- a/src/gui/DatabaseWidget.h +++ b/src/gui/DatabaseWidget.h @@ -86,8 +86,11 @@ public Q_SLOTS: void createEntry(); void cloneEntry(); void deleteEntries(); + void copyTitle(); void copyUsername(); void copyPassword(); + void copyURL(); + void copyNotes(); void copyAttribute(QAction* action); void performAutoType(); void openUrl(); diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index a58ae5ee1..439bea9b8 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -163,10 +163,17 @@ MainWindow::MainWindow() SLOT(switchToEntryEdit())); m_actionMultiplexer.connect(m_ui->actionEntryDelete, SIGNAL(triggered()), SLOT(deleteEntries())); + + m_actionMultiplexer.connect(m_ui->actionEntryCopyTitle, SIGNAL(triggered()), + SLOT(copyTitle())); m_actionMultiplexer.connect(m_ui->actionEntryCopyUsername, SIGNAL(triggered()), SLOT(copyUsername())); m_actionMultiplexer.connect(m_ui->actionEntryCopyPassword, SIGNAL(triggered()), SLOT(copyPassword())); + m_actionMultiplexer.connect(m_ui->actionEntryCopyURL, SIGNAL(triggered()), + SLOT(copyURL())); + m_actionMultiplexer.connect(m_ui->actionEntryCopyNotes, SIGNAL(triggered()), + SLOT(copyNotes())); m_actionMultiplexer.connect(m_ui->actionEntryAutoType, SIGNAL(triggered()), SLOT(performAutoType())); m_actionMultiplexer.connect(m_ui->actionEntryOpenUrl, SIGNAL(triggered()), @@ -214,24 +221,20 @@ void MainWindow::updateCopyAttributesMenu() return; } - Q_FOREACH (QAction* action, m_ui->menuEntryCopyAttribute->actions()) { - if (action != m_ui->actionEntryCopyPassword && action != m_ui->actionEntryCopyUsername) { - m_ui->menuEntryCopyAttribute->removeAction(action); - delete action; - } + QList actionsToRemove = m_ui->menuEntryCopyAttribute->actions(); + actionsToRemove.removeOne(m_ui->actionEntryCopyTitle); + actionsToRemove.removeOne(m_ui->actionEntryCopyUsername); + actionsToRemove.removeOne(m_ui->actionEntryCopyPassword); + actionsToRemove.removeOne(m_ui->actionEntryCopyURL); + actionsToRemove.removeOne(m_ui->actionEntryCopyNotes); + + Q_FOREACH (QAction* action, actionsToRemove) { + m_ui->menuEntryCopyAttribute->removeAction(action); + delete action; } Entry* entry = dbWidget->entryView()->currentEntry(); - QStringList defaultAttributesWithoutPasswordAndUsername = EntryAttributes::DefaultAttributes; - defaultAttributesWithoutPasswordAndUsername.removeOne(EntryAttributes::PasswordKey); - defaultAttributesWithoutPasswordAndUsername.removeOne(EntryAttributes::UserNameKey); - - Q_FOREACH (const QString& key, defaultAttributesWithoutPasswordAndUsername) { - QAction* action = m_ui->menuEntryCopyAttribute->addAction(key); - m_copyAdditionalAttributeActions->addAction(action); - } - m_ui->menuEntryCopyAttribute->addSeparator(); Q_FOREACH (const QString& key, entry->attributes()->customKeys()) { @@ -279,8 +282,11 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) m_ui->actionEntryClone->setEnabled(singleEntrySelected && !inSearch); m_ui->actionEntryEdit->setEnabled(singleEntrySelected); m_ui->actionEntryDelete->setEnabled(entriesSelected); + m_ui->actionEntryCopyTitle->setEnabled(singleEntrySelected); m_ui->actionEntryCopyUsername->setEnabled(singleEntrySelected); m_ui->actionEntryCopyPassword->setEnabled(singleEntrySelected); + m_ui->actionEntryCopyURL->setEnabled(singleEntrySelected); + m_ui->actionEntryCopyNotes->setEnabled(singleEntrySelected); m_ui->menuEntryCopyAttribute->setEnabled(singleEntrySelected); m_ui->actionEntryAutoType->setEnabled(singleEntrySelected); m_ui->actionEntryOpenUrl->setEnabled(singleEntrySelected); diff --git a/src/gui/MainWindow.ui b/src/gui/MainWindow.ui index 18c8346c8..30c8c8d59 100644 --- a/src/gui/MainWindow.ui +++ b/src/gui/MainWindow.ui @@ -114,8 +114,11 @@ Copy attribute to clipboard + + + @@ -346,6 +349,30 @@ Lock databases + + + false + + + Title + + + + + false + + + URL + + + + + false + + + Notes + +