File indexing completed on 2023-09-24 03:52:53

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(nullptr, 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(nullptr, config),
0058             i18nc("@title:group the settings for the dictionary display", "Display"),
0059             QStringLiteral("format-indent-more"));
0060     addPage(makeSortingPage(nullptr, 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 QWidget *ConfigureDialog::makeDictionaryFileSelectionPage(QWidget *parent, KitenConfigSkeleton *config)
0073 {
0074     auto tabWidget = new QTabWidget(parent);
0075 
0076     for (const QString &dict : config->dictionary_list()) {
0077         QWidget *newTab = new ConfigDictionarySelector(dict, tabWidget, config);
0078         if (newTab) {
0079             connect(newTab, SIGNAL(widgetChanged()), this, SIGNAL(widgetModified()));
0080             connect(this, SIGNAL(updateWidgetsSignal()), newTab, SLOT(updateWidgets()));
0081             connect(this, SIGNAL(updateWidgetsDefaultSignal()), newTab, SLOT(updateWidgetsDefault()));
0082             connect(this, SIGNAL(updateSettingsSignal()), newTab, SLOT(updateSettings()));
0083             tabWidget->addTab(newTab, dict);
0084         }
0085     }
0086 
0087     return tabWidget;
0088 }
0089 
0090 QWidget *ConfigureDialog::makeDictionaryPreferencesPage(QWidget *parent, KitenConfigSkeleton *config)
0091 {
0092     QStringList dictTypes = DictionaryManager::listDictFileTypes();
0093 
0094     auto tabWidget = new QTabWidget(parent);
0095 
0096     QMap<QString, DictionaryPreferenceDialog *> dialogList = DictionaryManager::generatePreferenceDialogs(config, parent);
0097 
0098     for (DictionaryPreferenceDialog *dialog : dialogList) {
0099         connect(this, &ConfigureDialog::updateWidgetsSignal, dialog, &DictionaryPreferenceDialog::updateWidgets);
0100         connect(this, &ConfigureDialog::updateWidgetsDefaultSignal, dialog, &DictionaryPreferenceDialog::updateWidgetsDefault);
0101         connect(this, &ConfigureDialog::updateSettingsSignal, dialog, &DictionaryPreferenceDialog::updateSettings);
0102 
0103         tabWidget->addTab(dialog, dialog->name());
0104     }
0105 
0106     return tabWidget;
0107 }
0108 
0109 QWidget *ConfigureDialog::makeSortingPage(QWidget *parent, KitenConfigSkeleton *config)
0110 {
0111     auto newPage = new ConfigSortingPage(parent, config);
0112 
0113     connect(newPage, &ConfigSortingPage::widgetChanged, this, &KConfigDialog::widgetModified);
0114 
0115     connect(this, &ConfigureDialog::updateWidgetsSignal, newPage, &ConfigSortingPage::updateWidgets);
0116     connect(this, &ConfigureDialog::updateWidgetsDefaultSignal, newPage, &ConfigSortingPage::updateWidgetsDefault);
0117     connect(this, &ConfigureDialog::updateSettingsSignal, newPage, &ConfigSortingPage::updateSettings);
0118 
0119     return newPage;
0120 }
0121 
0122 void ConfigureDialog::updateWidgets()
0123 {
0124     Q_EMIT updateWidgetsSignal();
0125 }
0126 
0127 void ConfigureDialog::updateWidgetsDefault()
0128 {
0129     Q_EMIT updateWidgetsDefaultSignal();
0130 }
0131 
0132 void ConfigureDialog::updateSettings()
0133 {
0134     Q_EMIT updateSettingsSignal();
0135 }
0136 
0137 bool ConfigureDialog::isDefault()
0138 {
0139     return false;
0140     // Always show the defaults button.... perhaps make a workaround later
0141 }
0142 
0143 #include "moc_configuredialog.cpp"