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"