summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2020-01-22 03:58:22 -0500
committerisanae <14251494+isanae@users.noreply.github.com>2020-02-04 03:33:22 -0500
commita55a69e6ac56dfb6851b5538e4252e9d8dab402b (patch)
tree2c0a9556869d2f263641c4866741a2ee71c80ae2
parent412165fcfbbd27d679a7400ebdef75ff3a9d6aa7 (diff)
file size column
-rw-r--r--src/filetreeitem.cpp10
-rw-r--r--src/filetreeitem.h9
-rw-r--r--src/filetreemodel.cpp41
-rw-r--r--src/filetreemodel.h9
4 files changed, 60 insertions, 9 deletions
diff --git a/src/filetreeitem.cpp b/src/filetreeitem.cpp
index 3b18cf54..cfcf891a 100644
--- a/src/filetreeitem.cpp
+++ b/src/filetreeitem.cpp
@@ -99,6 +99,16 @@ QFont FileTreeItem::font() const
return f;
}
+const FileTreeItem::Meta& FileTreeItem::meta() const
+{
+ if (!m_meta) {
+ QFile f(m_realPath);
+ m_meta = {static_cast<uint64_t>(f.size())};
+ }
+
+ return *m_meta;
+}
+
QFileIconProvider::IconType FileTreeItem::icon() const
{
if (m_flags & Directory) {
diff --git a/src/filetreeitem.h b/src/filetreeitem.h
index 2677d590..445b1ea8 100644
--- a/src/filetreeitem.h
+++ b/src/filetreeitem.h
@@ -17,6 +17,12 @@ public:
Conflicted = 0x04
};
+ struct Meta
+ {
+ uint64_t size;
+ };
+
+
Q_DECLARE_FLAGS(Flags, Flag);
FileTreeItem(
@@ -124,6 +130,8 @@ public:
QFont font() const;
+ const Meta& meta() const;
+
const QString& realPath() const
{
return m_realPath;
@@ -210,6 +218,7 @@ private:
const MOShared::DirectoryEntry::FileKey m_key;
const QString m_file;
const QString m_mod;
+ mutable std::optional<Meta> m_meta;
bool m_loaded;
bool m_expanded;
diff --git a/src/filetreemodel.cpp b/src/filetreemodel.cpp
index 5b513ce2..351e0d2f 100644
--- a/src/filetreemodel.cpp
+++ b/src/filetreemodel.cpp
@@ -196,7 +196,7 @@ int FileTreeModel::rowCount(const QModelIndex& parent) const
int FileTreeModel::columnCount(const QModelIndex&) const
{
- return 2;
+ return ColumnCount;
}
bool FileTreeModel::hasChildren(const QModelIndex& parent) const
@@ -246,10 +246,31 @@ QVariant FileTreeModel::data(const QModelIndex& index, int role) const
case Qt::DisplayRole:
{
if (auto* item=itemFromIndex(index)) {
- if (index.column() == 0) {
- return item->filename();
- } else if (index.column() == 1) {
- return item->mod();
+ switch (index.column())
+ {
+ case Filename:
+ {
+ return item->filename();
+ }
+
+ case ModName:
+ {
+ return item->mod();
+ }
+
+ case FileSize:
+ {
+ if (item->isDirectory()) {
+ return {};
+ } else {
+ return localizedByteSize(item->meta().size);
+ }
+ }
+
+ default:
+ {
+ break;
+ }
}
}
@@ -304,11 +325,13 @@ QVariant FileTreeModel::data(const QModelIndex& index, int role) const
QVariant FileTreeModel::headerData(int i, Qt::Orientation ori, int role) const
{
+ static const std::array<QString, ColumnCount> names = {
+ tr("File"), tr("Mod"), tr("Size")
+ };
+
if (role == Qt::DisplayRole) {
- if (i == 0) {
- return tr("File");
- } else if (i == 1) {
- return tr("Mod");
+ if (i > 0 && i < static_cast<int>(names.size())) {
+ return names[static_cast<std::size_t>(i)];
}
}
diff --git a/src/filetreemodel.h b/src/filetreemodel.h
index 305aba2a..7de6830d 100644
--- a/src/filetreemodel.h
+++ b/src/filetreemodel.h
@@ -20,6 +20,15 @@ public:
Archives = 0x02
};
+ enum Columns
+ {
+ Filename = 0,
+ ModName,
+ FileSize,
+
+ ColumnCount
+ };
+
Q_DECLARE_FLAGS(Flags, Flag);
FileTreeModel(OrganizerCore& core, QObject* parent=nullptr);