File indexing completed on 2024-05-05 17:56:54
0001 /* 0002 SPDX-FileCopyrightText: 2004 Csaba Karai <krusader@users.sourceforge.net> 0003 SPDX-FileCopyrightText: 2004-2022 Krusader Krew <https://krusader.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #ifndef DULISTVIEW_H 0009 #define DULISTVIEW_H 0010 0011 // QtGui 0012 #include <QKeyEvent> 0013 #include <QMouseEvent> 0014 0015 #include "../GUI/krtreewidget.h" 0016 #include "diskusage.h" 0017 0018 class DUListViewItem : public QTreeWidgetItem 0019 { 0020 public: 0021 DUListViewItem(DiskUsage *diskUsageIn, 0022 File *fileIn, 0023 QTreeWidget *parent, 0024 const QString &label1, 0025 const QString &label2, 0026 const QString &label3, 0027 const QString &label4, 0028 const QString &label5, 0029 const QString &label6, 0030 const QString &label7, 0031 const QString &label8, 0032 const QString &label9) 0033 : QTreeWidgetItem(parent) 0034 , diskUsage(diskUsageIn) 0035 , file(fileIn) 0036 { 0037 setText(0, label1); 0038 setText(1, label2); 0039 setText(2, label3); 0040 setText(3, label4); 0041 setText(4, label5); 0042 setText(5, label6); 0043 setText(6, label7); 0044 setText(7, label8); 0045 setText(8, label9); 0046 0047 setTextAlignment(1, Qt::AlignRight); 0048 setTextAlignment(2, Qt::AlignRight); 0049 setTextAlignment(3, Qt::AlignRight); 0050 0051 setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicatorWhenChildless); 0052 diskUsage->addProperty(file, "ListView-Ref", this); 0053 } 0054 DUListViewItem(DiskUsage *diskUsageIn, 0055 File *fileIn, 0056 QTreeWidgetItem *parent, 0057 const QString &label1, 0058 const QString &label2, 0059 const QString &label3, 0060 const QString &label4, 0061 const QString &label5, 0062 const QString &label6, 0063 const QString &label7, 0064 const QString &label8, 0065 const QString &label9) 0066 : QTreeWidgetItem(parent) 0067 , diskUsage(diskUsageIn) 0068 , file(fileIn) 0069 { 0070 setText(0, label1); 0071 setText(1, label2); 0072 setText(2, label3); 0073 setText(3, label4); 0074 setText(4, label5); 0075 setText(5, label6); 0076 setText(6, label7); 0077 setText(7, label8); 0078 setText(8, label9); 0079 0080 setTextAlignment(1, Qt::AlignRight); 0081 setTextAlignment(2, Qt::AlignRight); 0082 setTextAlignment(3, Qt::AlignRight); 0083 0084 setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicatorWhenChildless); 0085 diskUsage->addProperty(file, "ListView-Ref", this); 0086 } 0087 DUListViewItem(DiskUsage *diskUsageIn, 0088 File *fileIn, 0089 QTreeWidget *parent, 0090 QTreeWidgetItem *after, 0091 const QString &label1, 0092 const QString &label2, 0093 const QString &label3, 0094 const QString &label4, 0095 const QString &label5, 0096 const QString &label6, 0097 const QString &label7, 0098 const QString &label8, 0099 const QString &label9) 0100 : QTreeWidgetItem(parent, after) 0101 , diskUsage(diskUsageIn) 0102 , file(fileIn) 0103 { 0104 setText(0, label1); 0105 setText(1, label2); 0106 setText(2, label3); 0107 setText(3, label4); 0108 setText(4, label5); 0109 setText(5, label6); 0110 setText(6, label7); 0111 setText(7, label8); 0112 setText(8, label9); 0113 0114 setTextAlignment(1, Qt::AlignRight); 0115 setTextAlignment(2, Qt::AlignRight); 0116 setTextAlignment(3, Qt::AlignRight); 0117 0118 setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicatorWhenChildless); 0119 diskUsage->addProperty(file, "ListView-Ref", this); 0120 } 0121 DUListViewItem(DiskUsage *diskUsageIn, 0122 File *fileIn, 0123 QTreeWidgetItem *parent, 0124 QTreeWidgetItem *after, 0125 const QString &label1, 0126 const QString &label2, 0127 const QString &label3, 0128 const QString &label4, 0129 const QString &label5, 0130 const QString &label6, 0131 const QString &label7, 0132 const QString &label8, 0133 const QString &label9) 0134 : QTreeWidgetItem(parent, after) 0135 , diskUsage(diskUsageIn) 0136 , file(fileIn) 0137 { 0138 setText(0, label1); 0139 setText(1, label2); 0140 setText(2, label3); 0141 setText(3, label4); 0142 setText(4, label5); 0143 setText(5, label6); 0144 setText(6, label7); 0145 setText(7, label8); 0146 setText(8, label9); 0147 0148 setTextAlignment(1, Qt::AlignRight); 0149 setTextAlignment(2, Qt::AlignRight); 0150 setTextAlignment(3, Qt::AlignRight); 0151 0152 setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicatorWhenChildless); 0153 diskUsage->addProperty(file, "ListView-Ref", this); 0154 } 0155 ~DUListViewItem() override 0156 { 0157 diskUsage->removeProperty(file, "ListView-Ref"); 0158 } 0159 0160 bool operator<(const QTreeWidgetItem &other) const override 0161 { 0162 int column = treeWidget() ? treeWidget()->sortColumn() : 0; 0163 0164 if (text(0) == "..") 0165 return true; 0166 0167 const auto *compWith = dynamic_cast<const DUListViewItem *>(&other); 0168 if (compWith == nullptr) 0169 return false; 0170 0171 switch (column) { 0172 case 1: 0173 case 2: 0174 return file->size() > compWith->file->size(); 0175 case 3: 0176 return file->ownSize() > compWith->file->ownSize(); 0177 case 5: 0178 return file->time() < compWith->file->time(); 0179 default: 0180 return text(column) < other.text(column); 0181 } 0182 } 0183 0184 inline File *getFile() 0185 { 0186 return file; 0187 } 0188 0189 private: 0190 DiskUsage *diskUsage; 0191 File *file; 0192 }; 0193 0194 class DUListView : public KrTreeWidget 0195 { 0196 Q_OBJECT 0197 0198 public: 0199 explicit DUListView(DiskUsage *usage); 0200 ~DUListView() override; 0201 0202 File *getCurrentFile(); 0203 0204 public slots: 0205 void slotDirChanged(Directory *); 0206 void slotChanged(File *); 0207 void slotDeleted(File *); 0208 void slotRightClicked(QTreeWidgetItem *, const QPoint &); 0209 void slotExpanded(QTreeWidgetItem *); 0210 0211 protected: 0212 DiskUsage *diskUsage; 0213 0214 void mouseDoubleClickEvent(QMouseEvent *e) override; 0215 void keyPressEvent(QKeyEvent *e) override; 0216 0217 private: 0218 void addDirectory(Directory *dirEntry, QTreeWidgetItem *parent); 0219 bool doubleClicked(QTreeWidgetItem *item); 0220 }; 0221 0222 #endif /* __DU_LISTVIEW_H__ */