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"