File indexing completed on 2024-04-28 05:46:32

0001 /*
0002     SPDX-FileCopyrightText: 2010 Volker Lanz <vl@fidra.de>
0003     SPDX-FileCopyrightText: 2014-2020 Andrius Štikonas <andrius@stikonas.eu>
0004 
0005     SPDX-License-Identifier: GPL-3.0-or-later
0006 */
0007 
0008 #include "gui/filesystemsupportdialog.h"
0009 #include "gui/filesystemsupportdialogwidget.h"
0010 
0011 #include <fs/filesystem.h>
0012 #include <fs/filesystemfactory.h>
0013 
0014 #include <QDialogButtonBox>
0015 #include <QDialog>
0016 
0017 #include <KConfigGroup>
0018 #include <KLocalizedString>
0019 #include <KSharedConfig>
0020 
0021 /** Creates a new FileSystemSupportDialog
0022     @param parent the parent object
0023 */
0024 FileSystemSupportDialog::FileSystemSupportDialog(QWidget* parent) :
0025     QDialog(parent),
0026     m_FileSystemSupportDialogWidget(new FileSystemSupportDialogWidget(this))
0027 {
0028     QVBoxLayout *mainLayout = new QVBoxLayout(this);
0029     setLayout(mainLayout);
0030     mainLayout->addWidget(&dialogWidget());
0031     setWindowTitle(xi18nc("@title:window", "File System Support"));
0032     dialogButtonBox = new QDialogButtonBox(this);
0033     dialogButtonBox -> setStandardButtons(QDialogButtonBox::Ok);
0034     mainLayout->addWidget(dialogButtonBox);
0035 
0036     setupDialog();
0037     setupConnections();
0038 
0039     KConfigGroup kcg(KSharedConfig::openConfig(), QStringLiteral("fileSystemSupportDialog"));
0040     restoreGeometry(kcg.readEntry<QByteArray>("Geometry", QByteArray()));
0041 }
0042 
0043 /** Destroys a FileSystemSupportDialog */
0044 FileSystemSupportDialog::~FileSystemSupportDialog()
0045 {
0046     KConfigGroup kcg(KSharedConfig::openConfig(), QStringLiteral("fileSystemSupportDialog"));
0047     kcg.writeEntry("Geometry", saveGeometry());
0048 }
0049 
0050 QSize FileSystemSupportDialog::sizeHint() const
0051 {
0052     return QSize(690, 490);
0053 }
0054 
0055 void FileSystemSupportDialog::setupDialog()
0056 {
0057     QIcon yes = QIcon::fromTheme(QStringLiteral("data-success"));
0058     QIcon no = QIcon::fromTheme(QStringLiteral("data-error"));
0059 
0060     dialogWidget().tree().clear();
0061 
0062     for (const auto &fs : FileSystemFactory::map()) {
0063         if (fs->type() == FileSystem::Type::Unknown || fs->type() == FileSystem::Type::Extended ||
0064             fs->type() == FileSystem::Type::Luks || fs->type() == FileSystem::Type::Luks2) {
0065             continue;
0066         }
0067 
0068         QTreeWidgetItem* item = new QTreeWidgetItem();
0069 
0070         int i = 0;
0071         item->setText(i++, fs->name());
0072         item->setIcon(i++, fs->supportCreate() ? yes : no);
0073         item->setIcon(i++, fs->supportGrow() ? yes : no);
0074         item->setIcon(i++, fs->supportShrink() ? yes : no);
0075         item->setIcon(i++, fs->supportMove() ? yes : no);
0076         item->setIcon(i++, fs->supportCopy() ? yes : no);
0077         item->setIcon(i++, fs->supportCheck() ? yes : no);
0078         item->setIcon(i++, fs->supportGetLabel() ? yes : no);
0079         item->setIcon(i++, fs->supportSetLabel() ? yes : no);
0080         item->setIcon(i++, fs->supportGetUsed() ? yes : no);
0081         item->setIcon(i++, fs->supportBackup() ? yes : no);
0082 
0083         // there is no FileSystem::supportRestore(), because we currently can't tell
0084         // if a file is an image of a supported or unsupported (or even invalid) filesystem
0085         item->setIcon(i++, yes);
0086 
0087         item->setText(i++, fs->supportToolName().name.isEmpty() ? QStringLiteral("---") : fs->supportToolName().name);
0088 
0089         dialogWidget().tree().addTopLevelItem(item);
0090     }
0091 
0092     for (int i = 0; i < dialogWidget().tree().columnCount(); i++)
0093         dialogWidget().tree().resizeColumnToContents(i);
0094 
0095     dialogWidget().tree().sortItems(0, Qt::AscendingOrder);
0096 }
0097 
0098 void FileSystemSupportDialog::setupConnections()
0099 {
0100     connect(dialogButtonBox->button(QDialogButtonBox::Ok), &QPushButton::clicked, this, &FileSystemSupportDialog::close);
0101     connect(&dialogWidget().buttonRescan(), &QPushButton::clicked, this, &FileSystemSupportDialog::onButtonRescanClicked);
0102 }
0103 
0104 void FileSystemSupportDialog::onButtonRescanClicked()
0105 {
0106     FileSystemFactory::init();
0107     setupDialog();
0108 }