/* * This file Copyright (C) 2009-2015 Mnemosyne LLC * * It may be used under the GNU GPL versions 2 or 3 * or any future license endorsed by Mnemosyne LLC. * */ #pragma once #if defined(_WIN32) #include // UINT class QFileInfo; #else #include #include #include "Utils.h" // std::hash() #endif #include #include 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; protected: IconCache(); private: QIcon const folder_icon_; QIcon const file_icon_; mutable std::unordered_map name_to_icon_; mutable std::unordered_map name_to_emblem_icon_; #if defined(_WIN32) void addAssociatedFileIcon(QFileInfo const& file_info, UINT 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 };