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"