// This file Copyright © 2009-2022 Mnemosyne LLC. // It may be used under GPLv2 (SPDX: GPL-2.0), GPLv3 (SPDX: GPL-3.0), // or any future license endorsed by Mnemosyne LLC. // License text can be found in the licenses/ folder. #pragma once #if !defined(_WIN32) #include #endif #include #include #include #include #include #include #include "Utils.h" // std::hash() #if defined(_WIN32) class QFileInfo; #endif class QModelIndex; class IconCache { public: static IconCache& get(); QIcon folderIcon() const { return folder_icon_; } QIcon fileIcon() const { return file_icon_; } QIcon guessMimeIcon(QString const& filename, QIcon fallback = {}) const; QIcon getMimeTypeIcon(QString const& mime_type, bool multifile) const; QIcon getThemeIcon(QString const& name, std::optional const& fallback = {}) const; protected: IconCache() = default; private: QIcon const folder_icon_ = QFileIconProvider().icon(QFileIconProvider::Folder); QIcon const file_icon_ = QFileIconProvider().icon(QFileIconProvider::File); mutable std::unordered_map name_to_icon_; mutable std::unordered_map name_to_emblem_icon_; #if defined(_WIN32) void addAssociatedFileIcon(QFileInfo const& file_info, unsigned int icon_size, QIcon& icon) const; #else mutable std::unordered_set suffixes_; mutable std::unordered_map ext_to_icon_; QIcon getMimeIcon(QString const& filename) const; #endif QIcon getThemeIcon( QString const& name, QString const& fallbackName, std::optional const& fallbackPixmap) const; };