File indexing completed on 2024-04-28 05:49:05
0001 /* 0002 SPDX-FileCopyrightText: 2021 Waqar Ahmed <waqar.17a@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 #pragma once 0007 0008 #include <QAbstractItemModel> 0009 0010 #include "git/gitstatus.h" 0011 0012 class GitStatusModel : public QAbstractItemModel 0013 { 0014 public: 0015 explicit GitStatusModel(QObject *parent); 0016 0017 enum ItemType { 0018 NodeStage = 0, 0019 NodeChanges, 0020 NodeConflict, 0021 NodeUntrack, 0022 NodeFile, 0023 }; 0024 Q_ENUM(ItemType) 0025 0026 enum Role { TreeItemType = Qt::UserRole + 1, FileNameRole, GitItemType }; 0027 0028 public: 0029 QModelIndex index(int row, int column, const QModelIndex &parent) const override; 0030 QModelIndex parent(const QModelIndex &child) const override; 0031 int rowCount(const QModelIndex &parent) const override; 0032 int columnCount(const QModelIndex &parent) const override; 0033 QVariant data(const QModelIndex &index, int role) const override; 0034 0035 void setStatusItems(GitUtils::GitParsedStatus status); 0036 0037 const QList<GitUtils::StatusItem> &untrackedFiles() const 0038 { 0039 return m_nodes[3]; 0040 } 0041 0042 const QList<GitUtils::StatusItem> &stagedFiles() const 0043 { 0044 return m_nodes[0]; 0045 } 0046 0047 const QList<GitUtils::StatusItem> &changedFiles() const 0048 { 0049 return m_nodes[1]; 0050 } 0051 0052 QModelIndex getModelIndex(ItemType type) const 0053 { 0054 return createIndex(type, 0, 0xFFFFFFFF); 0055 } 0056 0057 QModelIndex indexForFilename(const QString &file); 0058 0059 private: 0060 QList<GitUtils::StatusItem> m_nodes[4]; 0061 QSet<QString> m_nonUniqueFileNames; 0062 };