diff options
| -rw-r--r-- | src/filetreeitem.cpp | 10 | ||||
| -rw-r--r-- | src/filetreeitem.h | 9 | ||||
| -rw-r--r-- | src/filetreemodel.cpp | 41 | ||||
| -rw-r--r-- | src/filetreemodel.h | 9 |
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); |
