File indexing completed on 2024-05-12 17:18:54

0001 /*
0002  * SPDX-FileCopyrightText: 2012 Peter Penz <peter.penz19@gmail.com>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "confirmationssettingspage.h"
0008 
0009 #include "dolphin_generalsettings.h"
0010 #include "global.h"
0011 
0012 #include <KLocalizedString>
0013 
0014 #include <QCheckBox>
0015 #include <QComboBox>
0016 #include <QHBoxLayout>
0017 #include <QLabel>
0018 #include <QVBoxLayout>
0019 
0020 namespace
0021 {
0022 enum ScriptExecution { AlwaysAsk = 0, Open = 1, Execute = 2 };
0023 
0024 const bool ConfirmEmptyTrash = true;
0025 const bool ConfirmTrash = false;
0026 const bool ConfirmDelete = true;
0027 const int ConfirmScriptExecution = ScriptExecution::AlwaysAsk;
0028 }
0029 
0030 ConfirmationsSettingsPage::ConfirmationsSettingsPage(QWidget *parent)
0031     : SettingsPageBase(parent)
0032     , m_confirmMoveToTrash(nullptr)
0033     , m_confirmEmptyTrash(nullptr)
0034     , m_confirmDelete(nullptr)
0035     ,
0036 
0037 #if HAVE_TERMINAL
0038     m_confirmClosingTerminalRunningProgram(nullptr)
0039     ,
0040 #endif
0041 
0042     m_confirmClosingMultipleTabs(nullptr)
0043 {
0044     QVBoxLayout *topLayout = new QVBoxLayout(this);
0045 
0046     QLabel *confirmLabelKde = new QLabel(i18nc("@title:group", "Ask for confirmation in all KDE applications when:"), this);
0047     confirmLabelKde->setWordWrap(true);
0048 
0049     m_confirmMoveToTrash = new QCheckBox(i18nc("@option:check Ask for confirmation when", "Moving files or folders to trash"), this);
0050     m_confirmEmptyTrash = new QCheckBox(i18nc("@option:check Ask for confirmation when", "Emptying trash"), this);
0051     m_confirmDelete = new QCheckBox(i18nc("@option:check Ask for confirmation when", "Deleting files or folders"), this);
0052 
0053     QLabel *confirmLabelDolphin = new QLabel(i18nc("@title:group", "Ask for confirmation in Dolphin when:"), this);
0054     confirmLabelDolphin->setWordWrap(true);
0055 
0056     m_confirmClosingMultipleTabs = new QCheckBox(i18nc("@option:check Ask for confirmation in Dolphin when", "Closing windows with multiple tabs"), this);
0057 
0058 #if HAVE_TERMINAL
0059     m_confirmClosingTerminalRunningProgram =
0060         new QCheckBox(i18nc("@option:check Ask for confirmation when", "Closing windows with a program running in the Terminal panel"), this);
0061 #endif
0062 
0063     m_confirmOpenManyFolders = new QCheckBox(i18nc("@option:check Ask for confirmation in Dolphin when", "Opening many folders at once"), this);
0064     m_confirmOpenManyTerminals = new QCheckBox(i18nc("@option:check Ask for confirmation in Dolphin when", "Opening many terminals at once"), this);
0065 
0066     QHBoxLayout *executableScriptLayout = new QHBoxLayout();
0067     QLabel *executableScriptLabel = new QLabel(i18nc("@title:group", "When opening an executable file:"), this);
0068     executableScriptLabel->setWordWrap(true);
0069     executableScriptLayout->addWidget(executableScriptLabel);
0070 
0071     m_confirmScriptExecution = new QComboBox(this);
0072     m_confirmScriptExecution->addItems({i18n("Always ask"), i18n("Open in application"), i18n("Run script")});
0073     executableScriptLayout->addWidget(m_confirmScriptExecution);
0074 
0075     topLayout->addWidget(confirmLabelKde);
0076     topLayout->addWidget(m_confirmMoveToTrash);
0077     topLayout->addWidget(m_confirmEmptyTrash);
0078     topLayout->addWidget(m_confirmDelete);
0079     topLayout->addSpacing(Dolphin::VERTICAL_SPACER_HEIGHT);
0080     topLayout->addWidget(confirmLabelDolphin);
0081     topLayout->addWidget(m_confirmClosingMultipleTabs);
0082 
0083 #if HAVE_TERMINAL
0084     topLayout->addWidget(m_confirmClosingTerminalRunningProgram);
0085 #endif
0086 
0087     topLayout->addWidget(m_confirmOpenManyFolders);
0088     topLayout->addWidget(m_confirmOpenManyTerminals);
0089 
0090     topLayout->addSpacing(Dolphin::VERTICAL_SPACER_HEIGHT);
0091     topLayout->addLayout(executableScriptLayout);
0092 
0093     topLayout->addStretch();
0094 
0095     loadSettings();
0096 
0097     connect(m_confirmMoveToTrash, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
0098     connect(m_confirmEmptyTrash, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
0099     connect(m_confirmDelete, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
0100     connect(m_confirmScriptExecution, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ConfirmationsSettingsPage::changed);
0101     connect(m_confirmClosingMultipleTabs, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
0102     connect(m_confirmOpenManyFolders, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
0103     connect(m_confirmOpenManyTerminals, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
0104 
0105 #if HAVE_TERMINAL
0106     connect(m_confirmClosingTerminalRunningProgram, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
0107 #endif
0108 }
0109 
0110 ConfirmationsSettingsPage::~ConfirmationsSettingsPage()
0111 {
0112 }
0113 
0114 void ConfirmationsSettingsPage::applySettings()
0115 {
0116     KSharedConfig::Ptr kioConfig = KSharedConfig::openConfig(QStringLiteral("kiorc"), KConfig::NoGlobals);
0117     KConfigGroup confirmationGroup(kioConfig, QStringLiteral("Confirmations"));
0118     confirmationGroup.writeEntry("ConfirmTrash", m_confirmMoveToTrash->isChecked());
0119     confirmationGroup.writeEntry("ConfirmEmptyTrash", m_confirmEmptyTrash->isChecked());
0120     confirmationGroup.writeEntry("ConfirmDelete", m_confirmDelete->isChecked());
0121 
0122     KConfigGroup scriptExecutionGroup(kioConfig, QStringLiteral("Executable scripts"));
0123     const int index = m_confirmScriptExecution->currentIndex();
0124     switch (index) {
0125     case ScriptExecution::AlwaysAsk:
0126         scriptExecutionGroup.writeEntry("behaviourOnLaunch", "alwaysAsk");
0127         break;
0128     case ScriptExecution::Open:
0129         scriptExecutionGroup.writeEntry("behaviourOnLaunch", "open");
0130         break;
0131     case ScriptExecution::Execute:
0132         scriptExecutionGroup.writeEntry("behaviourOnLaunch", "execute");
0133         break;
0134     }
0135     kioConfig->sync();
0136 
0137     GeneralSettings *settings = GeneralSettings::self();
0138     settings->setConfirmClosingMultipleTabs(m_confirmClosingMultipleTabs->isChecked());
0139     settings->setConfirmOpenManyFolders(m_confirmOpenManyFolders->isChecked());
0140     settings->setConfirmOpenManyTerminals(m_confirmOpenManyTerminals->isChecked());
0141 
0142 #if HAVE_TERMINAL
0143     settings->setConfirmClosingTerminalRunningProgram(m_confirmClosingTerminalRunningProgram->isChecked());
0144 #endif
0145 
0146     settings->save();
0147 }
0148 
0149 void ConfirmationsSettingsPage::restoreDefaults()
0150 {
0151     GeneralSettings *settings = GeneralSettings::self();
0152     settings->useDefaults(true);
0153     loadSettings();
0154     settings->useDefaults(false);
0155 
0156     m_confirmMoveToTrash->setChecked(ConfirmTrash);
0157     m_confirmEmptyTrash->setChecked(ConfirmEmptyTrash);
0158     m_confirmDelete->setChecked(ConfirmDelete);
0159     m_confirmScriptExecution->setCurrentIndex(ConfirmScriptExecution);
0160 }
0161 
0162 void ConfirmationsSettingsPage::loadSettings()
0163 {
0164     KSharedConfig::Ptr kioConfig = KSharedConfig::openConfig(QStringLiteral("kiorc"), KConfig::IncludeGlobals);
0165     const KConfigGroup confirmationGroup(kioConfig, QStringLiteral("Confirmations"));
0166     m_confirmMoveToTrash->setChecked(confirmationGroup.readEntry("ConfirmTrash", ConfirmTrash));
0167     m_confirmEmptyTrash->setChecked(confirmationGroup.readEntry("ConfirmEmptyTrash", ConfirmEmptyTrash));
0168     m_confirmDelete->setChecked(confirmationGroup.readEntry("ConfirmDelete", ConfirmDelete));
0169 
0170     const KConfigGroup scriptExecutionGroup(KSharedConfig::openConfig(QStringLiteral("kiorc")), QStringLiteral("Executable scripts"));
0171     const QString value = scriptExecutionGroup.readEntry("behaviourOnLaunch", "alwaysAsk");
0172     if (value == QLatin1String("alwaysAsk")) {
0173         m_confirmScriptExecution->setCurrentIndex(ScriptExecution::AlwaysAsk);
0174     } else if (value == QLatin1String("execute")) {
0175         m_confirmScriptExecution->setCurrentIndex(ScriptExecution::Execute);
0176     } else /* if (value == QLatin1String("open"))*/ {
0177         m_confirmScriptExecution->setCurrentIndex(ScriptExecution::Open);
0178     }
0179 
0180     m_confirmClosingMultipleTabs->setChecked(GeneralSettings::confirmClosingMultipleTabs());
0181 
0182     // KMessageBox for its dontshowAgain settings are true => Yes, false => No, No value => ask
0183     // we use default = false to not write false into the rc file, but have no value
0184     // the UI has inversed meaning compared to the interpretation
0185     m_confirmOpenManyFolders->setChecked(GeneralSettings::confirmOpenManyFolders());
0186     m_confirmOpenManyTerminals->setChecked(GeneralSettings::confirmOpenManyTerminals());
0187 
0188 #if HAVE_TERMINAL
0189     m_confirmClosingTerminalRunningProgram->setChecked(GeneralSettings::confirmClosingTerminalRunningProgram());
0190 #endif
0191 }
0192 
0193 #include "moc_confirmationssettingspage.cpp"