File indexing completed on 2024-05-12 17:22:01
0001 /* 0002 SPDX-FileCopyrightText: 2002 Shie Erlich <erlich@users.sourceforge.net> 0003 SPDX-FileCopyrightText: 2002 Rafi Yanai <yanai@users.sourceforge.net> 0004 SPDX-FileCopyrightText: 2010 Jan Lepper <dehtris@yahoo.de> 0005 SPDX-FileCopyrightText: 2004-2022 Krusader Krew <https://krusader.org> 0006 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 0010 #ifndef KRINTERVIEW_H 0011 #define KRINTERVIEW_H 0012 0013 // QtCore 0014 #include <QSet> 0015 // QtWidgets 0016 #include <QAbstractItemView> 0017 0018 #include "krview.h" 0019 0020 class ListModel; 0021 class KrMouseHandler; 0022 class KrViewItem; 0023 0024 /** 0025 * @brief Abstract intermediate class between KrView and full view implementations. 0026 * 0027 * It contains the methods common to all implementing subclasses of KrView. 0028 */ 0029 class KrInterView : public KrView 0030 { 0031 friend class KrViewItem; 0032 0033 public: 0034 KrInterView(KrViewInstance &instance, KConfig *cfg, QAbstractItemView *itemView); 0035 virtual ~KrInterView(); 0036 QModelIndex getCurrentIndex() override 0037 { 0038 return _itemView->currentIndex(); 0039 } 0040 bool isSelected(const QModelIndex &ndx) override; 0041 uint numSelected() const override 0042 { 0043 return _selection.count(); 0044 } 0045 QList<QUrl> selectedUrls() override; 0046 void setSelectionUrls(const QList<QUrl> urls) override; 0047 KrViewItem *getFirst() override; 0048 KrViewItem *getLast() override; 0049 KrViewItem *getNext(KrViewItem *current) override; 0050 KrViewItem *getPrev(KrViewItem *current) override; 0051 KrViewItem *getCurrentKrViewItem() override; 0052 KrViewItem *findItemByName(const QString &name) override; 0053 KrViewItem *findItemByUrl(const QUrl &url) override; 0054 QString getCurrentItem() const override; 0055 KrViewItem *getKrViewItemAt(const QPoint &vp) override; 0056 void setCurrentItem(const QString &name, bool scrollToCurrent = true, const QModelIndex &fallbackToIndex = QModelIndex()) override; 0057 void setCurrentKrViewItem(KrViewItem *item, bool scrollToCurrent = true) override; 0058 void makeItemVisible(const KrViewItem *item) override; 0059 bool isItemVisible(const KrViewItem *item) override; 0060 void clear() override; 0061 void sort() override; 0062 void refreshColors() override; 0063 void redraw() override; 0064 void prepareForActive() override; 0065 void prepareForPassive() override; 0066 void selectRegion(KrViewItem *i1, KrViewItem *i2, bool select) override; 0067 0068 void sortModeUpdated(int column, Qt::SortOrder order); 0069 0070 void redrawItem(FileItem *fileitem) 0071 { 0072 _itemView->viewport()->update(itemRect(fileitem)); 0073 } 0074 0075 protected: 0076 class DummySelectionModel : public QItemSelectionModel 0077 { 0078 public: 0079 DummySelectionModel(QAbstractItemModel *model, QObject *parent) 0080 : QItemSelectionModel(model, parent) 0081 { 0082 } 0083 // do nothing - selection is managed by KrInterView 0084 void select(const QModelIndex &, QItemSelectionModel::SelectionFlags) override 0085 { 0086 } 0087 void select(const QItemSelection &, QItemSelectionModel::SelectionFlags) override 0088 { 0089 } 0090 }; 0091 0092 KIO::filesize_t calcSize() override; 0093 KIO::filesize_t calcSelectedSize() override; 0094 void populate(const QList<FileItem *> &fileItems, FileItem *dummy) override; 0095 KrViewItem *preAddItem(FileItem *fileitem) override; 0096 /** 0097 * Remove an item. Does not handle new current selection. 0098 */ 0099 void preDeleteItem(KrViewItem *item) override; 0100 void intSetSelected(const FileItem *fileitem, bool select) override; 0101 0102 virtual QRect itemRect(const FileItem *fileitem) = 0; 0103 0104 KrViewItem *getKrViewItem(FileItem *fileitem); 0105 KrViewItem *getKrViewItem(const QModelIndex &); 0106 bool isSelected(const FileItem *fileitem) const 0107 { 0108 return _selection.contains(fileitem); 0109 } 0110 void makeCurrentVisible(); 0111 0112 ListModel *_model; 0113 QAbstractItemView *_itemView; 0114 KrMouseHandler *_mouseHandler; 0115 QHash<FileItem *, KrViewItem *> _itemHash; 0116 QSet<const FileItem *> _selection; 0117 0118 private: 0119 void setCurrent(const QModelIndex &index, bool scrollToCurrent); 0120 }; 0121 0122 #endif