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"