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__