File indexing completed on 2024-04-21 03:51:09

0001 /*
0002     SPDX-FileCopyrightText: 2007-2010 Frederik Gladhorn <gladhorn@kde.org>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "conjugationoptions.h"
0007 
0008 #include "documentsettings.h"
0009 #include "languagesettings.h"
0010 #include "prefs.h"
0011 
0012 #include <KEduVocDocument>
0013 
0014 #include <KLocalizedString>
0015 #include <QLabel>
0016 #include <QStackedLayout>
0017 #include <QTreeWidget>
0018 
0019 ConjugationOptions::ConjugationOptions(KEduVocDocument *doc, QWidget *parent)
0020     : QWidget(parent)
0021     , m_doc(doc)
0022 {
0023     m_treeWidget = new QTreeWidget(this);
0024     m_treeWidget->setHeaderLabel(i18n("Tenses"));
0025     m_treeWidget->setRootIsDecorated(false);
0026     QHBoxLayout *layout = new QHBoxLayout(this);
0027     layout->addWidget(m_treeWidget);
0028     layout->setContentsMargins(0, 0, 0, 0);
0029     setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
0030     connect(m_treeWidget, &QTreeWidget::itemChanged, this, &ConjugationOptions::processCheckBoxChanged);
0031 }
0032 
0033 void ConjugationOptions::setLanguages(int from, int to)
0034 {
0035     Q_UNUSED(from)
0036     if (to >= m_doc->identifierCount()) {
0037         to = 0;
0038     }
0039     m_language = to;
0040     setupTenses();
0041 }
0042 
0043 void ConjugationOptions::setupTenses()
0044 {
0045     m_treeWidget->blockSignals(true);
0046     m_treeWidget->clear();
0047     m_checkStates.clear();
0048 
0049     DocumentSettings documentSettings(m_doc->url().url() + QString::number(m_language));
0050     documentSettings.load();
0051     QStringList activeTenses = documentSettings.conjugationTenses();
0052     qDebug() << "activeTenses:" << activeTenses << " id tenses: " << m_doc->identifier(m_language).tenseList();
0053     QTreeWidgetItem *tenseItem;
0054 
0055     const QStringList tenses = m_doc->identifier(m_language).tenseList();
0056     for (const QString &tenseName : tenses) {
0057         tenseItem = new QTreeWidgetItem(m_treeWidget);
0058         tenseItem->setText(0, tenseName);
0059         if (activeTenses.contains(tenseName)) {
0060             tenseItem->setCheckState(0, Qt::Checked);
0061             m_checkStates[tenseItem] = Qt::Checked;
0062         } else {
0063             tenseItem->setCheckState(0, Qt::Unchecked);
0064             m_checkStates[tenseItem] = Qt::Unchecked;
0065         }
0066         tenseItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable);
0067         m_treeWidget->addTopLevelItem(tenseItem);
0068     }
0069     m_treeWidget->blockSignals(false);
0070 }
0071 
0072 void ConjugationOptions::updateSettings()
0073 {
0074     qDebug() << "Save language selection";
0075     QTreeWidgetItem *parentItem = m_treeWidget->invisibleRootItem();
0076     if (parentItem == nullptr) {
0077         return;
0078     }
0079     QStringList activeTenses;
0080     for (int i = 0; i < parentItem->childCount(); i++) {
0081         QTreeWidgetItem *tenseItem = parentItem->child(i);
0082         if (tenseItem->checkState(0) == Qt::Checked) {
0083             activeTenses.append(tenseItem->text(0));
0084         }
0085     }
0086     DocumentSettings documentSettings(m_doc->url().url() + QString::number(m_language));
0087     documentSettings.setConjugationTenses(activeTenses);
0088     documentSettings.save();
0089 }
0090 
0091 void ConjugationOptions::processCheckBoxChanged(QTreeWidgetItem *item, int column)
0092 {
0093     if (column != 0) {
0094         return;
0095     }
0096     Qt::CheckState newCheckState = item->checkState(column);
0097     if (m_checkStates.contains(item) && (m_checkStates[item] != newCheckState)) {
0098         m_checkStates[item] = newCheckState;
0099         updateSettings();
0100         Q_EMIT checkBoxChanged();
0101     }
0102 }
0103 
0104 #include "moc_conjugationoptions.cpp"