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 *> &currentSet = 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"