File indexing completed on 2024-04-21 03:42:00
0001 /* 0002 This file is part of Kiten, a KDE Japanese Reference Tool 0003 SPDX-FileCopyrightText: 2006 Joseph Kerian <jkerian@gmail.com> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "dictfilefieldselector.h" 0009 0010 #include <KActionSelector> 0011 #include <KConfigSkeleton> 0012 #include <KLocalizedString> 0013 0014 #include <QListWidget> 0015 #include <QString> 0016 #include <QVBoxLayout> 0017 0018 using namespace Qt::StringLiterals; 0019 0020 DictFileFieldSelector::DictFileFieldSelector(KConfigSkeleton *config, const QString &dictionaryTypeName, QWidget *parent) 0021 : DictionaryPreferenceDialog(parent, dictionaryTypeName) 0022 , m_dictName(dictionaryTypeName) 0023 { 0024 auto newTabLayout = new QVBoxLayout(); 0025 0026 // Make selection box 0027 m_listView = new KActionSelector(); 0028 m_listView->setAvailableLabel(i18n("&Available Fields:")); 0029 newTabLayout->addWidget(m_listView); 0030 0031 // Add layout to our widget 0032 this->setLayout(newTabLayout); 0033 0034 // Create Default List 0035 m_completeList.append(QStringLiteral("--NewLine--")); 0036 m_completeList.append(QStringLiteral("--NewLine--")); 0037 m_completeList.append(QStringLiteral("--NewLine--")); 0038 m_completeList.append(QStringLiteral("Word/Kanji")); 0039 m_completeList.append(QStringLiteral("Reading")); 0040 m_completeList.append(QStringLiteral("Meaning")); 0041 0042 // Make connections 0043 connect(m_listView, &KActionSelector::added, this, &DictFileFieldSelector::settingChanged); 0044 connect(m_listView, &KActionSelector::removed, this, &DictFileFieldSelector::settingChanged); 0045 connect(m_listView, &KActionSelector::movedUp, this, &DictFileFieldSelector::settingChanged); 0046 connect(m_listView, &KActionSelector::movedDown, this, &DictFileFieldSelector::settingChanged); 0047 0048 m_config = config; 0049 updateWidgets(); 0050 } 0051 0052 void DictFileFieldSelector::addAvailable(const QStringList &list) 0053 { 0054 m_completeList += list; 0055 updateWidgets(); 0056 } 0057 0058 void DictFileFieldSelector::readFromPrefs() 0059 { 0060 QStringList selectedList; 0061 0062 m_config->setCurrentGroup("dicts_"_L1 + m_dictName); 0063 0064 QStringList actionList = m_completeList; 0065 QString itemName = m_dictName + "__displayFields"_L1; 0066 KConfigSkeletonItem *item = m_config->findItem(itemName); 0067 if (item != nullptr) { 0068 selectedList = item->property().toStringList(); 0069 } else { 0070 // it's not currently in the preferences list 0071 m_config->addItem(new KConfigSkeleton::ItemStringList("dicts_"_L1 + m_dictName, itemName, *new QStringList()), itemName); 0072 m_config->load(); 0073 selectedList = m_config->findItem(itemName)->property().toStringList(); 0074 } 0075 0076 for (const QString &it : selectedList) { 0077 actionList.removeAt(actionList.indexOf(it)); // don't just use remove()... will remove all 0078 } 0079 0080 m_listView->availableListWidget()->clear(); 0081 m_listView->selectedListWidget()->clear(); 0082 m_listView->availableListWidget()->addItems(actionList); 0083 m_listView->selectedListWidget()->addItems(selectedList); 0084 } 0085 0086 void DictFileFieldSelector::setAvailable(const QStringList &list) 0087 { 0088 m_completeList = list; 0089 updateWidgets(); 0090 } 0091 0092 void DictFileFieldSelector::setDefaultList(const QStringList &list) 0093 { 0094 m_defaultList = list; 0095 } 0096 0097 void DictFileFieldSelector::settingChanged() 0098 { 0099 Q_EMIT widgetChanged(); 0100 } 0101 0102 void DictFileFieldSelector::updateSettings() 0103 { 0104 writeToPrefs(); 0105 } 0106 0107 void DictFileFieldSelector::updateWidgets() 0108 { 0109 readFromPrefs(); 0110 } 0111 0112 void DictFileFieldSelector::updateWidgetsDefault() 0113 { 0114 } 0115 0116 void DictFileFieldSelector::writeToPrefs() 0117 { 0118 m_config->setCurrentGroup("dicts_"_L1 + m_dictName); 0119 QStringList theList; 0120 KConfigSkeletonItem *item; 0121 QString itemName; 0122 0123 for (int i = 0; i < m_listView->selectedListWidget()->count(); i++) { 0124 theList.append(m_listView->selectedListWidget()->item(i)->text()); 0125 } 0126 0127 itemName = m_dictName + "__displayFields"_L1; 0128 item = m_config->findItem(itemName); 0129 if (!item) { 0130 item = new KConfigSkeleton::ItemStringList("dicts_"_L1 + m_dictName, itemName, *new QStringList()); 0131 m_config->addItem(item, itemName); 0132 } 0133 item->setProperty(theList); 0134 0135 m_config->save(); 0136 } 0137 0138 #include "moc_dictfilefieldselector.cpp"