File indexing completed on 2024-04-28 05:48:12

0001 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0002 // SPDX-FileCopyrightText: 2022 Harald Sitter <sitter@kde.org>
0003 
0004 #include "fileModel.h"
0005 
0006 #include <QMetaEnum>
0007 #include <QUrl>
0008 
0009 #include "fileTree.h"
0010 
0011 namespace Filelight
0012 {
0013 
0014 void FileModel::setTree(const std::shared_ptr<Folder> &tree)
0015 {
0016     beginResetModel();
0017     m_tree = tree;
0018     Q_EMIT treeChanged();
0019     endResetModel();
0020 }
0021 
0022 QUrl FileModel::url() const
0023 {
0024     if (m_tree) {
0025         return m_tree->url();
0026     }
0027     return {};
0028 }
0029 
0030 int FileModel::rowCount(const QModelIndex &parent) const
0031 {
0032     Q_UNUSED(parent)
0033     if (!m_tree) {
0034         return 0;
0035     }
0036     return m_tree->files.size();
0037 }
0038 
0039 QVariant FileModel::data(const QModelIndex &index, int intRole) const
0040 {
0041     if (!index.isValid() || !m_tree) {
0042         return {};
0043     }
0044     const auto row = index.row();
0045     const auto &file = m_tree->files.at(row);
0046     switch (intRole) {
0047     case Qt::DisplayRole:
0048         return file->displayName();
0049     }
0050 
0051     switch (static_cast<Role>(intRole)) {
0052     case Role::HumanReadableSize:
0053         return file->humanReadableSize();
0054     case Role::IsFolder:
0055         return file->isFolder();
0056     case Role::URL:
0057         return file->url();
0058     case Role::Segment:
0059         return file->segment();
0060     }
0061 
0062     return {};
0063 }
0064 
0065 QHash<int, QByteArray> FileModel::roleNames() const
0066 {
0067     static QHash<int, QByteArray> roles;
0068     if (!roles.isEmpty()) {
0069         return roles;
0070     }
0071 
0072     roles = QAbstractListModel::roleNames();
0073     const QMetaEnum roleEnum = QMetaEnum::fromType<Role>();
0074     for (int i = 0; i < roleEnum.keyCount(); ++i) {
0075         const int value = roleEnum.value(i);
0076         Q_ASSERT(value != -1);
0077         roles[static_cast<int>(value)] = QByteArray("ROLE_") + roleEnum.valueToKey(value);
0078     }
0079     return roles;
0080 }
0081 
0082 std::shared_ptr<File> FileModel::file(int row) const
0083 {
0084     return m_tree->files.at(row);
0085 }
0086 
0087 } // namespace Filelight