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     SPDX-FileCopyrightText: 2015 Teo Mrnjavac <teo@kde.org>
0005     SPDX-FileCopyrightText: 2018 Abhijeet Sharma <sharma.abhijeet2096@gmail.com>
0006 
0007     SPDX-License-Identifier: GPL-3.0-or-later
0008 */
0009 
0010 #include "gui/editmountpointdialog.h"
0011 #include "gui/editmountpointdialogwidget.h"
0012 
0013 #include <core/partition.h>
0014 
0015 #include <KConfigGroup>
0016 #include <KGuiItem>
0017 #include <KLocalizedString>
0018 #include <KMessageBox>
0019 #include <KSharedConfig>
0020 #include <KStandardGuiItem>
0021 
0022 #include <QDialogButtonBox>
0023 
0024 EditMountPointDialog::EditMountPointDialog(QWidget* parent, Partition& p) :
0025     QDialog(parent),
0026     m_Partition(p),
0027     m_DialogWidget(new EditMountPointDialogWidget(this, partition()))
0028 {
0029     QVBoxLayout *mainLayout = new QVBoxLayout(this);
0030     setLayout(mainLayout);
0031     mainLayout->addWidget(&widget());
0032     setWindowTitle(xi18nc("@title:window", "Edit mount point for <filename>%1</filename>", p.deviceNode()));
0033 
0034     KConfigGroup kcg(KSharedConfig::openConfig(), QStringLiteral("editMountPointDialog"));
0035     restoreGeometry(kcg.readEntry<QByteArray>("Geometry", QByteArray()));
0036 
0037     QDialogButtonBox* dbb = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
0038                                                   Qt::Horizontal,
0039                                                   this );
0040     mainLayout->addWidget(dbb);
0041     connect(dbb, &QDialogButtonBox::accepted,
0042             this, [=] () {accept_(MountPointAction::Edit);} );
0043     connect(dbb, &QDialogButtonBox::rejected,
0044             this, &EditMountPointDialog::reject);
0045     connect(widget().m_ButtonRemove, &QPushButton::clicked, this, [=] () {accept_(MountPointAction::Remove);} );
0046     connect(m_DialogWidget, &EditMountPointDialogWidget::isValidChanged, this, [dbb](bool newValid) {
0047         dbb->button(QDialogButtonBox::Ok)->setEnabled(newValid);
0048     });
0049     dbb->button(QDialogButtonBox::Ok)->setEnabled(m_DialogWidget->isValid());
0050 }
0051 
0052 /** Destroys an EditMountOptionsDialog instance */
0053 EditMountPointDialog::~EditMountPointDialog()
0054 {
0055     KConfigGroup kcg(KSharedConfig::openConfig(), QStringLiteral("editMountPointDialog"));
0056     kcg.writeEntry("Geometry", saveGeometry());
0057 }
0058 
0059 void EditMountPointDialog::accept_(MountPointAction action)
0060 {
0061     const auto dialogResult = KMessageBox::warningContinueCancel(this,
0062                                            xi18nc("@info", "<para>Are you sure you want to save the changes you made to the system table file <filename>/etc/fstab</filename>?</para>"
0063                                                    "<para><warning>This will overwrite the existing file on your hard drive now. This <emphasis strong='1'>can not be undone</emphasis>.</warning></para>"),
0064                                            xi18nc("@title:window", "Really save changes?"),
0065                                            KGuiItem(xi18nc("@action:button", "Save changes"), QStringLiteral("arrow-right")),
0066                                            KStandardGuiItem::cancel(),
0067                                            QStringLiteral("reallyWriteMountPoints"));
0068     if (dialogResult == KMessageBox::Cancel)
0069         return;
0070     if(action == MountPointAction::Remove)
0071         widget().removeMountPoint();
0072     else if (action == MountPointAction::Edit)
0073         widget().acceptChanges();
0074     if (writeMountpoints(widget().fstabEntries())) {
0075         if (action == MountPointAction::Edit)
0076             partition().setMountPoint(widget().editPath().currentText());
0077     }
0078     else
0079         KMessageBox::error(this,
0080                    xi18nc("@info", "Could not save mount points to file <filename>/etc/fstab</filename>."),
0081                    xi18nc("@title:window", "Error While Saving Mount Points"));
0082 
0083     QDialog::accept();
0084 }