File indexing completed on 2024-04-14 03:49:04
0001 /* 0002 SPDX-FileCopyrightText: 2008 Frederik Gladhorn <frederik.gladhorn@kdemail.net> 0003 SPDX-FileCopyrightText: 2016 Hartmut Riesenbeck <hartmut.riesenbeck@gmx.de> 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "entryfilterdialog.h" 0008 0009 #include "entryfilter.h" 0010 #include "ui_entryfilterdialog.h" 0011 #include <QPushButton> 0012 0013 EntryFilterDialog::EntryFilterDialog(EntryFilter &entryFilter) 0014 : QDialog() 0015 , m_ui(new Ui::EntryFilterDialog) 0016 , m_entryFilter(entryFilter) 0017 { 0018 m_ui->setupUi(this); 0019 0020 setupEntryCounts(); 0021 setupCheckBoxes(); 0022 setupConnections(); 0023 updateTotal(); 0024 0025 if (!Prefs::wordTypesInPracticeEnabled()) { 0026 m_ui->wordTypeLabel->setVisible(false); 0027 m_ui->wordTypeCheckBox->setVisible(false); 0028 } 0029 } 0030 0031 EntryFilterDialog::~EntryFilterDialog() 0032 { 0033 } 0034 0035 bool EntryFilterDialog::ignoreBlocked() const 0036 { 0037 return m_ui->blockedCheckBox->isChecked(); 0038 } 0039 0040 void EntryFilterDialog::setupEntryCounts() 0041 { 0042 int numEntries = m_entryFilter.m_entries[0].count() + m_entryFilter.m_entries[1].count(); 0043 0044 m_ui->lessonLabel->setText(QString::number(numEntries - m_entryFilter.m_entriesLesson[0].count() - m_entryFilter.m_entriesLesson[1].count())); 0045 m_ui->wordTypeLabel->setText(QString::number(numEntries - m_entryFilter.m_entriesWordType[0].count() - m_entryFilter.m_entriesWordType[1].count())); 0046 m_ui->blockedLabel->setText(QString::number(numEntries - m_entryFilter.m_entriesNotBlocked[0].count() - m_entryFilter.m_entriesNotBlocked[1].count())); 0047 m_ui->timesWrongLabel->setText(QString::number(numEntries - m_entryFilter.m_entriesTimesWrong[0].count() - m_entryFilter.m_entriesTimesWrong[1].count())); 0048 m_ui->timesPracticedLabel->setText( 0049 QString::number(numEntries - m_entryFilter.m_entriesTimesPracticed[0].count() - m_entryFilter.m_entriesTimesPracticed[1].count())); 0050 m_ui->minMaxGradeLabel->setText( 0051 QString::number(numEntries - m_entryFilter.m_entriesMinMaxGrade[0].count() - m_entryFilter.m_entriesMinMaxGrade[1].count())); 0052 m_ui->documentTotalLabel->setText(QString::number(numEntries)); 0053 } 0054 0055 void EntryFilterDialog::setupCheckBoxes() 0056 { 0057 m_ui->lessonCheckBox->setChecked((m_entryFilter.m_entriesLesson[0].count() + m_entryFilter.m_entriesLesson[1].count()) == 0); 0058 0059 m_ui->wordTypeCheckBox->setChecked((m_entryFilter.m_entriesWordType[0].count() + m_entryFilter.m_entriesWordType[1].count()) == 0); 0060 0061 m_ui->blockedCheckBox->setChecked((m_entryFilter.m_entriesNotBlocked[0].count() + m_entryFilter.m_entriesNotBlocked[1].count()) == 0); 0062 0063 m_ui->timesWrongCheckBox->setChecked((m_entryFilter.m_entriesTimesWrong[0].count() + m_entryFilter.m_entriesTimesWrong[1].count()) == 0); 0064 0065 m_ui->timesPracticedCheckBox->setChecked((m_entryFilter.m_entriesTimesPracticed[0].count() + m_entryFilter.m_entriesTimesPracticed[1].count()) == 0); 0066 0067 m_ui->minMaxGradeCheckBox->setChecked((m_entryFilter.m_entriesMinMaxGrade[0].count() + m_entryFilter.m_entriesMinMaxGrade[1].count()) == 0); 0068 } 0069 0070 void EntryFilterDialog::updateTotal() 0071 { 0072 for (int i = 0; i < m_entryFilter.m_numSets; ++i) { 0073 // Introduce reference to current selection here to make code better readable. 0074 QSet<KEduVocExpression *> ¤tSet = m_entryFilter.m_currentSelection[i]; 0075 0076 currentSet = m_entryFilter.m_entries[i]; 0077 if (!m_ui->lessonCheckBox->isChecked()) { 0078 currentSet = currentSet.intersect(m_entryFilter.m_entriesLesson[i]); 0079 } 0080 if (!m_ui->wordTypeCheckBox->isChecked()) { 0081 currentSet = currentSet.intersect(m_entryFilter.m_entriesWordType[i]); 0082 } 0083 if (!m_ui->blockedCheckBox->isChecked()) { 0084 currentSet = currentSet.intersect(m_entryFilter.m_entriesNotBlocked[i]); 0085 } 0086 if (!m_ui->timesWrongCheckBox->isChecked()) { 0087 currentSet = currentSet.intersect(m_entryFilter.m_entriesTimesWrong[i]); 0088 } 0089 if (!m_ui->timesPracticedCheckBox->isChecked()) { 0090 currentSet = currentSet.intersect(m_entryFilter.m_entriesTimesPracticed[i]); 0091 } 0092 if (!m_ui->minMaxGradeCheckBox->isChecked()) { 0093 currentSet = currentSet.intersect(m_entryFilter.m_entriesMinMaxGrade[i]); 0094 } 0095 } 0096 0097 int numSelected = m_entryFilter.m_currentSelection[0].count() + m_entryFilter.m_currentSelection[1].count(); 0098 m_ui->totalLabel->setText(QString::number(numSelected)); 0099 m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(numSelected > 0); 0100 } 0101 0102 void EntryFilterDialog::setupConnections() 0103 { 0104 connect(m_ui->buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); 0105 connect(m_ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); 0106 0107 connect(m_ui->lessonCheckBox, &QAbstractButton::toggled, this, &EntryFilterDialog::updateTotal); 0108 connect(m_ui->wordTypeCheckBox, &QAbstractButton::toggled, this, &EntryFilterDialog::updateTotal); 0109 connect(m_ui->blockedCheckBox, &QAbstractButton::toggled, this, &EntryFilterDialog::updateTotal); 0110 connect(m_ui->timesWrongCheckBox, &QAbstractButton::toggled, this, &EntryFilterDialog::updateTotal); 0111 connect(m_ui->timesPracticedCheckBox, &QAbstractButton::toggled, this, &EntryFilterDialog::updateTotal); 0112 connect(m_ui->minMaxGradeCheckBox, &QAbstractButton::toggled, this, &EntryFilterDialog::updateTotal); 0113 } 0114 0115 #include "moc_entryfilterdialog.cpp"