1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
/*
SPDX-FileCopyrightText: 2005 Csaba Karai <krusader@users.sourceforge.net>
SPDX-FileCopyrightText: 2005-2022 Krusader Krew <https://krusader.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "diskusageviewer.h"
// QtWidgets
#include <QGridLayout>
#include <QLabel>
#include <KSharedConfig>
#include <utility>
#include "../FileSystem/filesystem.h"
#include "../Panel/krpanel.h"
#include "../Panel/panelfunc.h"
#include "../krglobal.h"
DiskUsageViewer::DiskUsageViewer(QWidget *parent)
: QWidget(parent)
, diskUsage(nullptr)
, statusLabel(nullptr)
{
layout = new QGridLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
}
DiskUsageViewer::~DiskUsageViewer()
{
if (diskUsage) {
KConfigGroup group(krConfig, "DiskUsageViewer");
group.writeEntry("View", diskUsage->getActiveView());
delete diskUsage;
}
}
void DiskUsageViewer::openUrl(QUrl url)
{
if (diskUsage == nullptr) {
diskUsage = new DiskUsage("DiskUsageViewer", this);
connect(diskUsage, &DiskUsage::enteringDirectory, this, [=]() {
slotUpdateStatus();
});
connect(diskUsage, &DiskUsage::status, this, &DiskUsageViewer::slotUpdateStatus);
connect(diskUsage, &DiskUsage::newSearch, this, &DiskUsageViewer::slotNewSearch);
layout->addWidget(diskUsage, 0, 0);
this->show();
diskUsage->show();
KConfigGroup group(krConfig, "DiskUsageViewer");
int view = group.readEntry("View", VIEW_FILELIGHT);
if (view < VIEW_LINES || view > VIEW_FILELIGHT)
view = VIEW_FILELIGHT;
diskUsage->setView(view);
}
url.setPath(url.adjusted(QUrl::StripTrailingSlash).path());
QUrl baseURL = diskUsage->getBaseURL();
if (!diskUsage->isLoading() && !baseURL.isEmpty()) {
if (url.scheme() == baseURL.scheme() && (url.host().isEmpty() || url.host() == baseURL.host())) {
QString baseStr = FileSystem::ensureTrailingSlash(baseURL).path();
QString urlStr = FileSystem::ensureTrailingSlash(url).path();
if (urlStr.startsWith(baseStr)) {
QString relURL = urlStr.mid(baseStr.length());
if (relURL.endsWith('/'))
relURL.truncate(relURL.length() - 1);
Directory *dir = diskUsage->getDirectory(relURL);
if (dir) {
diskUsage->changeDirectory(dir);
return;
}
}
}
}
diskUsage->load(url);
}
void DiskUsageViewer::closeUrl()
{
if (diskUsage)
diskUsage->close();
}
void DiskUsageViewer::setStatusLabel(QLabel *statLabel, QString pref)
{
statusLabel = statLabel;
prefix = std::move(pref);
}
void DiskUsageViewer::slotUpdateStatus(QString status)
{
if (statusLabel) {
if (status.isEmpty()) {
Directory *dir = diskUsage->getCurrentDir();
if (dir)
status = prefix + dir->name() + " [" + KIO::convertSize(dir->size()) + ']';
}
statusLabel->setText(status);
}
}
void DiskUsageViewer::slotNewSearch()
{
diskUsage->load(ACTIVE_PANEL->virtualPath());
}
|