File indexing completed on 2024-05-12 17:22:04
0001 /* 0002 SPDX-FileCopyrightText: 2002 Shie Erlich <erlich@users.sourceforge.net> 0003 SPDX-FileCopyrightText: 2002 Rafi Yanai <yanai@users.sourceforge.net> 0004 SPDX-FileCopyrightText: 2004-2022 Krusader Krew <https://krusader.org> 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #ifndef LISTMODEL_H 0010 #define LISTMODEL_H 0011 0012 // QtCore 0013 #include <QAbstractListModel> 0014 // QtGui 0015 #include <QFont> 0016 0017 #include "krsort.h" 0018 0019 class FileItem; 0020 class KrInterView; 0021 class KrViewProperties; 0022 0023 /** 0024 * @brief The list model for all panel views. 0025 */ 0026 class ListModel : public QAbstractListModel 0027 { 0028 Q_OBJECT 0029 0030 public: 0031 explicit ListModel(KrInterView *); 0032 ~ListModel() override; 0033 0034 inline bool ready() const 0035 { 0036 return _ready; 0037 } 0038 void populate(const QList<FileItem *> &files, FileItem *dummy); 0039 QModelIndex addItem(FileItem *); 0040 void removeItem(FileItem *); 0041 0042 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0043 int columnCount(const QModelIndex &parent = QModelIndex()) const override; 0044 QVariant data(const QModelIndex &index, int role) const override; 0045 bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; 0046 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; 0047 void setExtensionEnabled(bool exten) 0048 { 0049 _extensionEnabled = exten; 0050 } 0051 const KrViewProperties *properties() const; 0052 void sort() 0053 { 0054 sort(lastSortOrder(), lastSortDir()); 0055 } 0056 void clear(bool emitLayoutChanged = true); 0057 QList<FileItem *> fileItems() 0058 { 0059 return _fileItems; 0060 } 0061 FileItem *fileItemAt(const QModelIndex &index); 0062 FileItem *dummyFileItem() const 0063 { 0064 return _dummyFileItem; 0065 } 0066 const QModelIndex &fileItemIndex(const FileItem *); 0067 const QModelIndex &nameIndex(const QString &); 0068 const QModelIndex &indexFromUrl(const QUrl &url); 0069 Qt::ItemFlags flags(const QModelIndex &index) const override; 0070 void emitChanged() 0071 { 0072 emit layoutChanged(); 0073 } 0074 Qt::SortOrder lastSortDir() const; 0075 int lastSortOrder() const; 0076 void setAlternatingTable(bool altTable) 0077 { 0078 _alternatingTable = altTable; 0079 } 0080 0081 public slots: 0082 void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override; 0083 0084 protected: 0085 KrSort::LessThanFunc lessThanFunc() 0086 { 0087 return KrSort::itemLessThan; 0088 } 0089 KrSort::LessThanFunc greaterThanFunc() const 0090 { 0091 return KrSort::itemGreaterThan; 0092 } 0093 QVariant customSortData(FileItem *) const 0094 { 0095 return QVariant(); 0096 } 0097 KrSort::Sorter createSorter(); 0098 QString nameWithoutExtension(const FileItem *fileitem, bool checkEnabled = true) const; 0099 0100 private: 0101 void updateIndices(FileItem *file, int index); 0102 QString toolTipText(FileItem *fileItem) const; 0103 static QString dateText(time_t time); 0104 0105 QList<FileItem *> _fileItems; 0106 QHash<FileItem *, QModelIndex> _fileItemNdx; 0107 QHash<QString, QModelIndex> _nameNdx; 0108 QHash<QUrl, QModelIndex> _urlNdx; 0109 bool _extensionEnabled; 0110 KrInterView *_view; 0111 FileItem *_dummyFileItem; 0112 bool _ready; 0113 QFont _defaultFont; 0114 bool _justForSizeHint; 0115 bool _alternatingTable; 0116 }; 0117 0118 #endif // __listmodel__