summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qdirfiletree.cpp89
-rw-r--r--src/qdirfiletree.h15
2 files changed, 60 insertions, 44 deletions
diff --git a/src/qdirfiletree.cpp b/src/qdirfiletree.cpp
index e80c7127..691bac87 100644
--- a/src/qdirfiletree.cpp
+++ b/src/qdirfiletree.cpp
@@ -4,42 +4,69 @@
using namespace MOBase;
-/**
- *
- */
-std::shared_ptr<const QDirFileTree> QDirFileTree::makeTree(QDir directory) {
- return std::shared_ptr<const QDirFileTree>(new QDirFileTree(nullptr, directory));
-}
+class QFileTreeEntry : public virtual FileTreeEntry {
+public:
+ using FileTreeEntry::FileTreeEntry;
-/**
- *
- */
-QDirFileTree::QDirFileTree(std::shared_ptr<const IFileTree> parent, QDir directory) : FileTreeEntry(parent, directory.dirName()), IFileTree(), qDir(directory) { }
+ QFileTreeEntry(std::shared_ptr<const IFileTree> parent, QFileInfo fileInfo) :
+ FileTreeEntry(parent, fileInfo.fileName()), m_FileInfo(fileInfo) { }
-/**
- * No mutable operations allowed.
- */
-bool QDirFileTree::beforeReplace(IFileTree const* dstTree, FileTreeEntry const* destination, FileTreeEntry const* source) { return false; }
-bool QDirFileTree::beforeInsert(IFileTree const* entry, FileTreeEntry const* name) { return false; }
-bool QDirFileTree::beforeRemove(IFileTree const* entry, FileTreeEntry const* name) { return false; }
-std::shared_ptr<FileTreeEntry> QDirFileTree::makeFile(std::shared_ptr<const IFileTree> parent, QString name) const { return nullptr; }
-std::shared_ptr<IFileTree> QDirFileTree::makeDirectory(std::shared_ptr<const IFileTree> parent, QString name) const { return nullptr; }
+ QDateTime time() const override {
+ return m_FileInfo.lastModified();
+ }
-bool QDirFileTree::doPopulate(std::shared_ptr<const IFileTree> parent, std::vector<std::shared_ptr<FileTreeEntry>>& entries) const {
- auto infoList = qDir.entryInfoList(qDir.filter() | QDir::NoDotAndDotDot, QDir::Name | QDir::DirsFirst | QDir::IgnoreCase);
- for (auto& info : infoList) {
- if (info.isDir()) {
- entries.push_back(std::shared_ptr<QDirFileTree>(new QDirFileTree(parent, QDir(info.absoluteFilePath()))));
- }
- else {
- entries.push_back(createFileEntry(parent, info.fileName()));
+protected:
+ QFileInfo m_FileInfo;
+};
+
+class QDirFileTreeImpl : public QDirFileTree {
+public:
+
+
+ /**
+ *
+ */
+ QDirFileTreeImpl(std::shared_ptr<const IFileTree> parent, QDir dir) :
+ FileTreeEntry(parent, dir.dirName()), QDirFileTree(), qDir(dir) { }
+
+protected:
+
+ /**
+ * No mutable operations allowed.
+ */
+ bool beforeReplace(IFileTree const* dstTree, FileTreeEntry const* destination, FileTreeEntry const* source) override { return false; }
+ bool beforeInsert(IFileTree const* entry, FileTreeEntry const* name) override { return false; }
+ bool beforeRemove(IFileTree const* entry, FileTreeEntry const* name) override { return false; }
+ std::shared_ptr<FileTreeEntry> makeFile(std::shared_ptr<const IFileTree> parent, QString name) const override { return nullptr; }
+ std::shared_ptr<IFileTree> makeDirectory(std::shared_ptr<const IFileTree> parent, QString name) const override { return nullptr; }
+
+ bool doPopulate(std::shared_ptr<const IFileTree> parent, std::vector<std::shared_ptr<FileTreeEntry>>& entries) const override {
+ auto infoList = qDir.entryInfoList(qDir.filter() | QDir::NoDotAndDotDot, QDir::Name | QDir::DirsFirst | QDir::IgnoreCase);
+ for (auto& info : infoList) {
+ if (info.isDir()) {
+ entries.push_back(std::make_shared<QDirFileTreeImpl>(parent, QDir(info.absoluteFilePath())));
+ }
+ else {
+ entries.push_back(std::make_shared<QFileTreeEntry>(parent, info));
+ }
}
+
+ // Vector is already sorted:
+ return true;
}
- // Vector is already sorted:
- return true;
-}
+ std::shared_ptr<IFileTree> QDirFileTree::doClone() const {
+ return std::make_shared<QDirFileTreeImpl>(nullptr, qDir);
+ }
-std::shared_ptr<IFileTree> QDirFileTree::doClone() const {
- return std::shared_ptr<QDirFileTree>(new QDirFileTree(nullptr, qDir));
+private:
+ QDir qDir;
+
+};
+
+/**
+ *
+ */
+std::shared_ptr<const QDirFileTree> QDirFileTree::makeTree(QDir directory) {
+ return std::make_shared<QDirFileTreeImpl>(nullptr, directory);
}
diff --git a/src/qdirfiletree.h b/src/qdirfiletree.h
index e6b8706e..1f85b04f 100644
--- a/src/qdirfiletree.h
+++ b/src/qdirfiletree.h
@@ -43,22 +43,11 @@ public:
*/
static std::shared_ptr<const QDirFileTree> makeTree(QDir directory);
- QDirFileTree(std::shared_ptr<const IFileTree> parent, QDir directory);
-
protected:
+ using IFileTree::IFileTree;
- virtual bool beforeReplace(IFileTree const* dstTree, FileTreeEntry const* destination, FileTreeEntry const* source) override;
- virtual bool beforeInsert(IFileTree const* entry, FileTreeEntry const* name) override;
- virtual bool beforeRemove(IFileTree const* entry, FileTreeEntry const* name) override;
-
- virtual std::shared_ptr<FileTreeEntry> makeFile(std::shared_ptr<const IFileTree> parent, QString name) const override;
- virtual std::shared_ptr<IFileTree> makeDirectory(std::shared_ptr<const IFileTree> parent, QString name) const override;
- virtual bool doPopulate(std::shared_ptr<const IFileTree> parent, std::vector<std::shared_ptr<FileTreeEntry>>& entries) const override;
- virtual std::shared_ptr<IFileTree> doClone() const override;
-
- QDir qDir;
-
+ virtual bool doPopulate(std::shared_ptr<const IFileTree> parent, std::vector<std::shared_ptr<FileTreeEntry>>& entries) const = 0;
};
#endif