]> cloud.milkyroute.net Git - dolphin.git/blob - src/settings/dolphinsettingsdialog.cpp
Exclude trash settings from windows
[dolphin.git] / src / settings / dolphinsettingsdialog.cpp
1 /*
2 * SPDX-FileCopyrightText: 2006 Peter Penz <peter.penz@gmx.at>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "dolphinsettingsdialog.h"
8
9 #include "dolphin_generalsettings.h"
10 #include "dolphinmainwindow.h"
11 #include "general/generalsettingspage.h"
12 #include "navigation/navigationsettingspage.h"
13 #include "services/servicessettingspage.h"
14 #include "startup/startupsettingspage.h"
15 #include "trash/trashsettingspage.h"
16 #include "viewmodes/viewsettingspage.h"
17
18 #include <KAuthorized>
19 #include <KLocalizedString>
20 #include <KWindowConfig>
21 #include <KMessageBox>
22
23 #include <QCloseEvent>
24 #include <QPushButton>
25
26 DolphinSettingsDialog::DolphinSettingsDialog(const QUrl& url, QWidget* parent) :
27 KPageDialog(parent),
28 m_pages(),
29 m_unsavedChanges(false)
30
31 {
32 const QSize minSize = minimumSize();
33 setMinimumSize(QSize(540, minSize.height()));
34
35 setFaceType(List);
36 setWindowTitle(i18nc("@title:window", "Dolphin Preferences"));
37 QDialogButtonBox* box = new QDialogButtonBox(QDialogButtonBox::Ok
38 | QDialogButtonBox::Apply | QDialogButtonBox::Cancel | QDialogButtonBox::RestoreDefaults);
39 box->button(QDialogButtonBox::Apply)->setEnabled(false);
40 box->button(QDialogButtonBox::Ok)->setDefault(true);
41 setButtonBox(box);
42
43 connect(box->button(QDialogButtonBox::Ok), &QAbstractButton::clicked, this, &DolphinSettingsDialog::applySettings);
44 connect(box->button(QDialogButtonBox::Apply), &QAbstractButton::clicked, this, &DolphinSettingsDialog::applySettings);
45 connect(box->button(QDialogButtonBox::RestoreDefaults), &QAbstractButton::clicked, this, &DolphinSettingsDialog::restoreDefaults);
46
47 // General
48 GeneralSettingsPage* generalSettingsPage = new GeneralSettingsPage(url, this);
49 KPageWidgetItem* generalSettingsFrame = addPage(generalSettingsPage,
50 i18nc("@title:group General settings", "General"));
51 generalSettingsFrame->setIcon(QIcon::fromTheme(QStringLiteral("system-file-manager")));
52 connect(generalSettingsPage, &GeneralSettingsPage::changed, this, &DolphinSettingsDialog::enableApply);
53
54 // Startup
55 StartupSettingsPage* startupSettingsPage = new StartupSettingsPage(url, this);
56 KPageWidgetItem* startupSettingsFrame = addPage(startupSettingsPage,
57 i18nc("@title:group", "Startup"));
58 startupSettingsFrame->setIcon(QIcon::fromTheme(QStringLiteral("preferences-desktop-launch-feedback")));
59 connect(startupSettingsPage, &StartupSettingsPage::changed, this, &DolphinSettingsDialog::enableApply);
60
61 // View Modes
62 ViewSettingsPage* viewSettingsPage = new ViewSettingsPage(this);
63 KPageWidgetItem* viewSettingsFrame = addPage(viewSettingsPage,
64 i18nc("@title:group", "View Modes"));
65 viewSettingsFrame->setIcon(QIcon::fromTheme(QStringLiteral("preferences-desktop-icons")));
66 connect(viewSettingsPage, &ViewSettingsPage::changed, this, &DolphinSettingsDialog::enableApply);
67
68 // Navigation
69 NavigationSettingsPage* navigationSettingsPage = new NavigationSettingsPage(this);
70 KPageWidgetItem* navigationSettingsFrame = addPage(navigationSettingsPage,
71 i18nc("@title:group", "Navigation"));
72 navigationSettingsFrame->setIcon(QIcon::fromTheme(QStringLiteral("preferences-desktop-navigation")));
73 connect(navigationSettingsPage, &NavigationSettingsPage::changed, this, &DolphinSettingsDialog::enableApply);
74
75 // Services
76 ServicesSettingsPage* servicesSettingsPage = new ServicesSettingsPage(this);
77 KPageWidgetItem* servicesSettingsFrame = addPage(servicesSettingsPage,
78 i18nc("@title:group", "Services"));
79 servicesSettingsFrame->setIcon(QIcon::fromTheme(QStringLiteral("preferences-system-services")));
80 connect(servicesSettingsPage, &ServicesSettingsPage::changed, this, &DolphinSettingsDialog::enableApply);
81
82 // Trash
83 SettingsPageBase* trashSettingsPage = nullptr;
84 #ifndef Q_OS_WIN
85 trashSettingsPage = createTrashSettingsPage(this);
86 #endif
87 if (trashSettingsPage) {
88 KPageWidgetItem* trashSettingsFrame = addPage(trashSettingsPage,
89 i18nc("@title:group", "Trash"));
90 trashSettingsFrame->setIcon(QIcon::fromTheme(QStringLiteral("user-trash")));
91 connect(trashSettingsPage, &TrashSettingsPage::changed, this, &DolphinSettingsDialog::enableApply);
92 }
93
94 m_pages.append(generalSettingsPage);
95 m_pages.append(startupSettingsPage);
96 m_pages.append(viewSettingsPage);
97 m_pages.append(navigationSettingsPage);
98 m_pages.append(servicesSettingsPage);
99 if (trashSettingsPage) {
100 m_pages.append(trashSettingsPage);
101 }
102
103 const KConfigGroup dialogConfig(KSharedConfig::openConfig(QStringLiteral("dolphinrc")), "SettingsDialog");
104 KWindowConfig::restoreWindowSize(windowHandle(), dialogConfig);
105 }
106
107 DolphinSettingsDialog::~DolphinSettingsDialog()
108 {
109 KConfigGroup dialogConfig(KSharedConfig::openConfig(QStringLiteral("dolphinrc")), "SettingsDialog");
110 KWindowConfig::saveWindowSize(windowHandle(), dialogConfig);
111 }
112
113 void DolphinSettingsDialog::enableApply()
114 {
115 buttonBox()->button(QDialogButtonBox::Apply)->setEnabled(true);
116 m_unsavedChanges = true;
117 }
118
119 void DolphinSettingsDialog::applySettings()
120 {
121 foreach (SettingsPageBase* page, m_pages) {
122 page->applySettings();
123 }
124
125 emit settingsChanged();
126
127 GeneralSettings* settings = GeneralSettings::self();
128 if (settings->modifiedStartupSettings()) {
129 // Reset the modified startup settings hint. The changed startup settings
130 // have been applied already due to emitting settingsChanged().
131 settings->setModifiedStartupSettings(false);
132 settings->save();
133 }
134 buttonBox()->button(QDialogButtonBox::Apply)->setEnabled(false);
135 m_unsavedChanges = false;
136 }
137
138 void DolphinSettingsDialog::restoreDefaults()
139 {
140 foreach (SettingsPageBase* page, m_pages) {
141 page->restoreDefaults();
142 }
143 }
144
145 void DolphinSettingsDialog::closeEvent(QCloseEvent* event)
146 {
147 if (!m_unsavedChanges) {
148 event->accept();
149 return;
150 }
151
152 const auto response = KMessageBox::warningYesNoCancel(this,
153 i18n("You have unsaved changes. Do you want to apply the changes or discard them?"),
154 i18n("Warning"),
155 KStandardGuiItem::save(),
156 KStandardGuiItem::discard(),
157 KStandardGuiItem::cancel());
158 switch (response) {
159 case KMessageBox::Yes:
160 applySettings();
161 Q_FALLTHROUGH();
162 case KMessageBox::No:
163 event->accept();
164 break;
165 case KMessageBox::Cancel:
166 event->ignore();
167 break;
168 default:
169 break;
170 }
171 }
172
173
174 SettingsPageBase *DolphinSettingsDialog::createTrashSettingsPage(QWidget *parent)
175 {
176 if (!KAuthorized::authorizeControlModule(QStringLiteral("kcmtrash.desktop"))) {
177 return nullptr;
178 }
179
180 return new TrashSettingsPage(parent);
181 }