File indexing completed on 2024-05-12 17:21:55
0001 /* 0002 SPDX-FileCopyrightText: 2005 Csaba Karai <krusader@users.sourceforge.net> 0003 SPDX-FileCopyrightText: 2005-2022 Krusader Krew <https://krusader.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "diskusageviewer.h" 0009 0010 // QtWidgets 0011 #include <QGridLayout> 0012 #include <QLabel> 0013 0014 #include <KConfigCore/KSharedConfig> 0015 #include <utility> 0016 0017 #include "../FileSystem/filesystem.h" 0018 #include "../Panel/krpanel.h" 0019 #include "../Panel/panelfunc.h" 0020 #include "../krglobal.h" 0021 0022 DiskUsageViewer::DiskUsageViewer(QWidget *parent) 0023 : QWidget(parent) 0024 , diskUsage(nullptr) 0025 , statusLabel(nullptr) 0026 { 0027 layout = new QGridLayout(this); 0028 layout->setContentsMargins(0, 0, 0, 0); 0029 } 0030 0031 DiskUsageViewer::~DiskUsageViewer() 0032 { 0033 if (diskUsage) { 0034 KConfigGroup group(krConfig, "DiskUsageViewer"); 0035 group.writeEntry("View", diskUsage->getActiveView()); 0036 delete diskUsage; 0037 } 0038 } 0039 0040 void DiskUsageViewer::openUrl(QUrl url) 0041 { 0042 if (diskUsage == nullptr) { 0043 diskUsage = new DiskUsage("DiskUsageViewer", this); 0044 0045 connect(diskUsage, &DiskUsage::enteringDirectory, this, [=]() { 0046 slotUpdateStatus(); 0047 }); 0048 connect(diskUsage, &DiskUsage::status, this, &DiskUsageViewer::slotUpdateStatus); 0049 connect(diskUsage, &DiskUsage::newSearch, this, &DiskUsageViewer::slotNewSearch); 0050 layout->addWidget(diskUsage, 0, 0); 0051 this->show(); 0052 diskUsage->show(); 0053 0054 KConfigGroup group(krConfig, "DiskUsageViewer"); 0055 int view = group.readEntry("View", VIEW_FILELIGHT); 0056 if (view < VIEW_LINES || view > VIEW_FILELIGHT) 0057 view = VIEW_FILELIGHT; 0058 diskUsage->setView(view); 0059 } 0060 0061 url.setPath(url.adjusted(QUrl::StripTrailingSlash).path()); 0062 0063 QUrl baseURL = diskUsage->getBaseURL(); 0064 if (!diskUsage->isLoading() && !baseURL.isEmpty()) { 0065 if (url.scheme() == baseURL.scheme() && (url.host().isEmpty() || url.host() == baseURL.host())) { 0066 QString baseStr = FileSystem::ensureTrailingSlash(baseURL).path(); 0067 QString urlStr = FileSystem::ensureTrailingSlash(url).path(); 0068 0069 if (urlStr.startsWith(baseStr)) { 0070 QString relURL = urlStr.mid(baseStr.length()); 0071 if (relURL.endsWith('/')) 0072 relURL.truncate(relURL.length() - 1); 0073 0074 Directory *dir = diskUsage->getDirectory(relURL); 0075 if (dir) { 0076 diskUsage->changeDirectory(dir); 0077 return; 0078 } 0079 } 0080 } 0081 } 0082 diskUsage->load(url); 0083 } 0084 0085 void DiskUsageViewer::closeUrl() 0086 { 0087 if (diskUsage) 0088 diskUsage->close(); 0089 } 0090 0091 void DiskUsageViewer::setStatusLabel(QLabel *statLabel, QString pref) 0092 { 0093 statusLabel = statLabel; 0094 prefix = std::move(pref); 0095 } 0096 0097 void DiskUsageViewer::slotUpdateStatus(QString status) 0098 { 0099 if (statusLabel) { 0100 if (status.isEmpty()) { 0101 Directory *dir = diskUsage->getCurrentDir(); 0102 if (dir) 0103 status = prefix + dir->name() + " [" + KIO::convertSize(dir->size()) + ']'; 0104 } 0105 statusLabel->setText(status); 0106 } 0107 } 0108 0109 void DiskUsageViewer::slotNewSearch() 0110 { 0111 diskUsage->load(ACTIVE_PANEL->virtualPath()); 0112 }