summaryrefslogtreecommitdiff
path: root/src/qdirfiletree.cpp
diff options
context:
space:
mode:
authorMikaël Capelle <capelle.mikael@gmail.com>2020-05-23 18:40:21 +0200
committerMikaël Capelle <capelle.mikael@gmail.com>2020-05-23 18:40:21 +0200
commit2652ed120964e568527fd7e1858a3dd91611fca4 (patch)
tree9bf749dad4dcebac391dbf4468fa219f116e406f /src/qdirfiletree.cpp
parent7b973d5f10299c116c3c707ba28c7d6922be0a9a (diff)
Update QDirFileTree to hide implementation and allow querying time through QFileInfo.
Diffstat (limited to 'src/qdirfiletree.cpp')
-rw-r--r--src/qdirfiletree.cpp89
1 files changed, 58 insertions, 31 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);
}