From a03e35450415283a9f9101d19d71acb83202b129 Mon Sep 17 00:00:00 2001 From: thez3ro Date: Sun, 5 Mar 2017 23:47:08 +0100 Subject: [PATCH] highlight reference field in Database view --- src/core/Entry.cpp | 11 +++++++++++ src/core/Entry.h | 1 + src/core/EntryAttributes.cpp | 15 +++++++++++++++ src/core/EntryAttributes.h | 1 + src/gui/entry/EntryModel.cpp | 27 ++++++++++++++++++++++++--- 5 files changed, 52 insertions(+), 3 deletions(-) diff --git a/src/core/Entry.cpp b/src/core/Entry.cpp index 99f119f66..208a1dec9 100644 --- a/src/core/Entry.cpp +++ b/src/core/Entry.cpp @@ -254,6 +254,17 @@ bool Entry::isExpired() const return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < QDateTime::currentDateTimeUtc(); } +bool Entry::hasReferences() const +{ + const QList keyList = EntryAttributes::DefaultAttributes; + for (const QString& key : keyList) { + if (m_attributes->isReference(key)) { + return true; + } + } + return false; +} + EntryAttributes* Entry::attributes() { return m_attributes; diff --git a/src/core/Entry.h b/src/core/Entry.h index d08c7217c..38ec42d4e 100644 --- a/src/core/Entry.h +++ b/src/core/Entry.h @@ -79,6 +79,7 @@ public: QString password() const; QString notes() const; bool isExpired() const; + bool hasReferences() const; EntryAttributes* attributes(); const EntryAttributes* attributes() const; EntryAttachments* attachments(); diff --git a/src/core/EntryAttributes.cpp b/src/core/EntryAttributes.cpp index b633cae32..6f3c4fd6f 100644 --- a/src/core/EntryAttributes.cpp +++ b/src/core/EntryAttributes.cpp @@ -69,6 +69,21 @@ bool EntryAttributes::isProtected(const QString& key) const return m_protectedAttributes.contains(key); } +bool EntryAttributes::isReference(const QString& key) const +{ + if (!m_attributes.contains(key)) { + Q_ASSERT(false); + return false; + } + + QString data = value(key); + QRegExp referenceRegExp("\\{REF:([TUPAN])@I:([^}]+)\\}", Qt::CaseInsensitive, QRegExp::RegExp2); + if (referenceRegExp.indexIn(data) != -1) { + return true; + } + return false; +} + void EntryAttributes::set(const QString& key, const QString& value, bool protect) { bool emitModified = false; diff --git a/src/core/EntryAttributes.h b/src/core/EntryAttributes.h index 211b6d483..be33ab167 100644 --- a/src/core/EntryAttributes.h +++ b/src/core/EntryAttributes.h @@ -35,6 +35,7 @@ public: QString value(const QString& key) const; bool contains(const QString& key) const; bool isProtected(const QString& key) const; + bool isReference(const QString& key) const; void set(const QString& key, const QString& value, bool protect = false); void remove(const QString& key); void rename(const QString& oldKey, const QString& newKey); diff --git a/src/gui/entry/EntryModel.cpp b/src/gui/entry/EntryModel.cpp index d606a777e..323a55c82 100644 --- a/src/gui/entry/EntryModel.cpp +++ b/src/gui/entry/EntryModel.cpp @@ -19,6 +19,7 @@ #include #include +#include #include "core/DatabaseIcons.h" #include "core/Entry.h" @@ -127,8 +128,10 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const } Entry* entry = entryFromIndex(index); + EntryAttributes* attr = entry->attributes(); if (role == Qt::DisplayRole) { + QString result; switch (index.column()) { case ParentGroup: if (entry->group()) { @@ -136,11 +139,23 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const } break; case Title: - return entry->title(); + result = entry->resolvePlaceholder(entry->title()); + if (attr->isReference(EntryAttributes::TitleKey)) { + result.prepend(tr("Ref: ","Reference abbreviation")); + } + return result; case Username: - return entry->username(); + result = entry->resolvePlaceholder(entry->username()); + if (attr->isReference(EntryAttributes::UserNameKey)) { + result.prepend(tr("Ref: ","Reference abbreviation")); + } + return result; case Url: - return entry->url(); + result = entry->resolvePlaceholder(entry->url()); + if (attr->isReference(EntryAttributes::URLKey)) { + result.prepend(tr("Ref: ","Reference abbreviation")); + } + return result; } } else if (role == Qt::DecorationRole) { @@ -166,6 +181,12 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const } return font; } + else if (role == Qt::TextColorRole) { + if (entry->hasReferences()) { + QPalette p; + return QVariant(p.color(QPalette::Active, QPalette::Mid)); + } + } return QVariant(); }