Changeset View
Changeset View
Standalone View
Standalone View
src/statistics/conjugationoptions.cpp
Show All 19 Lines | |||||
20 | #include <keduvocdocument.h> | 20 | #include <keduvocdocument.h> | ||
21 | 21 | | |||
22 | #include <KLocalizedString> | 22 | #include <KLocalizedString> | ||
23 | #include <QStackedLayout> | 23 | #include <QStackedLayout> | ||
24 | #include <QLabel> | 24 | #include <QLabel> | ||
25 | #include <QtDBus> | 25 | #include <QtDBus> | ||
26 | #include <QTreeWidget> | 26 | #include <QTreeWidget> | ||
27 | 27 | | |||
28 | ConjugationOptions::ConjugationOptions(KEduVocDocument* doc, QWidget * parent) | 28 | ConjugationOptions::ConjugationOptions(KEduVocDocument *doc, QWidget *parent) | ||
29 | : QWidget(parent) | 29 | : QWidget(parent) | ||
30 | , m_doc(doc) | 30 | , m_doc(doc) | ||
31 | , m_language(0) | 31 | , m_language(0) | ||
32 | { | 32 | { | ||
33 | m_treeWidget = new QTreeWidget(this); | 33 | m_treeWidget = new QTreeWidget(this); | ||
34 | m_treeWidget->setHeaderLabel(i18n("Tenses")); | 34 | m_treeWidget->setHeaderLabel(i18n("Tenses")); | ||
35 | m_treeWidget->setRootIsDecorated(false); | 35 | m_treeWidget->setRootIsDecorated(false); | ||
36 | QHBoxLayout* layout = new QHBoxLayout(this); | 36 | QHBoxLayout* layout = new QHBoxLayout(this); | ||
37 | layout->addWidget(m_treeWidget); | 37 | layout->addWidget(m_treeWidget); | ||
38 | layout->setMargin(0); | 38 | layout->setMargin(0); | ||
39 | setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); | 39 | setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); | ||
40 | connect(m_treeWidget, &QTreeWidget::itemChanged, | ||||
41 | this, &ConjugationOptions::processCheckBoxChanged); | ||||
40 | } | 42 | } | ||
41 | 43 | | |||
42 | void ConjugationOptions::setLanguages(int from, int to) | 44 | void ConjugationOptions::setLanguages(int from, int to) | ||
43 | { | 45 | { | ||
44 | Q_UNUSED(from) | 46 | Q_UNUSED(from) | ||
45 | if (to >= m_doc->identifierCount()) { | 47 | if (to >= m_doc->identifierCount()) { | ||
46 | to = 0; | 48 | to = 0; | ||
47 | } | 49 | } | ||
48 | m_language = to; | 50 | m_language = to; | ||
49 | setupTenses(); | 51 | setupTenses(); | ||
50 | } | 52 | } | ||
51 | 53 | | |||
52 | void ConjugationOptions::setupTenses() | 54 | void ConjugationOptions::setupTenses() | ||
53 | { | 55 | { | ||
56 | m_treeWidget->blockSignals(true); | ||||
54 | m_treeWidget->clear(); | 57 | m_treeWidget->clear(); | ||
58 | m_checkStates.clear(); | ||||
55 | 59 | | |||
56 | DocumentSettings documentSettings(m_doc->url().url() + QString::number(m_language)); | 60 | DocumentSettings documentSettings(m_doc->url().url() + QString::number(m_language)); | ||
57 | documentSettings.load(); | 61 | documentSettings.load(); | ||
58 | QStringList activeTenses = documentSettings.conjugationTenses(); | 62 | QStringList activeTenses = documentSettings.conjugationTenses(); | ||
59 | qDebug() << "activeTenses:" << activeTenses << " id tenses: " << m_doc->identifier(m_language).tenseList(); | 63 | qDebug() << "activeTenses:" << activeTenses << " id tenses: " << m_doc->identifier(m_language).tenseList(); | ||
60 | QTreeWidgetItem* tenseItem; | 64 | QTreeWidgetItem* tenseItem; | ||
61 | 65 | | |||
62 | foreach(const QString & tenseName, m_doc->identifier(m_language).tenseList()) { | 66 | foreach(const QString & tenseName, m_doc->identifier(m_language).tenseList()) { | ||
63 | tenseItem = new QTreeWidgetItem(m_treeWidget); | 67 | tenseItem = new QTreeWidgetItem(m_treeWidget); | ||
64 | tenseItem->setText(0, tenseName); | 68 | tenseItem->setText(0, tenseName); | ||
65 | if (activeTenses.contains(tenseName)) { | 69 | if (activeTenses.contains(tenseName)) { | ||
66 | tenseItem->setCheckState(0, Qt::Checked); | 70 | tenseItem->setCheckState(0, Qt::Checked); | ||
71 | m_checkStates[tenseItem] = Qt::Checked; | ||||
67 | } else { | 72 | } else { | ||
68 | tenseItem->setCheckState(0, Qt::Unchecked); | 73 | tenseItem->setCheckState(0, Qt::Unchecked); | ||
74 | m_checkStates[tenseItem] = Qt::Unchecked; | ||||
69 | } | 75 | } | ||
70 | tenseItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable); | 76 | tenseItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable); | ||
71 | m_treeWidget->addTopLevelItem(tenseItem); | 77 | m_treeWidget->addTopLevelItem(tenseItem); | ||
72 | } | 78 | } | ||
79 | m_treeWidget->blockSignals(false); | ||||
73 | } | 80 | } | ||
74 | 81 | | |||
75 | void ConjugationOptions::updateSettings() | 82 | void ConjugationOptions::updateSettings() | ||
76 | { | 83 | { | ||
77 | qDebug() << "Save language selection"; | 84 | qDebug() << "Save language selection"; | ||
78 | QTreeWidgetItem* parentItem = m_treeWidget->invisibleRootItem(); | 85 | QTreeWidgetItem *parentItem = m_treeWidget->invisibleRootItem(); | ||
86 | if (parentItem == nullptr) { | ||||
87 | return; | ||||
88 | } | ||||
79 | QStringList activeTenses; | 89 | QStringList activeTenses; | ||
80 | for (int i = 0; i < parentItem->childCount(); i++) { | 90 | for (int i = 0; i < parentItem->childCount(); i++) { | ||
81 | QTreeWidgetItem* tenseItem = parentItem->child(i); | 91 | QTreeWidgetItem *tenseItem = parentItem->child(i); | ||
82 | if (tenseItem->checkState(0) == Qt::Checked) { | 92 | if (tenseItem->checkState(0) == Qt::Checked) { | ||
83 | activeTenses.append(tenseItem->text(0)); | 93 | activeTenses.append(tenseItem->text(0)); | ||
84 | } | 94 | } | ||
85 | } | 95 | } | ||
86 | DocumentSettings documentSettings(m_doc->url().url() + QString::number(m_language)); | 96 | DocumentSettings documentSettings(m_doc->url().url() + QString::number(m_language)); | ||
87 | documentSettings.setConjugationTenses(activeTenses); | 97 | documentSettings.setConjugationTenses(activeTenses); | ||
88 | documentSettings.save(); | 98 | documentSettings.save(); | ||
89 | } | 99 | } | ||
100 | | ||||
101 | void ConjugationOptions::processCheckBoxChanged(QTreeWidgetItem *item, int column) | ||||
102 | { | ||||
103 | if (column != 0) { | ||||
104 | return; | ||||
105 | } | ||||
106 | Qt::CheckState newCheckState = item->checkState(column); | ||||
107 | if (m_checkStates.contains(item) && (m_checkStates[item] != newCheckState)) { | ||||
108 | m_checkStates[item] = newCheckState; | ||||
109 | updateSettings(); | ||||
110 | emit checkBoxChanged(); | ||||
111 | } | ||||
112 | } | ||||
113 | |