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