diff --git a/src/core/Entry.cpp b/src/core/Entry.cpp index 41616cb8..8d2fac46 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 5425c38f..115855e2 100644 --- a/src/core/EntryAttributes.cpp +++ b/src/core/EntryAttributes.cpp @@ -17,8 +17,13 @@ #include "EntryAttributes.h" -const QStringList EntryAttributes::DefaultAttributes(QStringList() << "Title" << "UserName" - << "Password" << "URL" << "Notes"); +const QString EntryAttributes::TitleKey = "Title"; +const QString EntryAttributes::UserNameKey = "UserName"; +const QString EntryAttributes::PasswordKey = "Password"; +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 420c085f..4518cca8 100644 --- a/src/core/EntryAttributes.h +++ b/src/core/EntryAttributes.h @@ -46,6 +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 8c635a70..08000b91 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -288,6 +288,17 @@ void DatabaseWidget::deleteEntries() } } +void DatabaseWidget::copyTitle() +{ + Entry* currentEntry = m_entryView->currentEntry(); + if (!currentEntry) { + Q_ASSERT(false); + return; + } + + setClipboardTextAndMinimize(currentEntry->title()); +} + void DatabaseWidget::copyUsername() { Entry* currentEntry = m_entryView->currentEntry(); @@ -296,11 +307,7 @@ void DatabaseWidget::copyUsername() return; } - clipboard()->setText(currentEntry->username()); - - if (config()->get("MinimizeOnCopy").toBool()) { - window()->showMinimized(); - } + setClipboardTextAndMinimize(currentEntry->username()); } void DatabaseWidget::copyPassword() @@ -311,11 +318,29 @@ void DatabaseWidget::copyPassword() return; } - clipboard()->setText(currentEntry->password()); + setClipboardTextAndMinimize(currentEntry->password()); +} - if (config()->get("MinimizeOnCopy").toBool()) { - window()->showMinimized(); +void DatabaseWidget::copyURL() +{ + Entry* currentEntry = m_entryView->currentEntry(); + if (!currentEntry) { + Q_ASSERT(false); + return; } + + setClipboardTextAndMinimize(currentEntry->url()); +} + +void DatabaseWidget::copyNotes() +{ + Entry* currentEntry = m_entryView->currentEntry(); + if (!currentEntry) { + Q_ASSERT(false); + return; + } + + setClipboardTextAndMinimize(currentEntry->notes()); } void DatabaseWidget::copyAttribute(QAction* action) @@ -326,8 +351,12 @@ void DatabaseWidget::copyAttribute(QAction* action) return; } - clipboard()->setText(currentEntry->attributes()->value(action->text())); + setClipboardTextAndMinimize(currentEntry->attributes()->value(action->text())); +} +void DatabaseWidget::setClipboardTextAndMinimize(const QString& text) +{ + clipboard()->setText(text); if (config()->get("MinimizeOnCopy").toBool()) { window()->showMinimized(); } diff --git a/src/gui/DatabaseWidget.h b/src/gui/DatabaseWidget.h index e5bacd5d..240fe28f 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(); @@ -125,6 +128,8 @@ private Q_SLOTS: void closeSearch(); private: + void setClipboardTextAndMinimize(const QString& text); + Database* m_db; const QScopedPointer m_searchUi; QWidget* const m_searchWidget; diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 3f956a63..2b8707aa 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,15 +221,12 @@ void MainWindow::updateCopyAttributesMenu() return; } - m_ui->menuEntryCopyAttribute->clear(); - Entry* entry = dbWidget->entryView()->currentEntry(); - - Q_FOREACH (const QString& key, EntryAttributes::DefaultAttributes) { - QAction* action = m_ui->menuEntryCopyAttribute->addAction(key); - m_copyAdditionalAttributeActions->addAction(action); + QList actions = m_ui->menuEntryCopyAttribute->actions(); + for (int i = EntryAttributes::DefaultAttributes.size() + 1; i < actions.size(); i++) { + delete actions[i]; } - m_ui->menuEntryCopyAttribute->addSeparator(); + Entry* entry = dbWidget->entryView()->currentEntry(); Q_FOREACH (const QString& key, entry->attributes()->customKeys()) { QAction* action = m_ui->menuEntryCopyAttribute->addAction(key); @@ -269,8 +273,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 74f04b53..90935b97 100644 --- a/src/gui/MainWindow.ui +++ b/src/gui/MainWindow.ui @@ -114,13 +114,17 @@ Copy attribute to clipboard + + + + + + - - @@ -306,7 +310,7 @@ false - Copy username to clipboard + Username @@ -314,7 +318,7 @@ false - Copy password to clipboard + Password @@ -346,6 +350,30 @@ Lock databases + + + false + + + Title + + + + + false + + + URL + + + + + false + + + Notes + +