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"