Implement Entry::image().

This commit is contained in:
Felix Geyer 2010-08-14 12:24:35 +02:00
parent bd1ea05017
commit 01694c3271
7 changed files with 58 additions and 8 deletions

View File

@ -50,7 +50,7 @@ QImage Database::icon(int number)
return QImage();
}
QImage Database::customIcon(const Uuid& uuid)
QImage Database::customIcon(const Uuid& uuid) const
{
return m_customIcons[uuid];
}

View File

@ -37,7 +37,7 @@ public:
void setRootGroup(Group* group);
Metadata* metadata();
static QImage icon(int number);
QImage customIcon(const Uuid& uuid);
QImage customIcon(const Uuid& uuid) const;
Entry* resolveEntry(const Uuid& uuid);
Group* resolveGroup(const Uuid& uuid);

View File

@ -17,11 +17,13 @@
#include "Entry.h"
#include "Database.h"
#include "Group.h"
Entry::Entry()
{
m_group = 0;
m_db = 0;
}
Uuid Entry::uuid() const
@ -31,8 +33,12 @@ Uuid Entry::uuid() const
QImage Entry::icon() const
{
// TODO implement
return QImage();
Q_ASSERT(m_iconNumber != 0 || !m_customIcon.isNull());
if (m_iconNumber == 0)
return m_db->customIcon(m_customIcon);
else
return Database::icon(m_iconNumber);
}
QColor Entry::foregroundColor() const
@ -88,17 +94,22 @@ const QHash<QString, QByteArray>& Entry::attachments() const
void Entry::setUuid(const Uuid& uuid)
{
Q_ASSERT(!uuid.isNull());
m_uuid = uuid;
}
void Entry::setIcon(int iconNumber)
{
Q_ASSERT(iconNumber >= 0);
m_iconNumber = iconNumber;
m_customIcon = Uuid();
}
void Entry::setIcon(const Uuid& uuid)
{
Q_ASSERT(!uuid.isNull());
m_iconNumber = 0;
m_customIcon = uuid;
}
@ -160,5 +171,6 @@ void Entry::setGroup(Group* group)
}
group->addEntry(this);
m_group = group;
m_db = group->database();
QObject::setParent(group);
}

View File

@ -26,6 +26,7 @@
#include "TimeInfo.h"
#include "Uuid.h"
class Database;
class Group;
struct AutoTypeAssociation
@ -85,6 +86,7 @@ private:
QHash<QString, QByteArray> m_binaries;
Group* m_group;
const Database* m_db;
};
#endif // KEEPASSX_ENTRY_H

View File

@ -88,12 +88,16 @@ void Group::setNotes(const QString& notes)
void Group::setIcon(int iconNumber)
{
Q_ASSERT(iconNumber >= 0);
m_iconNumber = iconNumber;
m_customIcon = Uuid();
}
void Group::setIcon(const Uuid& uuid)
{
Q_ASSERT(!uuid.isNull());
m_iconNumber = 0;
m_customIcon = uuid;
}
@ -130,7 +134,11 @@ void Group::setParent(Group* parent)
}
m_parent = parent;
m_db = parent->m_db;
if (m_db != parent->m_db) {
recSetDatabase(parent->m_db);
}
QObject::setParent(parent);
parent->m_children << this;
@ -148,12 +156,18 @@ void Group::setParent(Database* db)
}
m_parent = 0;
m_db = db;
recSetDatabase(db);
QObject::setParent(db);
db->setRootGroup(this);
}
const Database* Group::database() const
{
return m_db;
}
QList<Group*> Group::children() const
{
return m_children;
@ -166,6 +180,8 @@ QList<Entry*> Group::entries() const
void Group::addEntry(Entry *entry)
{
Q_ASSERT(entry != 0);
m_entries << entry;
}
@ -173,3 +189,12 @@ void Group::removeEntry(Entry* entry)
{
m_entries.removeAll(entry);
}
void Group::recSetDatabase(Database* db)
{
m_db = db;
Q_FOREACH (Group* group, m_children) {
group->recSetDatabase(db);
}
}

View File

@ -54,12 +54,15 @@ public:
void setParent(Group* parent);
void setParent(Database* db);
const Database* database() const;
QList<Group*> children() const;
QList<Entry*> entries() const;
void addEntry(Entry* entry);
void removeEntry(Entry* entry);
private:
void recSetDatabase(Database* db);
Database* m_db;
Uuid m_uuid;
QString m_name;

View File

@ -260,9 +260,13 @@ Group* Parser::parseGroup()
}
else if (m_xml.name() == "IconID") {
int iconId = readNumber();
if (iconId != 0)
if (iconId < 0) {
raiseError();
}
else if (iconId != 0) {
group->setIcon(iconId);
}
}
else if (m_xml.name() == "CustomIconUUID") {
Uuid uuid = readUuid();
if (!uuid.isNull()) {
@ -326,9 +330,13 @@ Entry* Parser::parseEntry()
}
else if (m_xml.name() == "IconID") {
int iconId = readNumber();
if (iconId != 0)
if (iconId < 0) {
raiseError();
}
else if (iconId != 0) {
entry->setIcon(iconId);
}
}
else if (m_xml.name() == "CustomIconUUID") {
Uuid uuid = readUuid();
if (!uuid.isNull())