File indexing completed on 2024-04-28 17:06:19
0001 /* 0002 SPDX-FileCopyrightText: 2004 Shie Erlich <krusader@users.sourceforge.net> 0003 SPDX-FileCopyrightText: 2004 Rafi Yanai <krusader@users.sourceforge.net> 0004 SPDX-FileCopyrightText: 2004-2022 Krusader Krew <https://krusader.org> 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #include "krcalcspacedialog.h" 0010 0011 // QtCore 0012 #include <QTimer> 0013 // QtWidgets 0014 #include <QApplication> 0015 #include <QLabel> 0016 #include <QPushButton> 0017 #include <QVBoxLayout> 0018 // QtGui 0019 #include <QKeyEvent> 0020 0021 #include <KI18n/KLocalizedString> 0022 0023 #include "../FileSystem/sizecalculator.h" 0024 #include "../krglobal.h" 0025 0026 KrCalcSpaceDialog::KrCalcSpaceDialog(QWidget *parent, SizeCalculator *calculator) 0027 : QDialog(parent) 0028 , m_calculator(calculator) 0029 { 0030 setWindowTitle(i18n("Calculate Occupied Space")); 0031 0032 auto *layout = new QVBoxLayout; 0033 setLayout(layout); 0034 layout->setSizeConstraint(QLayout::SetFixedSize); 0035 0036 m_label = new QLabel(this); 0037 layout->addWidget(m_label); 0038 layout->addStretch(10); 0039 0040 // buttons: Cancel is replaced with Ok when calculator is finished 0041 m_buttonBox = new QDialogButtonBox(QDialogButtonBox::Cancel); 0042 layout->addWidget(m_buttonBox); 0043 connect(m_buttonBox, &QDialogButtonBox::rejected, this, &KrCalcSpaceDialog::slotCancel); 0044 connect(m_buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); 0045 0046 connect(m_calculator, &SizeCalculator::finished, this, &KrCalcSpaceDialog::slotCalculatorFinished); 0047 0048 m_updateTimer = new QTimer(this); 0049 connect(m_updateTimer, &QTimer::timeout, this, &KrCalcSpaceDialog::updateResult); 0050 m_updateTimer->start(1000); 0051 0052 updateResult(); 0053 } 0054 0055 void KrCalcSpaceDialog::closeEvent(QCloseEvent *event) 0056 { 0057 if (event) { 0058 if (m_updateTimer->isActive()) 0059 slotCancel(); 0060 else 0061 accept(); 0062 } 0063 } 0064 0065 void KrCalcSpaceDialog::keyPressEvent(QKeyEvent *e) 0066 { 0067 if (e->key() == Qt::Key_Escape) { 0068 if (m_updateTimer->isActive()) 0069 slotCancel(); 0070 else 0071 reject(); 0072 } 0073 } 0074 0075 void KrCalcSpaceDialog::showDialog(QWidget *parent, SizeCalculator *calculator) 0076 { 0077 auto *dialog = new KrCalcSpaceDialog(parent, calculator); 0078 dialog->show(); 0079 } 0080 0081 void KrCalcSpaceDialog::slotCancel() 0082 { 0083 m_updateTimer->stop(); 0084 m_calculator->cancel(); 0085 0086 reject(); // close and delete this dialog 0087 } 0088 0089 void KrCalcSpaceDialog::slotCalculatorFinished() 0090 { 0091 m_buttonBox->clear(); 0092 QPushButton *okButton = m_buttonBox->addButton(QDialogButtonBox::Ok); 0093 okButton->setDefault(true); 0094 okButton->setFocus(); 0095 0096 m_updateTimer->stop(); 0097 updateResult(); 0098 } 0099 0100 void KrCalcSpaceDialog::updateResult() 0101 { 0102 const KIO::filesize_t totalSize = m_calculator->totalSize(); 0103 const unsigned long totalFiles = m_calculator->totalFiles(); 0104 const unsigned long totalDirs = m_calculator->totalDirs(); 0105 0106 const QList<QUrl> urls = m_calculator->urls(); 0107 const QString fileName = urls.count() == 1 ? i18n("Name: %1\n", urls.first().fileName()) : QString(""); 0108 0109 QString msg = fileName + i18n("Total occupied space: %1", KIO::convertSize(totalSize)); 0110 if (totalSize >= 1024) 0111 msg += i18np(" (%2 byte)", " (%2 bytes)", totalSize, QLocale().toString(totalSize)); 0112 msg += '\n'; 0113 msg += i18np("in %1 folder", "in %1 folders", totalDirs); 0114 msg += ' '; 0115 msg += i18np("and %1 file", "and %1 files", totalFiles); 0116 m_label->setText(msg); 0117 }