File indexing completed on 2024-05-05 17:56:53
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 DISKUSAGE_H 0009 #define DISKUSAGE_H 0010 0011 // QtCore 0012 #include <QEvent> 0013 #include <QHash> 0014 #include <QStack> 0015 #include <QTimer> 0016 #include <QUrl> 0017 // QtGui 0018 #include <QKeyEvent> 0019 #include <QPixmap> 0020 #include <QResizeEvent> 0021 // QtWidgets 0022 #include <QDialog> 0023 #include <QLabel> 0024 #include <QScrollArea> 0025 #include <QStackedWidget> 0026 0027 #include <KWidgetsAddons/KSqueezedTextLabel> 0028 0029 #include "filelightParts/fileTree.h" 0030 0031 #define VIEW_LINES 0 0032 #define VIEW_DETAILED 1 0033 #define VIEW_FILELIGHT 2 0034 #define VIEW_LOADER 3 0035 0036 typedef QHash<QString, void *> Properties; 0037 0038 class DUListView; 0039 class DULines; 0040 class DUFilelight; 0041 class QMenu; 0042 class LoaderWidget; 0043 class FileItem; 0044 class FileSystem; 0045 0046 class DiskUsage : public QStackedWidget 0047 { 0048 Q_OBJECT 0049 0050 public: 0051 explicit DiskUsage(QString confGroup, QWidget *parent = nullptr); 0052 ~DiskUsage(); 0053 0054 void load(const QUrl &dirName); 0055 void close(); 0056 void stopLoad(); 0057 bool isLoading() 0058 { 0059 return loading; 0060 } 0061 0062 void setView(int view); 0063 int getActiveView() 0064 { 0065 return activeView; 0066 } 0067 0068 Directory *getDirectory(QString path); 0069 File *getFile(const QString &path); 0070 0071 QString getConfigGroup() 0072 { 0073 return configGroup; 0074 } 0075 0076 void *getProperty(File *, const QString &); 0077 void addProperty(File *, const QString &, void *); 0078 void removeProperty(File *, const QString &); 0079 0080 int exclude(File *file, bool calcPercents = true, int depth = 0); 0081 void includeAll(); 0082 0083 int del(File *file, bool calcPercents = true, int depth = 0); 0084 0085 QString getToolTip(File *); 0086 0087 void rightClickMenu(const QPoint &, File *, QMenu * = nullptr, const QString & = QString()); 0088 0089 void changeDirectory(Directory *dir); 0090 0091 Directory *getCurrentDir(); 0092 File *getCurrentFile(); 0093 0094 QPixmap getIcon(const QString &mime); 0095 0096 QUrl getBaseURL() 0097 { 0098 return baseURL; 0099 } 0100 0101 public slots: 0102 void dirUp(); 0103 void clear(); 0104 0105 signals: 0106 void enteringDirectory(Directory *); 0107 void clearing(); 0108 void changed(File *); 0109 void changeFinished(); 0110 void deleted(File *); 0111 void deleteFinished(); 0112 void status(QString); 0113 void viewChanged(int); 0114 void loadFinished(bool); 0115 void newSearch(); 0116 0117 protected slots: 0118 void slotLoadDirectory(); 0119 0120 protected: 0121 QHash<QString, Directory *> contentMap; 0122 QHash<File *, Properties *> propertyMap; 0123 0124 Directory *currentDirectory; 0125 KIO::filesize_t currentSize; 0126 0127 virtual void keyPressEvent(QKeyEvent *) override; 0128 virtual bool event(QEvent *) override; 0129 0130 int calculateSizes(Directory *dir = nullptr, bool emitSig = false, int depth = 0); 0131 int calculatePercents(bool emitSig = false, Directory *dir = nullptr, int depth = 0); 0132 int include(Directory *dir, int depth = 0); 0133 void createStatus(); 0134 void executeAction(int, File * = nullptr); 0135 0136 QUrl baseURL; //< the base URL of loading 0137 0138 DUListView *listView; 0139 DULines *lineView; 0140 DUFilelight *filelightView; 0141 LoaderWidget *loaderView; 0142 0143 Directory *root; 0144 0145 int activeView; 0146 0147 QString configGroup; 0148 0149 bool first; 0150 bool loading; 0151 bool abortLoading; 0152 bool clearAfterAbort; 0153 bool deleting; 0154 0155 QStack<QString> directoryStack; 0156 QStack<Directory *> parentStack; 0157 0158 FileSystem *searchFileSystem; 0159 FileItem *currentFileItem; 0160 QList<FileItem *> fileItems; 0161 Directory *currentParent; 0162 QString dirToCheck; 0163 0164 int fileNum; 0165 int dirNum; 0166 int viewBeforeLoad; 0167 0168 QTimer loadingTimer; 0169 }; 0170 0171 class LoaderWidget : public QScrollArea 0172 { 0173 Q_OBJECT 0174 0175 public: 0176 explicit LoaderWidget(QWidget *parent = nullptr); 0177 0178 void init(); 0179 void setCurrentURL(const QUrl &url); 0180 void setValues(int fileNum, int dirNum, KIO::filesize_t total); 0181 bool wasCancelled() 0182 { 0183 return cancelled; 0184 } 0185 0186 public slots: 0187 void slotCancelled(); 0188 0189 protected: 0190 QLabel *totalSize; 0191 QLabel *files; 0192 QLabel *directories; 0193 0194 KSqueezedTextLabel *searchedDirectory; 0195 QWidget *widget; 0196 0197 bool cancelled; 0198 }; 0199 0200 #endif /* __DISK_USAGE_GUI_H__ */