]> cloud.milkyroute.net Git - dolphin.git/blob - src/settings/interface/confirmationssettingspage.cpp
Remove some frames from the settings
[dolphin.git] / src / settings / interface / 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 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);
65
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);
70
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);
74
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);
82
83 #if HAVE_TERMINAL
84 topLayout->addWidget(m_confirmClosingTerminalRunningProgram);
85 #endif
86
87 topLayout->addWidget(m_confirmOpenManyFolders);
88 topLayout->addWidget(m_confirmOpenManyTerminals);
89
90 topLayout->addSpacing(Dolphin::VERTICAL_SPACER_HEIGHT);
91 topLayout->addLayout(executableScriptLayout);
92
93 topLayout->addStretch();
94
95 loadSettings();
96
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);
104
105 #if HAVE_TERMINAL
106 connect(m_confirmClosingTerminalRunningProgram, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
107 #endif
108 }
109
110 ConfirmationsSettingsPage::~ConfirmationsSettingsPage()
111 {
112 }
113
114 void ConfirmationsSettingsPage::applySettings()
115 {
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());
121
122 KConfigGroup scriptExecutionGroup(kioConfig, QStringLiteral("Executable scripts"));
123 const int index = m_confirmScriptExecution->currentIndex();
124 switch (index) {
125 case ScriptExecution::AlwaysAsk:
126 scriptExecutionGroup.writeEntry("behaviourOnLaunch", "alwaysAsk");
127 break;
128 case ScriptExecution::Open:
129 scriptExecutionGroup.writeEntry("behaviourOnLaunch", "open");
130 break;
131 case ScriptExecution::Execute:
132 scriptExecutionGroup.writeEntry("behaviourOnLaunch", "execute");
133 break;
134 }
135 kioConfig->sync();
136
137 GeneralSettings *settings = GeneralSettings::self();
138 settings->setConfirmClosingMultipleTabs(m_confirmClosingMultipleTabs->isChecked());
139 settings->setConfirmOpenManyFolders(m_confirmOpenManyFolders->isChecked());
140 settings->setConfirmOpenManyTerminals(m_confirmOpenManyTerminals->isChecked());
141
142 #if HAVE_TERMINAL
143 settings->setConfirmClosingTerminalRunningProgram(m_confirmClosingTerminalRunningProgram->isChecked());
144 #endif
145
146 settings->save();
147 }
148
149 void ConfirmationsSettingsPage::restoreDefaults()
150 {
151 GeneralSettings *settings = GeneralSettings::self();
152 settings->useDefaults(true);
153 loadSettings();
154 settings->useDefaults(false);
155
156 m_confirmMoveToTrash->setChecked(ConfirmTrash);
157 m_confirmEmptyTrash->setChecked(ConfirmEmptyTrash);
158 m_confirmDelete->setChecked(ConfirmDelete);
159 m_confirmScriptExecution->setCurrentIndex(ConfirmScriptExecution);
160 }
161
162 void ConfirmationsSettingsPage::loadSettings()
163 {
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));
169
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);
178 }
179
180 m_confirmClosingMultipleTabs->setChecked(GeneralSettings::confirmClosingMultipleTabs());
181
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());
187
188 #if HAVE_TERMINAL
189 m_confirmClosingTerminalRunningProgram->setChecked(GeneralSettings::confirmClosingTerminalRunningProgram());
190 #endif
191 }
192
193 #include "moc_confirmationssettingspage.cpp"