#ifndef TEMPLATES_H #define TEMPLATES_H #include "../libfmqtglobals.h" #include #include #include #include "folder.h" #include "fileinfo.h" #include "mimetype.h" #include "iconinfo.h" namespace Fm { class LIBFM_QT_API TemplateItem { public: explicit TemplateItem(std::shared_ptr fileInfo); QString displayName() const { return fileInfo_->displayName(); } const std::string& name() const { return fileInfo_->name(); } std::shared_ptr icon() const { return fileInfo_->icon(); } std::shared_ptr fileInfo() const { return fileInfo_; } std::shared_ptr mimeType() const { return fileInfo_->mimeType(); } FilePath filePath() const; private: std::shared_ptr fileInfo_; }; class LIBFM_QT_API Templates : public QObject { Q_OBJECT public: explicit Templates(); // FIXME: the first call to this method will get no templates since dir loading is in progress. static std::shared_ptr globalInstance(); void forEachItem(std::function&)> func) const { for(const auto& item : items_) { func(item); } } std::vector> items() const { std::vector> tmp_items; for(auto& item: items_) { tmp_items.emplace_back(item); } return tmp_items; } bool hasTemplates() const { return !items_.empty(); } Q_SIGNALS: void itemAdded(const std::shared_ptr& item); void itemChanged(const std::shared_ptr& oldItem, const std::shared_ptr& newItem); void itemRemoved(const std::shared_ptr& item); private: void addTemplateDir(const char* dirPathName); private Q_SLOTS: void onFilesAdded(FileInfoList& addedFiles); void onFilesChanged(std::vector& changePairs); void onFilesRemoved(FileInfoList& removedFiles); void onTemplateDirRemoved(); private: std::vector> items_; std::vector> templateFolders_; static std::weak_ptr globalInstance_; }; } // namespace Fm #endif // TEMPLATES_H