2 * SPDX-FileCopyrightText: 2012 Peter Penz <peter.penz19@gmail.com>
4 * SPDX-License-Identifier: GPL-2.0-or-later
7 #include "confirmationssettingspage.h"
9 #include "admin/workerintegration.h"
10 #include "dolphin_generalsettings.h"
13 #include <KLocalizedString>
14 #include <KMessageBox>
15 #include <KProtocolInfo>
19 #include <QFormLayout>
24 enum ScriptExecution
{ AlwaysAsk
= 0, Open
= 1, Execute
= 2 };
26 const bool ConfirmEmptyTrash
= true;
27 const bool ConfirmTrash
= false;
28 const bool ConfirmDelete
= true;
29 const int ConfirmScriptExecution
= ScriptExecution::AlwaysAsk
;
32 ConfirmationsSettingsPage::ConfirmationsSettingsPage(QWidget
*parent
)
33 : SettingsPageBase(parent
)
34 , m_confirmMoveToTrash(nullptr)
35 , m_confirmEmptyTrash(nullptr)
36 , m_confirmDelete(nullptr)
40 m_confirmClosingTerminalRunningProgram(nullptr)
44 m_confirmClosingMultipleTabs(nullptr)
46 QFormLayout
*topLayout
= new QFormLayout(this);
48 QLabel
*confirmLabelKde
= new QLabel(i18nc("@title:group", "Ask for confirmation in all KDE applications when:"), this);
49 confirmLabelKde
->setWordWrap(true);
51 m_confirmMoveToTrash
= new QCheckBox(i18nc("@option:check Ask for confirmation when", "Moving files or folders to trash"), this);
52 m_confirmEmptyTrash
= new QCheckBox(i18nc("@option:check Ask for confirmation when", "Emptying trash"), this);
53 m_confirmDelete
= new QCheckBox(i18nc("@option:check Ask for confirmation when", "Deleting files or folders"), this);
55 QLabel
*confirmLabelDolphin
= new QLabel(i18nc("@title:group", "Ask for confirmation in Dolphin when:"), this);
56 confirmLabelDolphin
->setWordWrap(true);
58 m_confirmClosingMultipleTabs
= new QCheckBox(i18nc("@option:check Ask for confirmation in Dolphin when", "Closing windows with multiple tabs"), this);
61 m_confirmClosingTerminalRunningProgram
=
62 new QCheckBox(i18nc("@option:check Ask for confirmation when", "Closing windows with a program running in the Terminal panel"), this);
65 m_confirmOpenManyFolders
= new QCheckBox(i18nc("@option:check Ask for confirmation in Dolphin when", "Opening many folders at once"), this);
66 m_confirmOpenManyTerminals
= new QCheckBox(i18nc("@option:check Ask for confirmation in Dolphin when", "Opening many terminals at once"), this);
67 m_confirmRisksOfActingAsAdmin
= new QCheckBox(i18nc("@option:check Ask for confirmation in Dolphin when", "Switching to act as an administrator"), this);
69 QLabel
*executableScriptLabel
= new QLabel(i18nc("@title:group", "When opening an executable file:"), this);
70 executableScriptLabel
->setWordWrap(true);
72 m_confirmScriptExecution
= new QComboBox(this);
73 m_confirmScriptExecution
->addItems({i18n("Always ask"), i18n("Open in application"), i18n("Run script")});
75 topLayout
->addRow(confirmLabelKde
);
76 topLayout
->addRow(nullptr, m_confirmMoveToTrash
);
77 topLayout
->addRow(nullptr, m_confirmEmptyTrash
);
78 topLayout
->addRow(nullptr, m_confirmDelete
);
80 topLayout
->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT
, QSizePolicy::Fixed
, QSizePolicy::Fixed
));
81 topLayout
->addRow(confirmLabelDolphin
);
82 topLayout
->addRow(nullptr, m_confirmClosingMultipleTabs
);
85 topLayout
->addRow(nullptr, m_confirmClosingTerminalRunningProgram
);
88 topLayout
->addRow(nullptr, m_confirmOpenManyFolders
);
89 topLayout
->addRow(nullptr, m_confirmOpenManyTerminals
);
90 if (KProtocolInfo::isKnownProtocol(QStringLiteral("admin"))) {
91 topLayout
->addRow(nullptr, m_confirmRisksOfActingAsAdmin
);
93 m_confirmRisksOfActingAsAdmin
->hide();
96 topLayout
->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT
, QSizePolicy::Fixed
, QSizePolicy::Fixed
));
97 topLayout
->addRow(executableScriptLabel
, m_confirmScriptExecution
);
101 connect(m_confirmMoveToTrash
, &QCheckBox::toggled
, this, &ConfirmationsSettingsPage::changed
);
102 connect(m_confirmEmptyTrash
, &QCheckBox::toggled
, this, &ConfirmationsSettingsPage::changed
);
103 connect(m_confirmDelete
, &QCheckBox::toggled
, this, &ConfirmationsSettingsPage::changed
);
104 connect(m_confirmScriptExecution
, QOverload
<int>::of(&QComboBox::currentIndexChanged
), this, &ConfirmationsSettingsPage::changed
);
105 connect(m_confirmClosingMultipleTabs
, &QCheckBox::toggled
, this, &ConfirmationsSettingsPage::changed
);
106 connect(m_confirmOpenManyFolders
, &QCheckBox::toggled
, this, &ConfirmationsSettingsPage::changed
);
107 connect(m_confirmOpenManyTerminals
, &QCheckBox::toggled
, this, &ConfirmationsSettingsPage::changed
);
108 connect(m_confirmRisksOfActingAsAdmin
, &QCheckBox::toggled
, this, &ConfirmationsSettingsPage::changed
);
111 connect(m_confirmClosingTerminalRunningProgram
, &QCheckBox::toggled
, this, &ConfirmationsSettingsPage::changed
);
115 ConfirmationsSettingsPage::~ConfirmationsSettingsPage()
119 void ConfirmationsSettingsPage::applySettings()
121 KSharedConfig::Ptr kioConfig
= KSharedConfig::openConfig(QStringLiteral("kiorc"), KConfig::NoGlobals
);
122 KConfigGroup
confirmationGroup(kioConfig
, QStringLiteral("Confirmations"));
123 confirmationGroup
.writeEntry("ConfirmTrash", m_confirmMoveToTrash
->isChecked());
124 confirmationGroup
.writeEntry("ConfirmEmptyTrash", m_confirmEmptyTrash
->isChecked());
125 confirmationGroup
.writeEntry("ConfirmDelete", m_confirmDelete
->isChecked());
127 KConfigGroup
scriptExecutionGroup(kioConfig
, QStringLiteral("Executable scripts"));
128 const int index
= m_confirmScriptExecution
->currentIndex();
130 case ScriptExecution::AlwaysAsk
:
131 scriptExecutionGroup
.writeEntry("behaviourOnLaunch", "alwaysAsk");
133 case ScriptExecution::Open
:
134 scriptExecutionGroup
.writeEntry("behaviourOnLaunch", "open");
136 case ScriptExecution::Execute
:
137 scriptExecutionGroup
.writeEntry("behaviourOnLaunch", "execute");
142 GeneralSettings
*settings
= GeneralSettings::self();
143 settings
->setConfirmClosingMultipleTabs(m_confirmClosingMultipleTabs
->isChecked());
144 settings
->setConfirmOpenManyFolders(m_confirmOpenManyFolders
->isChecked());
145 settings
->setConfirmOpenManyTerminals(m_confirmOpenManyTerminals
->isChecked());
146 if (m_confirmRisksOfActingAsAdmin
->isChecked()) {
147 KMessageBox::enableMessage(Admin::warningDontShowAgainName
);
149 KMessageBox::saveDontShowAgainContinue(Admin::warningDontShowAgainName
);
153 settings
->setConfirmClosingTerminalRunningProgram(m_confirmClosingTerminalRunningProgram
->isChecked());
159 void ConfirmationsSettingsPage::restoreDefaults()
161 GeneralSettings
*settings
= GeneralSettings::self();
162 settings
->useDefaults(true);
164 settings
->useDefaults(false);
166 m_confirmMoveToTrash
->setChecked(ConfirmTrash
);
167 m_confirmEmptyTrash
->setChecked(ConfirmEmptyTrash
);
168 m_confirmDelete
->setChecked(ConfirmDelete
);
169 m_confirmScriptExecution
->setCurrentIndex(ConfirmScriptExecution
);
170 KMessageBox::enableMessage(Admin::warningDontShowAgainName
);
173 void ConfirmationsSettingsPage::loadSettings()
175 KSharedConfig::Ptr kioConfig
= KSharedConfig::openConfig(QStringLiteral("kiorc"), KConfig::IncludeGlobals
);
176 const KConfigGroup
confirmationGroup(kioConfig
, QStringLiteral("Confirmations"));
177 m_confirmMoveToTrash
->setChecked(confirmationGroup
.readEntry("ConfirmTrash", ConfirmTrash
));
178 m_confirmEmptyTrash
->setChecked(confirmationGroup
.readEntry("ConfirmEmptyTrash", ConfirmEmptyTrash
));
179 m_confirmDelete
->setChecked(confirmationGroup
.readEntry("ConfirmDelete", ConfirmDelete
));
181 const KConfigGroup
scriptExecutionGroup(KSharedConfig::openConfig(QStringLiteral("kiorc")), QStringLiteral("Executable scripts"));
182 const QString value
= scriptExecutionGroup
.readEntry("behaviourOnLaunch", "alwaysAsk");
183 if (value
== QLatin1String("alwaysAsk")) {
184 m_confirmScriptExecution
->setCurrentIndex(ScriptExecution::AlwaysAsk
);
185 } else if (value
== QLatin1String("execute")) {
186 m_confirmScriptExecution
->setCurrentIndex(ScriptExecution::Execute
);
187 } else /* if (value == QLatin1String("open"))*/ {
188 m_confirmScriptExecution
->setCurrentIndex(ScriptExecution::Open
);
191 m_confirmClosingMultipleTabs
->setChecked(GeneralSettings::confirmClosingMultipleTabs());
193 // KMessageBox for its dontshowAgain settings are true => Yes, false => No, No value => ask
194 // we use default = false to not write false into the rc file, but have no value
195 // the UI has inversed meaning compared to the interpretation
196 m_confirmOpenManyFolders
->setChecked(GeneralSettings::confirmOpenManyFolders());
197 m_confirmOpenManyTerminals
->setChecked(GeneralSettings::confirmOpenManyTerminals());
198 m_confirmRisksOfActingAsAdmin
->setChecked(KMessageBox::shouldBeShownContinue(Admin::warningDontShowAgainName
));
201 m_confirmClosingTerminalRunningProgram
->setChecked(GeneralSettings::confirmClosingTerminalRunningProgram());
205 #include "moc_confirmationssettingspage.cpp"