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__ */