File indexing completed on 2024-04-28 04:21:19
0001 // SPDX-FileCopyrightText: 2003-2022 The KPhotoAlbum Development Team 0002 // 0003 // SPDX-License-Identifier: GPL-2.0-or-later 0004 0005 #include "SettingsDialog.h" 0006 0007 #include "BirthdayPage.h" 0008 #include "CategoryPage.h" 0009 #include "DatabaseBackendPage.h" 0010 #include "ExifPage.h" 0011 #include "FileVersionDetectionPage.h" 0012 #include "GeneralPage.h" 0013 #include "TagGroupsPage.h" 0014 #include "ThumbnailsPage.h" 0015 #include "ViewerPage.h" 0016 0017 #include <Utilities/ShowBusyCursor.h> 0018 0019 #include <KLocalizedString> 0020 #include <KSharedConfig> 0021 #include <QDialogButtonBox> 0022 #include <QPushButton> 0023 #include <QVBoxLayout> 0024 0025 struct Data { 0026 Settings::SettingsPage page; 0027 QString title; 0028 const char *icon; 0029 QWidget *widget; 0030 }; 0031 0032 Settings::SettingsDialog::SettingsDialog(QWidget *parent) 0033 : KPageDialog(parent) 0034 { 0035 m_generalPage = new Settings::GeneralPage(this); 0036 m_fileVersionDetectionPage = new Settings::FileVersionDetectionPage(this); 0037 m_thumbnailsPage = new Settings::ThumbnailsPage(this); 0038 m_categoryPage = new Settings::CategoryPage(this); 0039 m_tagGroupsPage = new Settings::TagGroupsPage(this); 0040 m_viewerPage = new Settings::ViewerPage(this); 0041 m_exifPage = new Settings::ExifPage(this); 0042 m_birthdayPage = new Settings::BirthdayPage(this); 0043 m_databaseBackendPage = new Settings::DatabaseBackendPage(this); 0044 0045 Data data[] = { 0046 { SettingsPage::GeneralPage, i18n("General"), "configure-shortcuts", m_generalPage }, 0047 { SettingsPage::FileVersionDetectionPage, i18n("File Searching & Versions"), "system-search", m_fileVersionDetectionPage }, 0048 { SettingsPage::ThumbnailsPage, i18n("Thumbnail View"), "view-preview", m_thumbnailsPage }, 0049 { SettingsPage::CategoryPage, i18n("Categories"), "edit-group", m_categoryPage }, 0050 { SettingsPage::BirthdayPage, i18n("Birthdays"), "view-calendar-birthday", m_birthdayPage }, 0051 { SettingsPage::TagGroupsPage, i18n("Tag Groups"), "view-group", m_tagGroupsPage }, 0052 { SettingsPage::ViewerPage, i18n("Viewer"), "document-preview", m_viewerPage }, 0053 { SettingsPage::ExifPage, i18n("Exif/IPTC Information"), "document-properties", m_exifPage }, 0054 { SettingsPage::DatabaseBackendPage, i18n("Database Backend"), "document-save", m_databaseBackendPage }, 0055 { SettingsPage::GeneralPage, QString(), "", nullptr } 0056 }; 0057 0058 int i = 0; 0059 while (data[i].widget) { 0060 KPageWidgetItem *page = new KPageWidgetItem(data[i].widget, data[i].title); 0061 page->setHeader(data[i].title); 0062 page->setIcon(QIcon::fromTheme(QString::fromLatin1(data[i].icon))); 0063 addPage(page); 0064 m_pages[data[i].page] = page; 0065 ++i; 0066 } 0067 0068 setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Apply); 0069 button(QDialogButtonBox::Ok)->setShortcut(Qt::CTRL | Qt::Key_Return); 0070 connect(this, &QDialog::accepted, this, &SettingsDialog::slotMyOK); 0071 connect(button(QDialogButtonBox::Apply), &QPushButton::clicked, this, &SettingsDialog::slotMyOK); 0072 connect(this, &QDialog::rejected, m_birthdayPage, &Settings::BirthdayPage::discardChanges); 0073 0074 setWindowTitle(i18nc("@title:window", "Settings")); 0075 0076 connect(m_categoryPage, &Settings::CategoryPage::categoryChangesPending, m_tagGroupsPage, &Settings::TagGroupsPage::categoryChangesPending); 0077 connect(this, &SettingsDialog::currentPageChanged, m_tagGroupsPage, &Settings::TagGroupsPage::slotPageChange); 0078 connect(this, &SettingsDialog::currentPageChanged, m_birthdayPage, &Settings::BirthdayPage::pageChange); 0079 0080 connect(this, &SettingsDialog::rejected, m_categoryPage, &Settings::CategoryPage::resetCategoryLabel); 0081 } 0082 0083 void Settings::SettingsDialog::show() 0084 { 0085 Settings::SettingsData *opt = Settings::SettingsData::instance(); 0086 0087 m_generalPage->loadSettings(opt); 0088 m_fileVersionDetectionPage->loadSettings(opt); 0089 m_thumbnailsPage->loadSettings(opt); 0090 m_tagGroupsPage->loadSettings(); 0091 m_databaseBackendPage->loadSettings(opt); 0092 m_viewerPage->loadSettings(opt); 0093 m_categoryPage->loadSettings(opt); 0094 m_exifPage->loadSettings(opt); 0095 m_categoryPage->enableDisable(false); 0096 m_birthdayPage->reload(); 0097 m_categoryPage->resetCategoryNamesChanged(); 0098 0099 QDialog::show(); 0100 } 0101 0102 void Settings::SettingsDialog::activatePage(Settings::SettingsPage pageId) 0103 { 0104 auto page = m_pages.value(pageId, nullptr); 0105 if (page) 0106 setCurrentPage(page); 0107 } 0108 0109 // QDialog has a slotOK which we do not want to override. 0110 void Settings::SettingsDialog::slotMyOK() 0111 { 0112 Utilities::ShowBusyCursor dummy; 0113 Settings::SettingsData *opt = Settings::SettingsData::instance(); 0114 0115 m_categoryPage->resetInterface(); 0116 m_generalPage->saveSettings(opt); 0117 m_fileVersionDetectionPage->saveSettings(opt); 0118 m_thumbnailsPage->saveSettings(opt); 0119 m_birthdayPage->saveSettings(); 0120 m_tagGroupsPage->saveSettings(); 0121 m_categoryPage->saveSettings(opt, m_tagGroupsPage->memberMap()); 0122 m_viewerPage->saveSettings(opt); 0123 m_exifPage->saveSettings(opt); 0124 m_databaseBackendPage->saveSettings(opt); 0125 0126 Q_EMIT changed(); 0127 KSharedConfig::openConfig()->sync(); 0128 } 0129 0130 void Settings::SettingsDialog::keyPressEvent(QKeyEvent *) 0131 { 0132 // This prevents the dialog to be closed if the ENTER key is pressed anywhere 0133 } 0134 0135 // vi:expandtab:tabstop=4 shiftwidth=4: 0136 0137 #include "moc_SettingsDialog.cpp"