File indexing completed on 2023-05-30 10:42:09

0001 /*
0002     This file is part of Kiten, a KDE Japanese Reference Tool...
0003     SPDX-FileCopyrightText: 2001 Jason Katz-Brown <jason@katzbrown.com>
0004     SPDX-FileCopyrightText: 2005 Paul Temple <paul.temple@gmx.net>
0005     SPDX-FileCopyrightText: 2006 Joseph Kerian <jkerian@gmail.com>
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #include "configuredialog.h"
0011 
0012 #include <KLocalizedString>
0013 
0014 #include <QString>
0015 #include <QStringList>
0016 #include <QTabWidget>
0017 #include <QWidget>
0018 
0019 #include "kitenconfig.h"
0020 
0021 // Generated from UI files
0022 #include "ui_configfont.h"
0023 #include "ui_configlearn.h"
0024 #include "ui_configsearching.h"
0025 
0026 // Our template for managing individual dict type's settings
0027 #include "dictionarypreferencedialog.h"
0028 // The dictionary file selector widget
0029 #include "configdictionaryselector.h"
0030 // The sorting selection widget
0031 #include "configsortingpage.h"
0032 // To get the list of dictionary Types and to interface with dictType objects
0033 #include "dictionarymanager.h"
0034 
0035 ConfigureDialog::ConfigureDialog(QWidget *parent, KitenConfigSkeleton *config)
0036     : KConfigDialog(parent, QStringLiteral("Settings"), config)
0037 {
0038     // TODO: Figure out why these pages are unmanaged... is this needed?
0039     addPage(makeDictionaryFileSelectionPage(NULL, config), i18n("Dictionaries"), QStringLiteral("help-contents"));
0040 
0041     QWidget *widget;
0042     widget = new QWidget();
0043     Ui::ConfigSearching cs;
0044     cs.setupUi(widget);
0045     addPage(widget, i18n("Searching"), QStringLiteral("edit-find"));
0046 
0047     widget = new QWidget();
0048     Ui::ConfigLearn cl;
0049     cl.setupUi(widget);
0050     addPage(widget, i18n("Learn"), QStringLiteral("draw-freehand"));
0051 
0052     widget = new QWidget();
0053     Ui::ConfigFont cf;
0054     cf.setupUi(widget);
0055     addPage(widget, i18n("Font"), QStringLiteral("preferences-desktop-font"));
0056 
0057     addPage(makeDictionaryPreferencesPage(NULL, config),
0058             i18nc("@title:group the settings for the dictionary display", "Display"),
0059             QStringLiteral("format-indent-more"));
0060     addPage(makeSortingPage(NULL, config), i18n("Results Sorting"), QStringLiteral("format-indent-more"));
0061 
0062     setHelp(QString(), QStringLiteral("kiten"));
0063 
0064     connect(this, &KConfigDialog::widgetModified, this, &ConfigureDialog::updateConfiguration);
0065 }
0066 
0067 void ConfigureDialog::updateConfiguration()
0068 {
0069     Q_EMIT settingsChanged(QString());
0070 }
0071 
0072 ConfigureDialog::~ConfigureDialog()
0073 {
0074 }
0075 
0076 QWidget *ConfigureDialog::makeDictionaryFileSelectionPage(QWidget *parent, KitenConfigSkeleton *config)
0077 {
0078     QTabWidget *tabWidget = new QTabWidget(parent);
0079 
0080     foreach (const QString &dict, config->dictionary_list()) {
0081         QWidget *newTab = new ConfigDictionarySelector(dict, tabWidget, config);
0082         if (newTab) {
0083             connect(newTab, SIGNAL(widgetChanged()), this, SIGNAL(widgetModified()));
0084             connect(this, SIGNAL(updateWidgetsSignal()), newTab, SLOT(updateWidgets()));
0085             connect(this, SIGNAL(updateWidgetsDefaultSignal()), newTab, SLOT(updateWidgetsDefault()));
0086             connect(this, SIGNAL(updateSettingsSignal()), newTab, SLOT(updateSettings()));
0087             tabWidget->addTab(newTab, dict);
0088         }
0089     }
0090 
0091     return tabWidget;
0092 }
0093 
0094 QWidget *ConfigureDialog::makeDictionaryPreferencesPage(QWidget *parent, KitenConfigSkeleton *config)
0095 {
0096     QStringList dictTypes = DictionaryManager::listDictFileTypes();
0097 
0098     QTabWidget *tabWidget = new QTabWidget(parent);
0099 
0100     QMap<QString, DictionaryPreferenceDialog *> dialogList = DictionaryManager::generatePreferenceDialogs(config, parent);
0101 
0102     foreach (DictionaryPreferenceDialog *dialog, dialogList) {
0103         connect(this, &ConfigureDialog::updateWidgetsSignal, dialog, &DictionaryPreferenceDialog::updateWidgets);
0104         connect(this, &ConfigureDialog::updateWidgetsDefaultSignal, dialog, &DictionaryPreferenceDialog::updateWidgetsDefault);
0105         connect(this, &ConfigureDialog::updateSettingsSignal, dialog, &DictionaryPreferenceDialog::updateSettings);
0106 
0107         tabWidget->addTab(dialog, dialog->name());
0108     }
0109 
0110     return tabWidget;
0111 }
0112 
0113 QWidget *ConfigureDialog::makeSortingPage(QWidget *parent, KitenConfigSkeleton *config)
0114 {
0115     ConfigSortingPage *newPage = new ConfigSortingPage(parent, config);
0116 
0117     connect(newPage, &ConfigSortingPage::widgetChanged, this, &KConfigDialog::widgetModified);
0118 
0119     connect(this, &ConfigureDialog::updateWidgetsSignal, newPage, &ConfigSortingPage::updateWidgets);
0120     connect(this, &ConfigureDialog::updateWidgetsDefaultSignal, newPage, &ConfigSortingPage::updateWidgetsDefault);
0121     connect(this, &ConfigureDialog::updateSettingsSignal, newPage, &ConfigSortingPage::updateSettings);
0122 
0123     return newPage;
0124 }
0125 
0126 void ConfigureDialog::updateWidgets()
0127 {
0128     Q_EMIT updateWidgetsSignal();
0129 }
0130 
0131 void ConfigureDialog::updateWidgetsDefault()
0132 {
0133     Q_EMIT updateWidgetsDefaultSignal();
0134 }
0135 
0136 void ConfigureDialog::updateSettings()
0137 {
0138     Q_EMIT updateSettingsSignal();
0139 }
0140 
0141 bool ConfigureDialog::isDefault()
0142 {
0143     return false;
0144     // Always show the defaults button.... perhaps make a workaround later
0145 }