]> cloud.milkyroute.net Git - dolphin.git/blob - src/settings/interface/confirmationssettingspage.cpp
Check if namejob is already being run before opening new createDirectory dialog
[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 <QFormLayout>
17 #include <QLabel>
18
19 namespace
20 {
21 enum ScriptExecution { AlwaysAsk = 0, Open = 1, Execute = 2 };
22
23 const bool ConfirmEmptyTrash = true;
24 const bool ConfirmTrash = false;
25 const bool ConfirmDelete = true;
26 const int ConfirmScriptExecution = ScriptExecution::AlwaysAsk;
27 }
28
29 ConfirmationsSettingsPage::ConfirmationsSettingsPage(QWidget *parent)
30 : SettingsPageBase(parent)
31 , m_confirmMoveToTrash(nullptr)
32 , m_confirmEmptyTrash(nullptr)
33 , m_confirmDelete(nullptr)
34 ,
35
36 #if HAVE_TERMINAL
37 m_confirmClosingTerminalRunningProgram(nullptr)
38 ,
39 #endif
40
41 m_confirmClosingMultipleTabs(nullptr)
42 {
43 QFormLayout *topLayout = new QFormLayout(this);
44
45 QLabel *confirmLabelKde = new QLabel(i18nc("@title:group", "Ask for confirmation in all KDE applications when:"), this);
46 confirmLabelKde->setWordWrap(true);
47
48 m_confirmMoveToTrash = new QCheckBox(i18nc("@option:check Ask for confirmation when", "Moving files or folders to trash"), this);
49 m_confirmEmptyTrash = new QCheckBox(i18nc("@option:check Ask for confirmation when", "Emptying trash"), this);
50 m_confirmDelete = new QCheckBox(i18nc("@option:check Ask for confirmation when", "Deleting files or folders"), this);
51
52 QLabel *confirmLabelDolphin = new QLabel(i18nc("@title:group", "Ask for confirmation in Dolphin when:"), this);
53 confirmLabelDolphin->setWordWrap(true);
54
55 m_confirmClosingMultipleTabs = new QCheckBox(i18nc("@option:check Ask for confirmation in Dolphin when", "Closing windows with multiple tabs"), this);
56
57 #if HAVE_TERMINAL
58 m_confirmClosingTerminalRunningProgram =
59 new QCheckBox(i18nc("@option:check Ask for confirmation when", "Closing windows with a program running in the Terminal panel"), this);
60 #endif
61
62 m_confirmOpenManyFolders = new QCheckBox(i18nc("@option:check Ask for confirmation in Dolphin when", "Opening many folders at once"), this);
63 m_confirmOpenManyTerminals = new QCheckBox(i18nc("@option:check Ask for confirmation in Dolphin when", "Opening many terminals at once"), this);
64
65 QLabel *executableScriptLabel = new QLabel(i18nc("@title:group", "When opening an executable file:"), this);
66 executableScriptLabel->setWordWrap(true);
67
68 m_confirmScriptExecution = new QComboBox(this);
69 m_confirmScriptExecution->addItems({i18n("Always ask"), i18n("Open in application"), i18n("Run script")});
70
71 topLayout->addRow(confirmLabelKde);
72 topLayout->addRow(nullptr, m_confirmMoveToTrash);
73 topLayout->addRow(nullptr, m_confirmEmptyTrash);
74 topLayout->addRow(nullptr, m_confirmDelete);
75
76 topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed));
77 topLayout->addRow(confirmLabelDolphin);
78 topLayout->addRow(nullptr, m_confirmClosingMultipleTabs);
79
80 #if HAVE_TERMINAL
81 topLayout->addRow(nullptr, m_confirmClosingTerminalRunningProgram);
82 #endif
83
84 topLayout->addRow(nullptr, m_confirmOpenManyFolders);
85 topLayout->addRow(nullptr, m_confirmOpenManyTerminals);
86
87 topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed));
88 topLayout->addRow(executableScriptLabel, m_confirmScriptExecution);
89
90 loadSettings();
91
92 connect(m_confirmMoveToTrash, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
93 connect(m_confirmEmptyTrash, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
94 connect(m_confirmDelete, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
95 connect(m_confirmScriptExecution, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ConfirmationsSettingsPage::changed);
96 connect(m_confirmClosingMultipleTabs, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
97 connect(m_confirmOpenManyFolders, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
98 connect(m_confirmOpenManyTerminals, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
99
100 #if HAVE_TERMINAL
101 connect(m_confirmClosingTerminalRunningProgram, &QCheckBox::toggled, this, &ConfirmationsSettingsPage::changed);
102 #endif
103 }
104
105 ConfirmationsSettingsPage::~ConfirmationsSettingsPage()
106 {
107 }
108
109 void ConfirmationsSettingsPage::applySettings()
110 {
111 KSharedConfig::Ptr kioConfig = KSharedConfig::openConfig(QStringLiteral("kiorc"), KConfig::NoGlobals);
112 KConfigGroup confirmationGroup(kioConfig, QStringLiteral("Confirmations"));
113 confirmationGroup.writeEntry("ConfirmTrash", m_confirmMoveToTrash->isChecked());
114 confirmationGroup.writeEntry("ConfirmEmptyTrash", m_confirmEmptyTrash->isChecked());
115 confirmationGroup.writeEntry("ConfirmDelete", m_confirmDelete->isChecked());
116
117 KConfigGroup scriptExecutionGroup(kioConfig, QStringLiteral("Executable scripts"));
118 const int index = m_confirmScriptExecution->currentIndex();
119 switch (index) {
120 case ScriptExecution::AlwaysAsk:
121 scriptExecutionGroup.writeEntry("behaviourOnLaunch", "alwaysAsk");
122 break;
123 case ScriptExecution::Open:
124 scriptExecutionGroup.writeEntry("behaviourOnLaunch", "open");
125 break;
126 case ScriptExecution::Execute:
127 scriptExecutionGroup.writeEntry("behaviourOnLaunch", "execute");
128 break;
129 }
130 kioConfig->sync();
131
132 GeneralSettings *settings = GeneralSettings::self();
133 settings->setConfirmClosingMultipleTabs(m_confirmClosingMultipleTabs->isChecked());
134 settings->setConfirmOpenManyFolders(m_confirmOpenManyFolders->isChecked());
135 settings->setConfirmOpenManyTerminals(m_confirmOpenManyTerminals->isChecked());
136
137 #if HAVE_TERMINAL
138 settings->setConfirmClosingTerminalRunningProgram(m_confirmClosingTerminalRunningProgram->isChecked());
139 #endif
140
141 settings->save();
142 }
143
144 void ConfirmationsSettingsPage::restoreDefaults()
145 {
146 GeneralSettings *settings = GeneralSettings::self();
147 settings->useDefaults(true);
148 loadSettings();
149 settings->useDefaults(false);
150
151 m_confirmMoveToTrash->setChecked(ConfirmTrash);
152 m_confirmEmptyTrash->setChecked(ConfirmEmptyTrash);
153 m_confirmDelete->setChecked(ConfirmDelete);
154 m_confirmScriptExecution->setCurrentIndex(ConfirmScriptExecution);
155 }
156
157 void ConfirmationsSettingsPage::loadSettings()
158 {
159 KSharedConfig::Ptr kioConfig = KSharedConfig::openConfig(QStringLiteral("kiorc"), KConfig::IncludeGlobals);
160 const KConfigGroup confirmationGroup(kioConfig, QStringLiteral("Confirmations"));
161 m_confirmMoveToTrash->setChecked(confirmationGroup.readEntry("ConfirmTrash", ConfirmTrash));
162 m_confirmEmptyTrash->setChecked(confirmationGroup.readEntry("ConfirmEmptyTrash", ConfirmEmptyTrash));
163 m_confirmDelete->setChecked(confirmationGroup.readEntry("ConfirmDelete", ConfirmDelete));
164
165 const KConfigGroup scriptExecutionGroup(KSharedConfig::openConfig(QStringLiteral("kiorc")), QStringLiteral("Executable scripts"));
166 const QString value = scriptExecutionGroup.readEntry("behaviourOnLaunch", "alwaysAsk");
167 if (value == QLatin1String("alwaysAsk")) {
168 m_confirmScriptExecution->setCurrentIndex(ScriptExecution::AlwaysAsk);
169 } else if (value == QLatin1String("execute")) {
170 m_confirmScriptExecution->setCurrentIndex(ScriptExecution::Execute);
171 } else /* if (value == QLatin1String("open"))*/ {
172 m_confirmScriptExecution->setCurrentIndex(ScriptExecution::Open);
173 }
174
175 m_confirmClosingMultipleTabs->setChecked(GeneralSettings::confirmClosingMultipleTabs());
176
177 // KMessageBox for its dontshowAgain settings are true => Yes, false => No, No value => ask
178 // we use default = false to not write false into the rc file, but have no value
179 // the UI has inversed meaning compared to the interpretation
180 m_confirmOpenManyFolders->setChecked(GeneralSettings::confirmOpenManyFolders());
181 m_confirmOpenManyTerminals->setChecked(GeneralSettings::confirmOpenManyTerminals());
182
183 #if HAVE_TERMINAL
184 m_confirmClosingTerminalRunningProgram->setChecked(GeneralSettings::confirmClosingTerminalRunningProgram());
185 #endif
186 }
187
188 #include "moc_confirmationssettingspage.cpp"