]> cloud.milkyroute.net Git - dolphin.git/blob - src/settings/general/confirmationssettingspage.cpp
Port to KF6 KWidgetItemDelegate
[dolphin.git] / src / settings / general / confirmationssettingspage.cpp
1 /*
2 * SPDX-FileCopyrightText: 2012 Peter Penz <peter.penz19@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "confirmationssettingspage.h"
8
9 #include "dolphin_generalsettings.h"
10 #include "global.h"
11
12 #include <KLocalizedString>
13
14 #include <QCheckBox>
15 #include <QComboBox>
16 #include <QHBoxLayout>
17 #include <QLabel>
18 #include <QVBoxLayout>
19
20 namespace
21 {
22 enum ScriptExecution { AlwaysAsk = 0, Open = 1, Execute = 2 };
23
24 const bool ConfirmEmptyTrash = true;
25 const bool ConfirmTrash = false;
26 const bool ConfirmDelete = true;
27 const int ConfirmScriptExecution = ScriptExecution::AlwaysAsk;
28 }
29
30 ConfirmationsSettingsPage::ConfirmationsSettingsPage(QWidget *parent)
31 : SettingsPageBase(parent)
32 , m_confirmMoveToTrash(nullptr)
33 , m_confirmEmptyTrash(nullptr)
34 , m_confirmDelete(nullptr)
35 ,
36
37 #if HAVE_TERMINAL
38 m_confirmClosingTerminalRunningProgram(nullptr)
39 ,
40 #endif
41
42 m_confirmClosingMultipleTabs(nullptr)
43 {
44 QVBoxLayout *topLayout = new QVBoxLayout(this);
45
46 QLabel *confirmLabelKde = new QLabel(i18nc("@title:group", "Ask for confirmation in all KDE applications when:"), this);
47 confirmLabelKde->setWordWrap(true);
48
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);
52
53 QLabel *confirmLabelDolphin = new QLabel(i18nc("@title:group", "Ask for confirmation in Dolphin when:"), this);
54 confirmLabelDolphin->setWordWrap(true);
55
56 m_confirmClosingMultipleTabs = new QCheckBox(i18nc("@option:check Ask for confirmation in Dolphin when", "Closing windows with multiple tabs"), this);
57
58 #if HAVE_TERMINAL
59 m_confirmClosingTerminalRunningProgram =
60 new QCheckBox(i18nc("@option:check Ask for confirmation when", "Closing windows with a program running in the Terminal panel"), this);
61 #endif
62
63 QHBoxLayout *executableScriptLayout = new QHBoxLayout();
64 QLabel *executableScriptLabel = new QLabel(i18nc("@title:group", "When opening an executable file:"), this);
65 confirmLabelKde->setWordWrap(true);
66 executableScriptLayout->addWidget(executableScriptLabel);
67
68 m_confirmScriptExecution = new QComboBox(this);
69 m_confirmScriptExecution->addItems({i18n("Always ask"), i18n("Open in application"), i18n("Run script")});
70 executableScriptLayout->addWidget(m_confirmScriptExecution);
71
72 topLayout->addWidget(confirmLabelKde);
73 topLayout->addWidget(m_confirmMoveToTrash);
74 topLayout->addWidget(m_confirmEmptyTrash);
75 topLayout->addWidget(m_confirmDelete);
76 topLayout->addSpacing(Dolphin::VERTICAL_SPACER_HEIGHT);
77 topLayout->addWidget(confirmLabelDolphin);
78 topLayout->addWidget(m_confirmClosingMultipleTabs);
79
80 #if HAVE_TERMINAL
81 topLayout->addWidget(m_confirmClosingTerminalRunningProgram);
82 #endif
83
84 topLayout->addSpacing(Dolphin::VERTICAL_SPACER_HEIGHT);
85 topLayout->addLayout(executableScriptLayout);
86
87 topLayout->addStretch();
88
89 loadSettings();
90
91 connect(m_confirmMoveToTrash, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
92 connect(m_confirmEmptyTrash, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
93 connect(m_confirmDelete, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
94 connect(m_confirmScriptExecution, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ConfirmationsSettingsPage::changed);
95 connect(m_confirmClosingMultipleTabs, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
96
97 #if HAVE_TERMINAL
98 connect(m_confirmClosingTerminalRunningProgram, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
99 #endif
100 }
101
102 ConfirmationsSettingsPage::~ConfirmationsSettingsPage()
103 {
104 }
105
106 void ConfirmationsSettingsPage::applySettings()
107 {
108 KSharedConfig::Ptr kioConfig = KSharedConfig::openConfig(QStringLiteral("kiorc"), KConfig::NoGlobals);
109 KConfigGroup confirmationGroup(kioConfig, "Confirmations");
110 confirmationGroup.writeEntry("ConfirmTrash", m_confirmMoveToTrash->isChecked());
111 confirmationGroup.writeEntry("ConfirmEmptyTrash", m_confirmEmptyTrash->isChecked());
112 confirmationGroup.writeEntry("ConfirmDelete", m_confirmDelete->isChecked());
113
114 KConfigGroup scriptExecutionGroup(kioConfig, "Executable scripts");
115 const int index = m_confirmScriptExecution->currentIndex();
116 switch (index) {
117 case ScriptExecution::AlwaysAsk:
118 scriptExecutionGroup.writeEntry("behaviourOnLaunch", "alwaysAsk");
119 break;
120 case ScriptExecution::Open:
121 scriptExecutionGroup.writeEntry("behaviourOnLaunch", "open");
122 break;
123 case ScriptExecution::Execute:
124 scriptExecutionGroup.writeEntry("behaviourOnLaunch", "execute");
125 break;
126 }
127 kioConfig->sync();
128
129 GeneralSettings *settings = GeneralSettings::self();
130 settings->setConfirmClosingMultipleTabs(m_confirmClosingMultipleTabs->isChecked());
131
132 #if HAVE_TERMINAL
133 settings->setConfirmClosingTerminalRunningProgram(m_confirmClosingTerminalRunningProgram->isChecked());
134 #endif
135
136 settings->save();
137 }
138
139 void ConfirmationsSettingsPage::restoreDefaults()
140 {
141 GeneralSettings *settings = GeneralSettings::self();
142 settings->useDefaults(true);
143 loadSettings();
144 settings->useDefaults(false);
145
146 m_confirmMoveToTrash->setChecked(ConfirmTrash);
147 m_confirmEmptyTrash->setChecked(ConfirmEmptyTrash);
148 m_confirmDelete->setChecked(ConfirmDelete);
149 m_confirmScriptExecution->setCurrentIndex(ConfirmScriptExecution);
150 }
151
152 void ConfirmationsSettingsPage::loadSettings()
153 {
154 KSharedConfig::Ptr kioConfig = KSharedConfig::openConfig(QStringLiteral("kiorc"), KConfig::IncludeGlobals);
155 const KConfigGroup confirmationGroup(kioConfig, "Confirmations");
156 m_confirmMoveToTrash->setChecked(confirmationGroup.readEntry("ConfirmTrash", ConfirmTrash));
157 m_confirmEmptyTrash->setChecked(confirmationGroup.readEntry("ConfirmEmptyTrash", ConfirmEmptyTrash));
158 m_confirmDelete->setChecked(confirmationGroup.readEntry("ConfirmDelete", ConfirmDelete));
159
160 const KConfigGroup scriptExecutionGroup(KSharedConfig::openConfig(QStringLiteral("kiorc")), "Executable scripts");
161 const QString value = scriptExecutionGroup.readEntry("behaviourOnLaunch", "alwaysAsk");
162 if (value == QLatin1String("alwaysAsk")) {
163 m_confirmScriptExecution->setCurrentIndex(ScriptExecution::AlwaysAsk);
164 } else if (value == QLatin1String("execute")) {
165 m_confirmScriptExecution->setCurrentIndex(ScriptExecution::Execute);
166 } else /* if (value == QLatin1String("open"))*/ {
167 m_confirmScriptExecution->setCurrentIndex(ScriptExecution::Open);
168 }
169
170 m_confirmClosingMultipleTabs->setChecked(GeneralSettings::confirmClosingMultipleTabs());
171
172 #if HAVE_TERMINAL
173 m_confirmClosingTerminalRunningProgram->setChecked(GeneralSettings::confirmClosingTerminalRunningProgram());
174 #endif
175 }