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 "dolphin_generalsettings.h"
12 #include <KLocalizedString>
16 #include <QHBoxLayout>
18 #include <QVBoxLayout>
22 enum ScriptExecution
{ AlwaysAsk
= 0, Open
= 1, Execute
= 2 };
24 const bool ConfirmEmptyTrash
= true;
25 const bool ConfirmTrash
= false;
26 const bool ConfirmDelete
= true;
27 const int ConfirmScriptExecution
= ScriptExecution::AlwaysAsk
;
30 ConfirmationsSettingsPage::ConfirmationsSettingsPage(QWidget
*parent
)
31 : SettingsPageBase(parent
)
32 , m_confirmMoveToTrash(nullptr)
33 , m_confirmEmptyTrash(nullptr)
34 , m_confirmDelete(nullptr)
38 m_confirmClosingTerminalRunningProgram(nullptr)
42 m_confirmClosingMultipleTabs(nullptr)
44 QVBoxLayout
*topLayout
= new QVBoxLayout(this);
46 QLabel
*confirmLabelKde
= new QLabel(i18nc("@title:group", "Ask for confirmation in all KDE applications when:"), this);
47 confirmLabelKde
->setWordWrap(true);
49 m_confirmMoveToTrash
= new QCheckBox(i18nc("@option:check Ask for confirmation when", "Moving files or folders to trash"), this);
50 m_confirmEmptyTrash
= new QCheckBox(i18nc("@option:check Ask for confirmation when", "Emptying trash"), this);
51 m_confirmDelete
= new QCheckBox(i18nc("@option:check Ask for confirmation when", "Deleting files or folders"), this);
53 QLabel
*confirmLabelDolphin
= new QLabel(i18nc("@title:group", "Ask for confirmation in Dolphin when:"), this);
54 confirmLabelDolphin
->setWordWrap(true);
56 m_confirmClosingMultipleTabs
= new QCheckBox(i18nc("@option:check Ask for confirmation in Dolphin when", "Closing windows with multiple tabs"), this);
59 m_confirmClosingTerminalRunningProgram
=
60 new QCheckBox(i18nc("@option:check Ask for confirmation when", "Closing windows with a program running in the Terminal panel"), this);
63 m_confirmOpenManyFolders
= new QCheckBox(i18nc("@option:check Ask for confirmation in Dolphin when", "Opening many folders at once"), this);
64 m_confirmOpenManyTerminals
= new QCheckBox(i18nc("@option:check Ask for confirmation in Dolphin when", "Opening many terminals at once"), this);
66 QHBoxLayout
*executableScriptLayout
= new QHBoxLayout();
67 QLabel
*executableScriptLabel
= new QLabel(i18nc("@title:group", "When opening an executable file:"), this);
68 executableScriptLabel
->setWordWrap(true);
69 executableScriptLayout
->addWidget(executableScriptLabel
);
71 m_confirmScriptExecution
= new QComboBox(this);
72 m_confirmScriptExecution
->addItems({i18n("Always ask"), i18n("Open in application"), i18n("Run script")});
73 executableScriptLayout
->addWidget(m_confirmScriptExecution
);
75 topLayout
->addWidget(confirmLabelKde
);
76 topLayout
->addWidget(m_confirmMoveToTrash
);
77 topLayout
->addWidget(m_confirmEmptyTrash
);
78 topLayout
->addWidget(m_confirmDelete
);
79 topLayout
->addSpacing(Dolphin::VERTICAL_SPACER_HEIGHT
);
80 topLayout
->addWidget(confirmLabelDolphin
);
81 topLayout
->addWidget(m_confirmClosingMultipleTabs
);
84 topLayout
->addWidget(m_confirmClosingTerminalRunningProgram
);
87 topLayout
->addWidget(m_confirmOpenManyFolders
);
88 topLayout
->addWidget(m_confirmOpenManyTerminals
);
90 topLayout
->addSpacing(Dolphin::VERTICAL_SPACER_HEIGHT
);
91 topLayout
->addLayout(executableScriptLayout
);
93 topLayout
->addStretch();
97 connect(m_confirmMoveToTrash
, &QCheckBox::toggled
, this, &ConfirmationsSettingsPage::changed
);
98 connect(m_confirmEmptyTrash
, &QCheckBox::toggled
, this, &ConfirmationsSettingsPage::changed
);
99 connect(m_confirmDelete
, &QCheckBox::toggled
, this, &ConfirmationsSettingsPage::changed
);
100 connect(m_confirmScriptExecution
, QOverload
<int>::of(&QComboBox::currentIndexChanged
), this, &ConfirmationsSettingsPage::changed
);
101 connect(m_confirmClosingMultipleTabs
, &QCheckBox::toggled
, this, &ConfirmationsSettingsPage::changed
);
102 connect(m_confirmOpenManyFolders
, &QCheckBox::toggled
, this, &ConfirmationsSettingsPage::changed
);
103 connect(m_confirmOpenManyTerminals
, &QCheckBox::toggled
, this, &ConfirmationsSettingsPage::changed
);
106 connect(m_confirmClosingTerminalRunningProgram
, &QCheckBox::toggled
, this, &ConfirmationsSettingsPage::changed
);
110 ConfirmationsSettingsPage::~ConfirmationsSettingsPage()
114 void ConfirmationsSettingsPage::applySettings()
116 KSharedConfig::Ptr kioConfig
= KSharedConfig::openConfig(QStringLiteral("kiorc"), KConfig::NoGlobals
);
117 KConfigGroup
confirmationGroup(kioConfig
, QStringLiteral("Confirmations"));
118 confirmationGroup
.writeEntry("ConfirmTrash", m_confirmMoveToTrash
->isChecked());
119 confirmationGroup
.writeEntry("ConfirmEmptyTrash", m_confirmEmptyTrash
->isChecked());
120 confirmationGroup
.writeEntry("ConfirmDelete", m_confirmDelete
->isChecked());
122 KConfigGroup
scriptExecutionGroup(kioConfig
, QStringLiteral("Executable scripts"));
123 const int index
= m_confirmScriptExecution
->currentIndex();
125 case ScriptExecution::AlwaysAsk
:
126 scriptExecutionGroup
.writeEntry("behaviourOnLaunch", "alwaysAsk");
128 case ScriptExecution::Open
:
129 scriptExecutionGroup
.writeEntry("behaviourOnLaunch", "open");
131 case ScriptExecution::Execute
:
132 scriptExecutionGroup
.writeEntry("behaviourOnLaunch", "execute");
137 GeneralSettings
*settings
= GeneralSettings::self();
138 settings
->setConfirmClosingMultipleTabs(m_confirmClosingMultipleTabs
->isChecked());
139 settings
->setConfirmOpenManyFolders(m_confirmOpenManyFolders
->isChecked());
140 settings
->setConfirmOpenManyTerminals(m_confirmOpenManyTerminals
->isChecked());
143 settings
->setConfirmClosingTerminalRunningProgram(m_confirmClosingTerminalRunningProgram
->isChecked());
149 void ConfirmationsSettingsPage::restoreDefaults()
151 GeneralSettings
*settings
= GeneralSettings::self();
152 settings
->useDefaults(true);
154 settings
->useDefaults(false);
156 m_confirmMoveToTrash
->setChecked(ConfirmTrash
);
157 m_confirmEmptyTrash
->setChecked(ConfirmEmptyTrash
);
158 m_confirmDelete
->setChecked(ConfirmDelete
);
159 m_confirmScriptExecution
->setCurrentIndex(ConfirmScriptExecution
);
162 void ConfirmationsSettingsPage::loadSettings()
164 KSharedConfig::Ptr kioConfig
= KSharedConfig::openConfig(QStringLiteral("kiorc"), KConfig::IncludeGlobals
);
165 const KConfigGroup
confirmationGroup(kioConfig
, QStringLiteral("Confirmations"));
166 m_confirmMoveToTrash
->setChecked(confirmationGroup
.readEntry("ConfirmTrash", ConfirmTrash
));
167 m_confirmEmptyTrash
->setChecked(confirmationGroup
.readEntry("ConfirmEmptyTrash", ConfirmEmptyTrash
));
168 m_confirmDelete
->setChecked(confirmationGroup
.readEntry("ConfirmDelete", ConfirmDelete
));
170 const KConfigGroup
scriptExecutionGroup(KSharedConfig::openConfig(QStringLiteral("kiorc")), QStringLiteral("Executable scripts"));
171 const QString value
= scriptExecutionGroup
.readEntry("behaviourOnLaunch", "alwaysAsk");
172 if (value
== QLatin1String("alwaysAsk")) {
173 m_confirmScriptExecution
->setCurrentIndex(ScriptExecution::AlwaysAsk
);
174 } else if (value
== QLatin1String("execute")) {
175 m_confirmScriptExecution
->setCurrentIndex(ScriptExecution::Execute
);
176 } else /* if (value == QLatin1String("open"))*/ {
177 m_confirmScriptExecution
->setCurrentIndex(ScriptExecution::Open
);
180 m_confirmClosingMultipleTabs
->setChecked(GeneralSettings::confirmClosingMultipleTabs());
182 // KMessageBox for its dontshowAgain settings are true => Yes, false => No, No value => ask
183 // we use default = false to not write false into the rc file, but have no value
184 // the UI has inversed meaning compared to the interpretation
185 m_confirmOpenManyFolders
->setChecked(GeneralSettings::confirmOpenManyFolders());
186 m_confirmOpenManyTerminals
->setChecked(GeneralSettings::confirmOpenManyTerminals());
189 m_confirmClosingTerminalRunningProgram
->setChecked(GeneralSettings::confirmClosingTerminalRunningProgram());
193 #include "moc_confirmationssettingspage.cpp"