diff --git a/COPYING b/COPYING index e4551e7d0..b610dcc60 100644 --- a/COPYING +++ b/COPYING @@ -10,3 +10,26 @@ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +-------------------------------------------------------------------- + +Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=135 +Name: KeePassX +Maintainer: Felix Geyer +Source: http://www.keepassx.org/ + +Copyright: 2010, Felix Geyer +License: GPL-2 or GPL-3 + +Files: cmake/FindLibgcrypt.cmake +Copyright: 2006, Pino Toscano + 2008, Modestas Vainius +License: BSD + +Files: share/icons/entries/*.png +Copyright: 2003-2004, David Vignoni +License: LGPL-2.1 + +Files: tests/modeltest.* +Copyright: 2007, Trolltech ASA +License: GPL-2 diff --git a/share/icons/database/C00_Password.png b/share/icons/database/C00_Password.png new file mode 100644 index 000000000..565682498 Binary files /dev/null and b/share/icons/database/C00_Password.png differ diff --git a/share/icons/database/C01_Package_Network.png b/share/icons/database/C01_Package_Network.png new file mode 100644 index 000000000..03ef9a570 Binary files /dev/null and b/share/icons/database/C01_Package_Network.png differ diff --git a/share/icons/database/C02_MessageBox_Warning.png b/share/icons/database/C02_MessageBox_Warning.png new file mode 100644 index 000000000..474f63fc9 Binary files /dev/null and b/share/icons/database/C02_MessageBox_Warning.png differ diff --git a/share/icons/database/C03_Server.png b/share/icons/database/C03_Server.png new file mode 100644 index 000000000..bb8a316d2 Binary files /dev/null and b/share/icons/database/C03_Server.png differ diff --git a/share/icons/database/C04_Klipper.png b/share/icons/database/C04_Klipper.png new file mode 100644 index 000000000..a2c0cfb10 Binary files /dev/null and b/share/icons/database/C04_Klipper.png differ diff --git a/share/icons/database/C05_Edu_Languages.png b/share/icons/database/C05_Edu_Languages.png new file mode 100644 index 000000000..8aa200479 Binary files /dev/null and b/share/icons/database/C05_Edu_Languages.png differ diff --git a/share/icons/database/C06_KCMDF.png b/share/icons/database/C06_KCMDF.png new file mode 100644 index 000000000..604c3d593 Binary files /dev/null and b/share/icons/database/C06_KCMDF.png differ diff --git a/share/icons/database/C07_Kate.png b/share/icons/database/C07_Kate.png new file mode 100644 index 000000000..4a52bb1c5 Binary files /dev/null and b/share/icons/database/C07_Kate.png differ diff --git a/share/icons/database/C08_Socket.png b/share/icons/database/C08_Socket.png new file mode 100644 index 000000000..3125ef804 Binary files /dev/null and b/share/icons/database/C08_Socket.png differ diff --git a/share/icons/database/C09_Identity.png b/share/icons/database/C09_Identity.png new file mode 100644 index 000000000..5e51272c2 Binary files /dev/null and b/share/icons/database/C09_Identity.png differ diff --git a/share/icons/database/C10_Kontact.png b/share/icons/database/C10_Kontact.png new file mode 100644 index 000000000..e4c5cdc0e Binary files /dev/null and b/share/icons/database/C10_Kontact.png differ diff --git a/share/icons/database/C11_Camera.png b/share/icons/database/C11_Camera.png new file mode 100644 index 000000000..45d1436aa Binary files /dev/null and b/share/icons/database/C11_Camera.png differ diff --git a/share/icons/database/C12_IRKickFlash.png b/share/icons/database/C12_IRKickFlash.png new file mode 100644 index 000000000..89e7a97ab Binary files /dev/null and b/share/icons/database/C12_IRKickFlash.png differ diff --git a/share/icons/database/C13_KGPG_Key3.png b/share/icons/database/C13_KGPG_Key3.png new file mode 100644 index 000000000..e68afac8b Binary files /dev/null and b/share/icons/database/C13_KGPG_Key3.png differ diff --git a/share/icons/database/C14_Laptop_Power.png b/share/icons/database/C14_Laptop_Power.png new file mode 100644 index 000000000..69c89a59b Binary files /dev/null and b/share/icons/database/C14_Laptop_Power.png differ diff --git a/share/icons/database/C15_Scanner.png b/share/icons/database/C15_Scanner.png new file mode 100644 index 000000000..fa0f83dd7 Binary files /dev/null and b/share/icons/database/C15_Scanner.png differ diff --git a/share/icons/database/C16_Mozilla_Firebird.png b/share/icons/database/C16_Mozilla_Firebird.png new file mode 100644 index 000000000..7c2e6612b Binary files /dev/null and b/share/icons/database/C16_Mozilla_Firebird.png differ diff --git a/share/icons/database/C17_CDROM_Unmount.png b/share/icons/database/C17_CDROM_Unmount.png new file mode 100644 index 000000000..e2e3f679a Binary files /dev/null and b/share/icons/database/C17_CDROM_Unmount.png differ diff --git a/share/icons/database/C18_Display.png b/share/icons/database/C18_Display.png new file mode 100644 index 000000000..ededc0bd3 Binary files /dev/null and b/share/icons/database/C18_Display.png differ diff --git a/share/icons/database/C19_Mail_Generic.png b/share/icons/database/C19_Mail_Generic.png new file mode 100644 index 000000000..2de442b80 Binary files /dev/null and b/share/icons/database/C19_Mail_Generic.png differ diff --git a/share/icons/database/C20_Misc.png b/share/icons/database/C20_Misc.png new file mode 100644 index 000000000..98d4b9969 Binary files /dev/null and b/share/icons/database/C20_Misc.png differ diff --git a/share/icons/database/C21_KOrganizer.png b/share/icons/database/C21_KOrganizer.png new file mode 100644 index 000000000..6c86544de Binary files /dev/null and b/share/icons/database/C21_KOrganizer.png differ diff --git a/share/icons/database/C22_ASCII.png b/share/icons/database/C22_ASCII.png new file mode 100644 index 000000000..8e771b7fd Binary files /dev/null and b/share/icons/database/C22_ASCII.png differ diff --git a/share/icons/database/C23_Icons.png b/share/icons/database/C23_Icons.png new file mode 100644 index 000000000..df51f18f9 Binary files /dev/null and b/share/icons/database/C23_Icons.png differ diff --git a/share/icons/database/C24_Connect_Established.png b/share/icons/database/C24_Connect_Established.png new file mode 100644 index 000000000..0f6b9f9f8 Binary files /dev/null and b/share/icons/database/C24_Connect_Established.png differ diff --git a/share/icons/database/C25_Folder_Mail.png b/share/icons/database/C25_Folder_Mail.png new file mode 100644 index 000000000..90cf4878f Binary files /dev/null and b/share/icons/database/C25_Folder_Mail.png differ diff --git a/share/icons/database/C26_FileSave.png b/share/icons/database/C26_FileSave.png new file mode 100644 index 000000000..fd0048ded Binary files /dev/null and b/share/icons/database/C26_FileSave.png differ diff --git a/share/icons/database/C27_NFS_Unmount.png b/share/icons/database/C27_NFS_Unmount.png new file mode 100644 index 000000000..f6a8dd54a Binary files /dev/null and b/share/icons/database/C27_NFS_Unmount.png differ diff --git a/share/icons/database/C28_QuickTime.png b/share/icons/database/C28_QuickTime.png new file mode 100644 index 000000000..f0bc57a03 Binary files /dev/null and b/share/icons/database/C28_QuickTime.png differ diff --git a/share/icons/database/C29_KGPG_Term.png b/share/icons/database/C29_KGPG_Term.png new file mode 100644 index 000000000..e77ff5b0d Binary files /dev/null and b/share/icons/database/C29_KGPG_Term.png differ diff --git a/share/icons/database/C30_Konsole.png b/share/icons/database/C30_Konsole.png new file mode 100644 index 000000000..b1366b1f0 Binary files /dev/null and b/share/icons/database/C30_Konsole.png differ diff --git a/share/icons/database/C31_FilePrint.png b/share/icons/database/C31_FilePrint.png new file mode 100644 index 000000000..3a8754322 Binary files /dev/null and b/share/icons/database/C31_FilePrint.png differ diff --git a/share/icons/database/C32_FSView.png b/share/icons/database/C32_FSView.png new file mode 100644 index 000000000..e167acf20 Binary files /dev/null and b/share/icons/database/C32_FSView.png differ diff --git a/share/icons/database/C33_Run.png b/share/icons/database/C33_Run.png new file mode 100644 index 000000000..751424557 Binary files /dev/null and b/share/icons/database/C33_Run.png differ diff --git a/share/icons/database/C34_Configure.png b/share/icons/database/C34_Configure.png new file mode 100644 index 000000000..a4a3834ab Binary files /dev/null and b/share/icons/database/C34_Configure.png differ diff --git a/share/icons/database/C35_KRFB.png b/share/icons/database/C35_KRFB.png new file mode 100644 index 000000000..6f02e877e Binary files /dev/null and b/share/icons/database/C35_KRFB.png differ diff --git a/share/icons/database/C36_Ark.png b/share/icons/database/C36_Ark.png new file mode 100644 index 000000000..e2b67dcba Binary files /dev/null and b/share/icons/database/C36_Ark.png differ diff --git a/share/icons/database/C37_KPercentage.png b/share/icons/database/C37_KPercentage.png new file mode 100644 index 000000000..2a15a078c Binary files /dev/null and b/share/icons/database/C37_KPercentage.png differ diff --git a/share/icons/database/C38_Samba_Unmount.png b/share/icons/database/C38_Samba_Unmount.png new file mode 100644 index 000000000..3f3b8ff0f Binary files /dev/null and b/share/icons/database/C38_Samba_Unmount.png differ diff --git a/share/icons/database/C39_History.png b/share/icons/database/C39_History.png new file mode 100644 index 000000000..8d658e0de Binary files /dev/null and b/share/icons/database/C39_History.png differ diff --git a/share/icons/database/C40_Mail_Find.png b/share/icons/database/C40_Mail_Find.png new file mode 100644 index 000000000..1e230e2e4 Binary files /dev/null and b/share/icons/database/C40_Mail_Find.png differ diff --git a/share/icons/database/C41_VectorGfx.png b/share/icons/database/C41_VectorGfx.png new file mode 100644 index 000000000..5b51008bd Binary files /dev/null and b/share/icons/database/C41_VectorGfx.png differ diff --git a/share/icons/database/C42_KCMMemory.png b/share/icons/database/C42_KCMMemory.png new file mode 100644 index 000000000..c74903467 Binary files /dev/null and b/share/icons/database/C42_KCMMemory.png differ diff --git a/share/icons/database/C43_EditTrash.png b/share/icons/database/C43_EditTrash.png new file mode 100644 index 000000000..aa9d7321f Binary files /dev/null and b/share/icons/database/C43_EditTrash.png differ diff --git a/share/icons/database/C44_KNotes.png b/share/icons/database/C44_KNotes.png new file mode 100644 index 000000000..1e27e9cae Binary files /dev/null and b/share/icons/database/C44_KNotes.png differ diff --git a/share/icons/database/C45_Cancel.png b/share/icons/database/C45_Cancel.png new file mode 100644 index 000000000..a432b492c Binary files /dev/null and b/share/icons/database/C45_Cancel.png differ diff --git a/share/icons/database/C46_Help.png b/share/icons/database/C46_Help.png new file mode 100644 index 000000000..28a0f9e5e Binary files /dev/null and b/share/icons/database/C46_Help.png differ diff --git a/share/icons/database/C47_KPackage.png b/share/icons/database/C47_KPackage.png new file mode 100644 index 000000000..fdb3644c6 Binary files /dev/null and b/share/icons/database/C47_KPackage.png differ diff --git a/share/icons/database/C48_Folder.png b/share/icons/database/C48_Folder.png new file mode 100644 index 000000000..9232553fc Binary files /dev/null and b/share/icons/database/C48_Folder.png differ diff --git a/share/icons/database/C49_Folder_Blue_Open.png b/share/icons/database/C49_Folder_Blue_Open.png new file mode 100644 index 000000000..2c55c5636 Binary files /dev/null and b/share/icons/database/C49_Folder_Blue_Open.png differ diff --git a/share/icons/database/C50_Folder_Tar.png b/share/icons/database/C50_Folder_Tar.png new file mode 100644 index 000000000..2effa3950 Binary files /dev/null and b/share/icons/database/C50_Folder_Tar.png differ diff --git a/share/icons/database/C51_Decrypted.png b/share/icons/database/C51_Decrypted.png new file mode 100644 index 000000000..42dd93e26 Binary files /dev/null and b/share/icons/database/C51_Decrypted.png differ diff --git a/share/icons/database/C52_Encrypted.png b/share/icons/database/C52_Encrypted.png new file mode 100644 index 000000000..80357125c Binary files /dev/null and b/share/icons/database/C52_Encrypted.png differ diff --git a/share/icons/database/C53_Apply.png b/share/icons/database/C53_Apply.png new file mode 100644 index 000000000..5b0f6a617 Binary files /dev/null and b/share/icons/database/C53_Apply.png differ diff --git a/share/icons/database/C54_Signature.png b/share/icons/database/C54_Signature.png new file mode 100644 index 000000000..8834f3f59 Binary files /dev/null and b/share/icons/database/C54_Signature.png differ diff --git a/share/icons/database/C55_Thumbnail.png b/share/icons/database/C55_Thumbnail.png new file mode 100644 index 000000000..91adff8de Binary files /dev/null and b/share/icons/database/C55_Thumbnail.png differ diff --git a/share/icons/database/C56_KAddressBook.png b/share/icons/database/C56_KAddressBook.png new file mode 100644 index 000000000..7f879f8cb Binary files /dev/null and b/share/icons/database/C56_KAddressBook.png differ diff --git a/share/icons/database/C57_View_Text.png b/share/icons/database/C57_View_Text.png new file mode 100644 index 000000000..c688d5f6f Binary files /dev/null and b/share/icons/database/C57_View_Text.png differ diff --git a/share/icons/database/C58_KGPG.png b/share/icons/database/C58_KGPG.png new file mode 100644 index 000000000..a6ed9b4b7 Binary files /dev/null and b/share/icons/database/C58_KGPG.png differ diff --git a/share/icons/database/C59_Package_Development.png b/share/icons/database/C59_Package_Development.png new file mode 100644 index 000000000..df1fb742e Binary files /dev/null and b/share/icons/database/C59_Package_Development.png differ diff --git a/share/icons/database/C60_KFM_Home.png b/share/icons/database/C60_KFM_Home.png new file mode 100644 index 000000000..3525b0b73 Binary files /dev/null and b/share/icons/database/C60_KFM_Home.png differ diff --git a/share/icons/database/C61_Services.png b/share/icons/database/C61_Services.png new file mode 100644 index 000000000..2a24b7e7f Binary files /dev/null and b/share/icons/database/C61_Services.png differ diff --git a/share/icons/database/C62_Tux.png b/share/icons/database/C62_Tux.png new file mode 100644 index 000000000..14f3272f2 Binary files /dev/null and b/share/icons/database/C62_Tux.png differ diff --git a/share/icons/database/C63_Feather.png b/share/icons/database/C63_Feather.png new file mode 100644 index 000000000..de27e959d Binary files /dev/null and b/share/icons/database/C63_Feather.png differ diff --git a/share/icons/database/C64_Apple.png b/share/icons/database/C64_Apple.png new file mode 100644 index 000000000..d8db6871c Binary files /dev/null and b/share/icons/database/C64_Apple.png differ diff --git a/share/icons/database/C65_Apple.png b/share/icons/database/C65_Apple.png new file mode 100644 index 000000000..c7f39adad Binary files /dev/null and b/share/icons/database/C65_Apple.png differ diff --git a/share/icons/database/C66_Money.png b/share/icons/database/C66_Money.png new file mode 100644 index 000000000..5db755dfa Binary files /dev/null and b/share/icons/database/C66_Money.png differ diff --git a/share/icons/database/C67_Certificate.png b/share/icons/database/C67_Certificate.png new file mode 100644 index 000000000..2526fbe76 Binary files /dev/null and b/share/icons/database/C67_Certificate.png differ diff --git a/share/icons/database/C68_BlackBerry.png b/share/icons/database/C68_BlackBerry.png new file mode 100644 index 000000000..6db395484 Binary files /dev/null and b/share/icons/database/C68_BlackBerry.png differ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c2964c406..771b8b5ce 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -19,6 +19,7 @@ configure_file( config-keepassx.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-keepa set(keepassx_SOURCES core/Database.cpp + core/DatabaseIcons.cpp core/Endian.cpp core/Entry.cpp core/Group.cpp diff --git a/src/config-keepassx.h.cmake b/src/config-keepassx.h.cmake index f79dde174..21be30be5 100644 --- a/src/config-keepassx.h.cmake +++ b/src/config-keepassx.h.cmake @@ -1,3 +1,5 @@ /* config-keepassx.h. Generated by cmake from config-keepassx.h.cmake */ #define KEEPASSX_VERSION "${KEEPASSX_VERSION}" + +#define KEEPASSX_SOURCE_DIR "${CMAKE_SOURCE_DIR}" diff --git a/src/core/Database.cpp b/src/core/Database.cpp index be8f5c5fe..fcb5eab83 100644 --- a/src/core/Database.cpp +++ b/src/core/Database.cpp @@ -48,15 +48,9 @@ Metadata* Database::metadata() return m_metadata; } -QImage Database::icon(int number) +const Metadata* Database::metadata() const { - // TODO implement - return QImage(); -} - -QImage Database::customIcon(const Uuid& uuid) const -{ - return m_customIcons[uuid]; + return m_metadata; } Entry* Database::resolveEntry(const Uuid& uuid) diff --git a/src/core/Database.h b/src/core/Database.h index cb3e299b4..486b8178c 100644 --- a/src/core/Database.h +++ b/src/core/Database.h @@ -21,7 +21,7 @@ #include "Group.h" #include -#include +#include class Metadata; @@ -41,8 +41,7 @@ public: const Group* rootGroup() const; void setRootGroup(Group* group); Metadata* metadata(); - static QImage icon(int number); - QImage customIcon(const Uuid& uuid) const; + const Metadata* metadata() const; Entry* resolveEntry(const Uuid& uuid); Group* resolveGroup(const Uuid& uuid); QList deletedObjects(); @@ -61,7 +60,6 @@ private: Metadata* m_metadata; Group* m_rootGroup; - QHash m_customIcons; QList m_deletedObjects; }; diff --git a/src/core/DatabaseIcons.cpp b/src/core/DatabaseIcons.cpp new file mode 100644 index 000000000..b3fc70308 --- /dev/null +++ b/src/core/DatabaseIcons.cpp @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2010 Felix Geyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 or (at your option) + * version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "config-keepassx.h" +#include "DatabaseIcons.h" + +DatabaseIcons* DatabaseIcons::m_instance(0); + +QIcon DatabaseIcons::icon(int index) +{ + if (index >= iconCount()) { + return QIcon(); + } + + if (!m_instance) { + m_instance = new DatabaseIcons(); + } + + return m_instance->getIconInternal(index); +} + +int DatabaseIcons::iconCount() +{ + return 69; +} + +DatabaseIcons::DatabaseIcons() +{ + m_indexToName.append("C00_Password.png"); + m_indexToName.append("C01_Package_Network.png"); + m_indexToName.append("C02_MessageBox_Warning.png"); + m_indexToName.append("C03_Server.png"); + m_indexToName.append("C04_Klipper.png"); + m_indexToName.append("C05_Edu_Languages.png"); + m_indexToName.append("C06_KCMDF.png"); + m_indexToName.append("C07_Kate.png"); + m_indexToName.append("C08_Socket.png"); + m_indexToName.append("C09_Identity.png"); + m_indexToName.append("C10_Kontact.png"); + m_indexToName.append("C11_Camera.png"); + m_indexToName.append("C12_IRKickFlash.png"); + m_indexToName.append("C13_KGPG_Key3.png"); + m_indexToName.append("C14_Laptop_Power.png"); + m_indexToName.append("C15_Scanner.png"); + m_indexToName.append("C16_Mozilla_Firebird.png"); + m_indexToName.append("C17_CDROM_Unmount.png"); + m_indexToName.append("C18_Display.png"); + m_indexToName.append("C19_Mail_Generic.png"); + m_indexToName.append("C20_Misc.png"); + m_indexToName.append("C21_KOrganizer.png"); + m_indexToName.append("C22_ASCII.png"); + m_indexToName.append("C23_Icons.png"); + m_indexToName.append("C24_Connect_Established.png"); + m_indexToName.append("C25_Folder_Mail.png"); + m_indexToName.append("C26_FileSave.png"); + m_indexToName.append("C27_NFS_Unmount.png"); + m_indexToName.append("C28_QuickTime.png"); + m_indexToName.append("C29_KGPG_Term.png"); + m_indexToName.append("C30_Konsole.png"); + m_indexToName.append("C31_FilePrint.png"); + m_indexToName.append("C32_FSView.png"); + m_indexToName.append("C33_Run.png"); + m_indexToName.append("C34_Configure.png"); + m_indexToName.append("C35_KRFB.png"); + m_indexToName.append("C36_Ark.png"); + m_indexToName.append("C37_KPercentage.png"); + m_indexToName.append("C38_Samba_Unmount.png"); + m_indexToName.append("C39_History.png"); + m_indexToName.append("C40_Mail_Find.png"); + m_indexToName.append("C41_VectorGfx.png"); + m_indexToName.append("C42_KCMMemory.png"); + m_indexToName.append("C43_EditTrash.png"); + m_indexToName.append("C44_KNotes.png"); + m_indexToName.append("C45_Cancel.png"); + m_indexToName.append("C46_Help.png"); + m_indexToName.append("C47_KPackage.png"); + m_indexToName.append("C48_Folder.png"); + m_indexToName.append("C49_Folder_Blue_Open.png"); + m_indexToName.append("C50_Folder_Tar.png"); + m_indexToName.append("C51_Decrypted.png"); + m_indexToName.append("C52_Encrypted.png"); + m_indexToName.append("C53_Apply.png"); + m_indexToName.append("C54_Signature.png"); + m_indexToName.append("C55_Thumbnail.png"); + m_indexToName.append("C56_KAddressBook.png"); + m_indexToName.append("C57_View_Text.png"); + m_indexToName.append("C58_KGPG.png"); + m_indexToName.append("C59_Package_Development.png"); + m_indexToName.append("C60_KFM_Home.png"); + m_indexToName.append("C61_Services.png"); + m_indexToName.append("C62_Tux.png"); + m_indexToName.append("C63_Feather.png"); + m_indexToName.append("C64_Apple.png"); + m_indexToName.append("C65_Apple.png"); + m_indexToName.append("C66_Money.png"); + m_indexToName.append("C67_Certificate.png"); + m_indexToName.append("C68_BlackBerry.png"); + + Q_ASSERT(m_indexToName.size() == iconCount()); +} +#include +QIcon DatabaseIcons::getIconInternal(int index) +{ + if (m_iconCache.contains(index)) { + return m_iconCache.value(index); + } + else { + // TODO search multiple paths + QIcon icon(QString(KEEPASSX_SOURCE_DIR).append("/share/icons/database/").append(m_indexToName.at(index))); + + m_iconCache.insert(index, icon); + return icon; + } +} diff --git a/src/core/DatabaseIcons.h b/src/core/DatabaseIcons.h new file mode 100644 index 000000000..2894351fa --- /dev/null +++ b/src/core/DatabaseIcons.h @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2010 Felix Geyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 or (at your option) + * version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include + +class DatabaseIcons +{ +public: + static QIcon icon(int index); + static int iconCount(); + +private: + static DatabaseIcons* m_instance; + +private: + DatabaseIcons(); + QIcon getIconInternal(int index); + + bool m_initalized; + QList m_indexToName; + QHash m_iconCache; +}; diff --git a/src/core/Entry.cpp b/src/core/Entry.cpp index ee1ddf549..783b824fb 100644 --- a/src/core/Entry.cpp +++ b/src/core/Entry.cpp @@ -18,7 +18,9 @@ #include "Entry.h" #include "Database.h" +#include "DatabaseIcons.h" #include "Group.h" +#include "Metadata.h" Entry::Entry() { @@ -37,15 +39,13 @@ Uuid Entry::uuid() const return m_uuid; } -QImage Entry::icon() const +QIcon Entry::icon() const { - Q_ASSERT(m_iconNumber != 0 || !m_customIcon.isNull()); - - if (m_iconNumber == 0) { - return m_db->customIcon(m_customIcon); + if (m_customIcon.isNull()) { + return DatabaseIcons::icon(m_iconNumber); } else { - return Database::icon(m_iconNumber); + return m_db->metadata()->customIcon(m_customIcon); } } diff --git a/src/core/Entry.h b/src/core/Entry.h index ad3f22d3b..5147fbcf9 100644 --- a/src/core/Entry.h +++ b/src/core/Entry.h @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include "TimeInfo.h" #include "Uuid.h" @@ -43,7 +43,7 @@ public: Entry(); ~Entry(); Uuid uuid() const; - QImage icon() const; + QIcon icon() const; int iconNumber() const; Uuid iconUuid() const; QColor foregroundColor() const; diff --git a/src/core/Group.cpp b/src/core/Group.cpp index 0aaceb129..730171244 100644 --- a/src/core/Group.cpp +++ b/src/core/Group.cpp @@ -21,6 +21,8 @@ #include "Group.h" #include "Database.h" +#include "DatabaseIcons.h" +#include "Metadata.h" Group::Group() { @@ -48,13 +50,13 @@ QString Group::notes() const return m_notes; } -QImage Group::icon() const +QIcon Group::icon() const { - if (m_iconNumber == 0) { - return m_db->customIcon(m_customIcon); + if (m_customIcon.isNull()) { + return DatabaseIcons::icon(m_iconNumber); } else { - return Database::icon(m_iconNumber); + return m_db->metadata()->customIcon(m_customIcon); } } diff --git a/src/core/Group.h b/src/core/Group.h index 14cf33f2c..15d5119c0 100644 --- a/src/core/Group.h +++ b/src/core/Group.h @@ -18,7 +18,7 @@ #ifndef KEEPASSX_GROUP_H #define KEEPASSX_GROUP_H -#include +#include #include "Entry.h" #include "TimeInfo.h" @@ -36,7 +36,7 @@ public: Uuid uuid() const; QString name() const; QString notes() const; - QImage icon() const; + QIcon icon() const; int iconNumber() const; Uuid iconUuid() const; TimeInfo timeInfo() const; diff --git a/src/core/Metadata.cpp b/src/core/Metadata.cpp index 11ffbd585..284ff6bc7 100644 --- a/src/core/Metadata.cpp +++ b/src/core/Metadata.cpp @@ -100,7 +100,12 @@ bool Metadata::autoEnableVisualHiding() const return m_autoEnableVisualHiding; } -QHash Metadata::customIcons() const +QIcon Metadata::customIcon(const Uuid& uuid) const +{ + return m_customIcons.value(uuid); +} + +QHash Metadata::customIcons() const { return m_customIcons; } @@ -215,12 +220,12 @@ void Metadata::setAutoEnableVisualHiding(bool value) m_autoEnableVisualHiding = value; } -void Metadata::addCustomIcon(const Uuid& uuid, const QImage& image) +void Metadata::addCustomIcon(const Uuid& uuid, const QIcon& icon) { Q_ASSERT(!uuid.isNull()); Q_ASSERT(!m_customIcons.contains(uuid)); - m_customIcons.insert(uuid, image); + m_customIcons.insert(uuid, icon); } void Metadata::removeCustomIcon(const Uuid& uuid) diff --git a/src/core/Metadata.h b/src/core/Metadata.h index b25d33fb6..f49a4f9ff 100644 --- a/src/core/Metadata.h +++ b/src/core/Metadata.h @@ -22,7 +22,7 @@ #include #include -#include +#include class Database; class Group; @@ -48,7 +48,8 @@ public: bool protectUrl() const; bool protectNotes() const; bool autoEnableVisualHiding() const; - QHash customIcons() const; + QIcon customIcon(const Uuid& uuid) const; + QHash customIcons() const; bool recycleBinEnabled() const; const Group* recycleBin() const; QDateTime recycleBinChanged() const; @@ -72,7 +73,7 @@ public: void setProtectUrl(bool value); void setProtectNotes(bool value); void setAutoEnableVisualHiding(bool value); - void addCustomIcon(const Uuid& uuid, const QImage& image); + void addCustomIcon(const Uuid& uuid, const QIcon& icon); void removeCustomIcon(const Uuid& uuid); void setRecycleBinEnabled(bool value); void setRecycleBin(Group* group); @@ -101,7 +102,7 @@ private: bool m_protectNotes; bool m_autoEnableVisualHiding; - QHash m_customIcons; + QHash m_customIcons; bool m_recycleBinEnabled; Group* m_recycleBin; diff --git a/src/format/KeePass2XmlReader.cpp b/src/format/KeePass2XmlReader.cpp index 2522d8970..23bb4b7fc 100644 --- a/src/format/KeePass2XmlReader.cpp +++ b/src/format/KeePass2XmlReader.cpp @@ -209,9 +209,9 @@ void KeePass2XmlReader::parseIcon() uuid = readUuid(); } else if (m_xml.name() == "Data") { - QImage image; - image.loadFromData(readBinary()); - m_meta->addCustomIcon(uuid, image); + QPixmap pixmap; + pixmap.loadFromData(readBinary()); + m_meta->addCustomIcon(uuid, QIcon(pixmap)); } else { skipCurrentElement(); @@ -445,8 +445,9 @@ Entry* KeePass2XmlReader::parseEntry(bool history) } else if (m_xml.name() == "CustomIconUUID") { Uuid uuid = readUuid(); - if (!uuid.isNull()) + if (!uuid.isNull()) { entry->setIcon(uuid); + } } else if (m_xml.name() == "ForegroundColor") { entry->setForegroundColor(readColor()); @@ -755,6 +756,6 @@ void KeePass2XmlReader::raiseError() void KeePass2XmlReader::skipCurrentElement() { - qDebug() << "KeePass2XmlReader::skipCurrentElement(): skip: " << m_xml.name(); + qWarning() << "KeePass2XmlReader::skipCurrentElement(): skip: " << m_xml.name(); m_xml.skipCurrentElement(); } diff --git a/src/format/KeePass2XmlWriter.cpp b/src/format/KeePass2XmlWriter.cpp index 3b378c0bd..d3b2a612a 100644 --- a/src/format/KeePass2XmlWriter.cpp +++ b/src/format/KeePass2XmlWriter.cpp @@ -101,7 +101,7 @@ void KeePass2XmlWriter::writeCustomIcons() { m_xml.writeStartElement("CustomIcons"); - QHash customIcons = m_meta->customIcons(); + QHash customIcons = m_meta->customIcons(); Q_FOREACH (const Uuid& uuid, customIcons.keys()) { writeIcon(uuid, customIcons.value(uuid)); } @@ -109,16 +109,18 @@ void KeePass2XmlWriter::writeCustomIcons() m_xml.writeEndElement(); } -void KeePass2XmlWriter::writeIcon(const Uuid& uuid, const QImage& image) +void KeePass2XmlWriter::writeIcon(const Uuid& uuid, const QIcon& icon) { m_xml.writeStartElement("Icon"); writeUuid("UUID", uuid); + QPixmap pixmap = icon.pixmap(16, 16); + QByteArray ba; QBuffer buffer(&ba); buffer.open(QIODevice::WriteOnly); - image.save(&buffer, "PNG"); + pixmap.save(&buffer, "PNG"); buffer.close(); writeBinary("Data", ba); diff --git a/src/format/KeePass2XmlWriter.h b/src/format/KeePass2XmlWriter.h index 8050697c6..ba123b80d 100644 --- a/src/format/KeePass2XmlWriter.h +++ b/src/format/KeePass2XmlWriter.h @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include "core/Database.h" #include "core/Entry.h" @@ -44,7 +44,7 @@ private: void writeMetadata(); void writeMemoryProtection(); void writeCustomIcons(); - void writeIcon(const Uuid& uuid, const QImage& image); + void writeIcon(const Uuid& uuid, const QIcon& icon); void writeCustomData(); void writeCustomDataItem(const QString& key, const QString& value); void writeRoot(); diff --git a/src/gui/EntryModel.cpp b/src/gui/EntryModel.cpp index ae0f67bfc..04f33f405 100644 --- a/src/gui/EntryModel.cpp +++ b/src/gui/EntryModel.cpp @@ -78,9 +78,9 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const if (role == Qt::DisplayRole) { return entry->title(); } - /*else if (role == Qt::DecorationRole) { + else if (role == Qt::DecorationRole) { return entry->icon(); - }*/ + } else { return QVariant(); } diff --git a/src/gui/GroupModel.cpp b/src/gui/GroupModel.cpp index 8398a7f32..7b135c29f 100644 --- a/src/gui/GroupModel.cpp +++ b/src/gui/GroupModel.cpp @@ -108,10 +108,9 @@ QVariant GroupModel::data(const QModelIndex& index, int role) const if (role == Qt::DisplayRole) { return group->name(); } - // TODO enable - /*else if (role == Qt::DecorationRole) { + else if (role == Qt::DecorationRole) { return group->icon(); - }*/ + } else { return QVariant(); } diff --git a/tests/TestKeePass2XmlReader.cpp b/tests/TestKeePass2XmlReader.cpp index 64d726a57..6110c7a40 100644 --- a/tests/TestKeePass2XmlReader.cpp +++ b/tests/TestKeePass2XmlReader.cpp @@ -103,9 +103,8 @@ void TestParser::testCustomIcons() QCOMPARE(m_db->metadata()->customIcons().size(), 1); Uuid uuid = Uuid::fromBase64("++vyI+daLk6omox4a6kQGA=="); QVERIFY(m_db->metadata()->customIcons().contains(uuid)); - const QImage& img = m_db->metadata()->customIcons()[uuid]; - QCOMPARE(img.width(), 16); - QCOMPARE(img.height(), 16); + QIcon icon = m_db->metadata()->customIcon(uuid); + QImage img = icon.pixmap(16, 16).toImage(); for (int x=0; x<16; x++) { for (int y=0; y<16; y++) { QRgb rgb = img.pixel(x, y);